8.9 KiB
Deploiement de Consul et Registrator (mode production)
Ce guide explique comment deployer Consul et Registrator avec ACL sur l'infrastructure existante sans perturber les services en production.
Prerequis
- Infrastructure existante fonctionnelle (Gitea, Woodpecker, PostgreSQL)
- Acces SSH au serveur
- Reseau Docker
gitgit_syoul_fr_gitea_netexistant
Vue d'ensemble
AVANT (actuel) APRES (avec Consul + ACL)
---------------- -------------------------
[Gitea] [Gitea] <-+
| | |
v v |
[gitea:3000] [gitea:3000]
^ ^ |
| | |
[Woodpecker] [Woodpecker]
| |
v v
[Consul + ACL] <-- [Registrator + Token]
Etape 1 : Copier les fichiers sur le serveur
# Depuis votre machine locale
scp -r consul/ portainer2:/opt/
scp -r registrator/ portainer2:/opt/
Etape 2 : Deployer Consul
Demarrer Consul
ssh portainer2
cd /opt/consul
docker compose up -d
Verifier le demarrage
# Attendre quelques secondes
sleep 10
# Verifier que le conteneur est lance
docker ps | grep consul
# Verifier les logs
docker logs consul
# Tester l'API (sans token, certaines routes sont accessibles)
curl -s http://localhost:8500/v1/status/leader
Verifier l'interface web
Acceder a : http://[IP-serveur]:8500
Note : Avec les ACL activees, vous verrez un message demandant un token pour acceder aux services.
Etape 3 : Initialiser les ACL
Bootstrap des ACL
# Generer le token administrateur
docker exec consul consul acl bootstrap
IMPORTANT : Notez le SecretID retourne. C'est votre token administrateur.
Exemple de sortie :
AccessorID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SecretID: abcdef12-3456-7890-abcd-ef1234567890 <-- NOTEZ CE TOKEN !
Description: Bootstrap Token (Global Management)
Local: false
Create Time: 2025-01-01 00:00:00.000000000 +0000 UTC
Policies:
00000000-0000-0000-0000-000000000001 - global-management
Stocker le token admin
# Sur le serveur, creer le fichier .env pour Consul
cd /opt/consul
echo "CONSUL_HTTP_TOKEN=abcdef12-3456-7890-abcd-ef1234567890" > .env
chmod 600 .env
# Exporter pour les commandes suivantes
export CONSUL_TOKEN="abcdef12-3456-7890-abcd-ef1234567890"
Creer la policy pour Registrator
docker exec consul consul acl policy create \
-name "registrator" \
-description "Policy pour Registrator - enregistrement des services" \
-rules '
service_prefix "" {
policy = "write"
}
node_prefix "" {
policy = "read"
}
agent_prefix "" {
policy = "read"
}
' \
-token "$CONSUL_TOKEN"
Creer le token Registrator
docker exec consul consul acl token create \
-description "Token Registrator" \
-policy-name "registrator" \
-token "$CONSUL_TOKEN"
Notez le SecretID du token Registrator.
Exemple :
AccessorID: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
SecretID: registr8-or12-3456-7890-tokenexample <-- TOKEN REGISTRATOR
Description: Token Registrator
...
Etape 4 : Deployer Registrator
Configurer le token
cd /opt/registrator
# Creer le fichier .env avec le token Registrator
echo "CONSUL_HTTP_TOKEN=registr8-or12-3456-7890-tokenexample" > .env
chmod 600 .env
Demarrer Registrator
docker compose up -d
Verifier le demarrage
# Verifier que le conteneur est lance
docker ps | grep registrator
# Verifier les logs (pas d'erreur ACL)
docker logs registrator
Etape 5 : Verifier les services enregistres
# Via l'API (avec token admin)
curl -s -H "X-Consul-Token: $CONSUL_TOKEN" \
http://localhost:8500/v1/catalog/services | python3 -m json.tool
Vous devriez voir les services existants :
{
"consul": [],
"gitea-3000": [],
"woodpecker-server-8000": [],
"gitea_db-5432": []
}
Note : Les noms de services sont automatiques. Pour des noms propres, ajoutez des labels (etape suivante).
Etape 6 : Ajouter les labels aux services (optionnel mais recommande)
Pour avoir des noms de services propres et des health checks, modifier les docker-compose existants.
Gitea
Modifier /opt/gitea/docker-compose.yml :
services:
gitea:
container_name: gitea
image: gitea/gitea:latest
restart: always
# Ajouter ces labels
labels:
- "SERVICE_NAME=gitea"
- "SERVICE_TAGS=web,git"
- "SERVICE_3000_CHECK_HTTP=/api/v1/version"
- "SERVICE_3000_CHECK_INTERVAL=15s"
# ... reste de la configuration inchangee ...
PostgreSQL
Modifier /opt/postgres/docker-compose.yml :
services:
gitea_db:
container_name: gitea_db
image: postgres:14
restart: always
# Ajouter ces labels
labels:
- "SERVICE_NAME=gitea-db"
- "SERVICE_TAGS=postgres,database"
- "SERVICE_5432_CHECK_TCP=true"
- "SERVICE_5432_CHECK_INTERVAL=10s"
# ... reste de la configuration inchangee ...
Woodpecker
Modifier /opt/woodpecker/docker-compose.yml :
services:
woodpecker-server:
# ...
labels:
- "SERVICE_NAME=woodpecker"
- "SERVICE_TAGS=ci,web"
- "SERVICE_8000_CHECK_HTTP=/healthz"
- "SERVICE_8000_CHECK_INTERVAL=15s"
woodpecker-agent:
# ...
labels:
- "SERVICE_NAME=woodpecker-agent"
- "SERVICE_TAGS=ci,agent"
Appliquer les changements
# Pour chaque service modifie
cd /opt/[service]
docker compose up -d
Note : Cette operation redemarrera les conteneurs. Effectuer pendant une periode de faible activite.
Etape 7 : Tester la resolution DNS (optionnel)
Depuis le serveur
dig @localhost -p 8600 gitea.service.consul
dig @localhost -p 8600 woodpecker.service.consul
dig @localhost -p 8600 gitea-db.service.consul
Depuis un conteneur
docker exec consul dig @127.0.0.1 -p 8600 gitea.service.consul
Verification finale
Tous les services sont enregistres
curl -s -H "X-Consul-Token: $CONSUL_TOKEN" \
http://localhost:8500/v1/catalog/services | python3 -m json.tool
Resultat attendu (avec labels) :
{
"consul": [],
"gitea": ["web", "git"],
"gitea-db": ["postgres", "database"],
"woodpecker": ["ci", "web"],
"woodpecker-agent": ["ci", "agent"]
}
Health checks sont verts
Dans l'interface Consul : http://[IP-serveur]:8500/ui/dc1/services
Utilisez le token admin pour voir les services. Tous devraient avoir un statut "passing" (vert).
Resolution DNS fonctionne
dig @localhost -p 8600 gitea.service.consul +short
# Devrait retourner l'IP du conteneur gitea
Tokens fonctionnels
# Test token admin
curl -s -H "X-Consul-Token: $CONSUL_TOKEN" \
http://localhost:8500/v1/acl/tokens | head -20
# Test token Registrator (via logs)
docker logs registrator 2>&1 | grep -i error
# Pas d'erreur = token OK
Resume des tokens
| Token | Fichier | Usage |
|---|---|---|
| Admin (bootstrap) | /opt/consul/.env |
Administration Consul |
| Registrator | /opt/registrator/.env |
Enregistrement des services |
Rollback
Si vous rencontrez des problemes et souhaitez desactiver Consul/Registrator :
# Arreter Registrator et Consul
cd /opt/registrator && docker compose down
cd /opt/consul && docker compose down
# Les services existants continueront de fonctionner normalement
# via le reseau Docker classique
Pour repartir de zero (supprimer les donnees Consul) :
docker volume rm consul_consul-data
Securite - Bonnes pratiques
1. Proteger les fichiers .env
chmod 600 /opt/consul/.env
chmod 600 /opt/registrator/.env
2. Ne pas exposer le port 8500 sur Internet
Utiliser un firewall ou n'exposer que sur localhost :
ports:
- "127.0.0.1:8500:8500"
3. Rotation des tokens
Periodiquement (ex: tous les 3 mois) :
- Creer un nouveau token Registrator
- Mettre a jour
/opt/registrator/.env - Redemarrer Registrator
- Revoquer l'ancien token
4. Sauvegardes
# Sauvegarder Consul
docker exec consul consul snapshot save /consul/data/backup.snap -token "$CONSUL_TOKEN"
docker cp consul:/consul/data/backup.snap ./consul_backup_$(date +%Y%m%d).snap
# Sauvegarder les tokens (fichiers .env)
cp /opt/consul/.env ./consul_env_backup_$(date +%Y%m%d)
cp /opt/registrator/.env ./registrator_env_backup_$(date +%Y%m%d)
Prochaines etapes
- Surveillance : Ajouter des alertes basees sur les health checks Consul
- Configuration distribuee : Utiliser le Key/Value store de Consul
- Haute disponibilite : Deployer plusieurs noeuds Consul
- TLS : Activer le chiffrement des communications