Gitea est une application Git auto-hébergée, légère et prête pour la prod. Nous déployons 3 instances (alice, bob, charlie) derrière Traefik, chacune avec sa base Postgres.
-
Créer le réseau overlay partagé
docker network create --driver overlay traefik-public
-
Déployer Traefik
docker stack deploy -c traefik-stack.yml traefik
-
Déployer les applications
docker stack deploy -c docker-stack-alice.yml alice docker stack deploy -c docker-stack-bob.yml bob docker stack deploy -c docker-stack-charlie.yml charlie
Les stacks exposent:
- Alice:
alice.apps.lan - Bob:
bob.apps.lan - Charlie:
charlie.apps.lan
Comptes/init: Gitea s’initialise au premier lancement. La base Postgres utilise par défaut gitea / gitea (utilisateur/mot de passe) définis dans les stacks.
Le stack traefik-stack.yml embarque un service DNS (CoreDNS) qui résout *.apps.lan vers 192.168.101.100.
Configurer macOS pour envoyer les requêtes apps.lan vers ce DNS:
sudo mkdir -p /etc/resolver
echo "nameserver 127.0.0.1" | sudo tee /etc/resolver/apps.lanTester:
dig +short alice.apps.lan
curl -I http://alice.apps.lanAstuce: si 127.0.0.1 ne fonctionne pas, remplacez par l’IP hôte 192.168.101.100.
linkedin-clone-docker/(frontend statique servi par Nginx + backend Node + Mongo)build/(assets frontend précompilés copiés parDockerfile.fe)server/(backend Express,Dockerfile.be).gitignoreet.dockerignoreconfigurés pour ignorer le superflu
-
Créer le réseau overlay partagé:
docker network create --driver overlay traefik-public
-
Déployer Traefik:
docker stack deploy -c traefik-stack.yml traefik
Attention: docker stack deploy (Swarm) ne construit pas les images à partir de build:. Deux options:
- Option A (local/Compose): utiliser
docker-compose.yamldanslinkedin-clone-docker/pour tester en local. - Option B (recommandé en Swarm): construire et pousser des images, puis référencer ces images dans les stacks
docker-stack-*.ymlviaimage:(à la place debuild:).
Exemple (schématique) pour construire/pousser:
# Frontend (copie de linkedin-clone-docker/build/ dans Nginx)
docker build -t <registry>/linkedin-fe:latest -f linkedin-clone-docker/Dockerfile.fe linkedin-clone-docker
docker push <registry>/linkedin-fe:latest
# Backend
docker build -t <registry>/linkedin-be:latest -f linkedin-clone-docker/server/Dockerfile.be linkedin-clone-docker/server
docker push <registry>/linkedin-be:latestEnsuite, remplacer les sections build: par image: <registry>/linkedin-fe:latest et image: <registry>/linkedin-be:latest dans docker-stack-*.yml.
Les stacks exposent:
- Alice:
alice.apps.lan - Bob:
bob.apps.lan - Charlie:
charlie.apps.lan
Le backend est exposé sur le même host (port interne 9000) via Traefik.
Le frontend utilise process.env.REACT_APP_* (injectées au build CRA). Si vous devez changer les URLs API, reconstruisez le dossier build/ avec les variables souhaitées, puis reconstruisez l'image frontend.
.gitignoredanslinkedin-clone-docker/ignorenode_modules/, dossiers redondants (dev/,linked-in-clone-cp/), logs et fichiers d’environnement..dockerignoreà la racine frontend inclut uniquementbuild/etDockerfile.fedans le contexte de build..dockerignoredansserver/exclutnode_modules/, logs,.env, etc.