Initial commit: Infrastructure Git CI/CD avec Gitea, Woodpecker, PostgreSQL, Consul et Registrator
This commit is contained in:
59
.gitignore
vendored
Normal file
59
.gitignore
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
# Secrets et fichiers sensibles - NE PAS VERSIONNER
|
||||
.env
|
||||
*.env
|
||||
!*.env.template
|
||||
!*.env.example
|
||||
!env.template
|
||||
|
||||
# Fichiers de configuration avec mots de passe
|
||||
gitea/gitea.env
|
||||
postgres/.env
|
||||
consul/.env
|
||||
registrator/.env
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
*.log.*
|
||||
|
||||
# Fichiers temporaires
|
||||
*.tmp
|
||||
*.temp
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# IDE et editeurs
|
||||
.idea/
|
||||
.vscode/
|
||||
.vscode-oss/
|
||||
.vscodium-insiders/
|
||||
*.code-workspace
|
||||
.DS_Store
|
||||
|
||||
# Docker
|
||||
*.pid
|
||||
docker-compose.override.yml
|
||||
|
||||
# Sauvegardes
|
||||
*.sql
|
||||
*.sql.gz
|
||||
*.snap
|
||||
backup/
|
||||
backups/
|
||||
*.backup
|
||||
|
||||
# Fichiers systeme
|
||||
Thumbs.db
|
||||
.DS_Store
|
||||
|
||||
# Certificats et cles (si ajoutes plus tard)
|
||||
*.pem
|
||||
*.key
|
||||
*.crt
|
||||
*.cert
|
||||
!*.example
|
||||
|
||||
# Variables d'environnement locales
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
84
README.md
Normal file
84
README.md
Normal file
@ -0,0 +1,84 @@
|
||||
# Infrastructure Git CI/CD
|
||||
|
||||
Configuration Docker Compose pour une infrastructure complete de gestion de code source et d'integration continue.
|
||||
|
||||
## Composants
|
||||
|
||||
- **Gitea** : Serveur Git auto-heberge
|
||||
- **Woodpecker CI** : Plateforme CI/CD
|
||||
- **PostgreSQL** : Base de donnees pour Gitea
|
||||
- **Consul** : Service discovery (optionnel)
|
||||
- **Registrator** : Auto-registration Docker (optionnel)
|
||||
|
||||
## Structure
|
||||
|
||||
```
|
||||
.
|
||||
├── consul/ # Configuration Consul
|
||||
├── docs/ # Documentation complete
|
||||
├── gitea/ # Configuration Gitea
|
||||
├── postgres/ # Configuration PostgreSQL
|
||||
├── registrator/ # Configuration Registrator
|
||||
└── woodpecker/ # Configuration Woodpecker CI
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
Voir le dossier [docs/](docs/) pour la documentation complete :
|
||||
|
||||
- [Architecture](docs/01-architecture.md)
|
||||
- [Installation](docs/02-installation.md)
|
||||
- [Configuration Gitea](docs/03-configuration-gitea.md)
|
||||
- [Configuration Woodpecker](docs/04-configuration-woodpecker.md)
|
||||
- [Configuration PostgreSQL](docs/05-configuration-postgresql.md)
|
||||
- [Configuration Consul](docs/06-configuration-consul.md)
|
||||
- [Configuration Registrator](docs/07-configuration-registrator.md)
|
||||
- [Deploiement Consul/Registrator](docs/08-deploiement-consul-registrator.md)
|
||||
|
||||
## Deploiement
|
||||
|
||||
### Sur le serveur
|
||||
|
||||
```bash
|
||||
cd /opt
|
||||
git clone git@git.syoul.fr:syoul/infrastructure.git
|
||||
cd infrastructure
|
||||
|
||||
# Creer les fichiers .env necessaires
|
||||
cp consul/env.template consul/.env
|
||||
cp registrator/env.template registrator/.env
|
||||
# Editer ces fichiers avec les vrais tokens
|
||||
|
||||
# Deployer les services
|
||||
cd consul && docker compose up -d
|
||||
cd ../registrator && docker compose up -d
|
||||
cd ../postgres && docker compose up -d
|
||||
cd ../gitea && docker compose up -d
|
||||
cd ../woodpecker && docker compose up -d
|
||||
```
|
||||
|
||||
## Fichiers secrets
|
||||
|
||||
Les fichiers suivants ne sont **PAS versionnes** et doivent etre crees sur le serveur :
|
||||
|
||||
- `consul/.env` : Token administrateur Consul
|
||||
- `registrator/.env` : Token Registrator
|
||||
- `gitea/gitea.env` : Configuration Gitea avec mots de passe
|
||||
|
||||
Utilisez les fichiers `*.template` comme reference.
|
||||
|
||||
## Maintenance
|
||||
|
||||
Pour mettre a jour l'infrastructure :
|
||||
|
||||
```bash
|
||||
cd /opt/infrastructure
|
||||
git pull
|
||||
# Redemarrer les services modifies
|
||||
cd [service] && docker compose up -d
|
||||
```
|
||||
|
||||
## Licence
|
||||
|
||||
Prive - Infrastructure interne
|
||||
|
||||
45
consul/docker-compose.yml
Normal file
45
consul/docker-compose.yml
Normal file
@ -0,0 +1,45 @@
|
||||
services:
|
||||
consul:
|
||||
container_name: consul
|
||||
image: hashicorp/consul:latest
|
||||
restart: unless-stopped
|
||||
command: agent -server -ui -node=server-1 -bootstrap-expect=1 -client=0.0.0.0
|
||||
|
||||
ports:
|
||||
- "8500:8500" # UI web et API HTTP
|
||||
- "8600:8600/udp" # DNS
|
||||
- "8600:8600/tcp" # DNS
|
||||
|
||||
environment:
|
||||
# Configuration ACL pour la production
|
||||
# default_policy: deny = tout est interdit par defaut
|
||||
# enable_token_persistence: true = tokens sauvegardes sur disque
|
||||
CONSUL_LOCAL_CONFIG: >-
|
||||
{
|
||||
"acl": {
|
||||
"enabled": true,
|
||||
"default_policy": "deny",
|
||||
"enable_token_persistence": true
|
||||
}
|
||||
}
|
||||
|
||||
volumes:
|
||||
- consul-data:/consul/data
|
||||
|
||||
networks:
|
||||
gitgit_syoul_fr_gitea_net:
|
||||
aliases:
|
||||
- consul
|
||||
|
||||
healthcheck:
|
||||
test: ["CMD", "consul", "members"]
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
|
||||
volumes:
|
||||
consul-data:
|
||||
|
||||
networks:
|
||||
gitgit_syoul_fr_gitea_net:
|
||||
external: true
|
||||
10
consul/env.template
Normal file
10
consul/env.template
Normal file
@ -0,0 +1,10 @@
|
||||
# Token administrateur Consul (bootstrap token)
|
||||
# Genere lors de l'initialisation des ACL avec : docker exec consul consul acl bootstrap
|
||||
#
|
||||
# INSTRUCTIONS :
|
||||
# 1. Copier ce fichier vers .env
|
||||
# 2. Remplacer la valeur du token par le vrai token
|
||||
# 3. NE PAS VERSIONNER le fichier .env !
|
||||
|
||||
CONSUL_HTTP_TOKEN=votre-token-admin-ici
|
||||
|
||||
99
docs/01-architecture.md
Normal file
99
docs/01-architecture.md
Normal file
@ -0,0 +1,99 @@
|
||||
# Architecture de l'infrastructure Git CI/CD
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
Cette infrastructure fournit une solution complete de gestion de code source et d'integration continue.
|
||||
|
||||
```
|
||||
+------------------+
|
||||
| Utilisateurs |
|
||||
+--------+---------+
|
||||
|
|
||||
+--------------+--------------+
|
||||
| |
|
||||
v v
|
||||
+-------------------+ +-------------------+
|
||||
| git.syoul.fr | | ci.syoul.fr |
|
||||
| (Gitea :3300) | | (Woodpecker:9001)|
|
||||
+--------+----------+ +--------+----------+
|
||||
| |
|
||||
| +---------------------+ |
|
||||
+-->| Consul :8500 |<--+
|
||||
| Service Discovery |
|
||||
+----------+----------+
|
||||
|
|
||||
+----------+----------+
|
||||
| Registrator |
|
||||
| (auto-registration) |
|
||||
+---------------------+
|
||||
|
|
||||
+-------------+-------------+
|
||||
| |
|
||||
+---------+---------+ +---------+---------+
|
||||
| PostgreSQL | | Woodpecker |
|
||||
| (gitea_db) | | Agent |
|
||||
+-------------------+ +-------------------+
|
||||
```
|
||||
|
||||
## Composants
|
||||
|
||||
### Services principaux
|
||||
|
||||
| Service | Port externe | Port interne | Description |
|
||||
|---------|--------------|--------------|-------------|
|
||||
| Gitea | 3300 | 3000 | Serveur Git auto-heberge |
|
||||
| Gitea SSH | 2222 | 22 | Acces SSH pour Git |
|
||||
| Woodpecker Server | 9001 | 8000 | Serveur CI/CD |
|
||||
| Woodpecker Agent | - | 3000 | Agent d'execution des pipelines |
|
||||
| PostgreSQL | - | 5432 | Base de donnees Gitea |
|
||||
| Consul | 8500 | 8500 | Service discovery et UI |
|
||||
| Consul DNS | 8600 | 8600 | Resolution DNS des services |
|
||||
| Registrator | - | - | Enregistrement automatique |
|
||||
|
||||
### Reseau Docker
|
||||
|
||||
Tous les services utilisent le reseau Docker : `gitgit_syoul_fr_gitea_net`
|
||||
- Sous-reseau : `172.18.0.0/16`
|
||||
- Gateway : `172.18.0.1`
|
||||
|
||||
### Volumes persistants
|
||||
|
||||
| Volume | Service | Chemin dans le conteneur |
|
||||
|--------|---------|--------------------------|
|
||||
| `gitgit_syoul_fr_gitea_data` | Gitea | `/data` |
|
||||
| `gitgit_syoul_fr_db_data` | PostgreSQL | `/var/lib/postgresql/data` |
|
||||
| `woodpecker-data` | Woodpecker Server | `/var/lib/woodpecker` |
|
||||
| `consul-data` | Consul | `/consul/data` |
|
||||
|
||||
## Flux de communication
|
||||
|
||||
### Authentification OAuth2 (Woodpecker <-> Gitea)
|
||||
|
||||
1. Utilisateur accede a `ci.syoul.fr`
|
||||
2. Woodpecker redirige vers `git.syoul.fr/login/oauth/authorize`
|
||||
3. Utilisateur s'authentifie sur Gitea
|
||||
4. Gitea redirige vers `ci.syoul.fr/authorize` avec le code
|
||||
5. Woodpecker echange le code contre un token via `gitea:3000`
|
||||
|
||||
### Communication interne (avec Consul)
|
||||
|
||||
1. Registrator detecte les nouveaux conteneurs
|
||||
2. Registrator enregistre les services dans Consul
|
||||
3. Les services peuvent se trouver via DNS Consul : `gitea.service.consul`
|
||||
|
||||
### Webhooks CI/CD
|
||||
|
||||
1. Commit sur Gitea
|
||||
2. Gitea envoie un webhook a Woodpecker
|
||||
3. Woodpecker Server planifie le build
|
||||
4. Woodpecker Agent execute le pipeline
|
||||
5. Resultats affiches dans Gitea et Woodpecker
|
||||
|
||||
## URLs d'acces
|
||||
|
||||
| Service | URL |
|
||||
|---------|-----|
|
||||
| Gitea | http://git.syoul.fr |
|
||||
| Woodpecker | https://ci.syoul.fr |
|
||||
| Consul UI | http://[serveur]:8500 |
|
||||
|
||||
176
docs/02-installation.md
Normal file
176
docs/02-installation.md
Normal file
@ -0,0 +1,176 @@
|
||||
# Guide d'installation
|
||||
|
||||
## Prerequis
|
||||
|
||||
- Docker et Docker Compose installes
|
||||
- Acces SSH au serveur
|
||||
- Domaines configures : `git.syoul.fr`, `ci.syoul.fr`
|
||||
|
||||
## Ordre de deploiement
|
||||
|
||||
**IMPORTANT** : Respecter l'ordre suivant pour eviter les problemes de dependances.
|
||||
|
||||
```
|
||||
1. Reseau Docker (si non existant)
|
||||
2. PostgreSQL (base de donnees)
|
||||
3. Gitea (serveur Git)
|
||||
4. Consul (service discovery) [optionnel]
|
||||
5. Registrator (auto-registration) [optionnel]
|
||||
6. Woodpecker (CI/CD)
|
||||
```
|
||||
|
||||
## Etape 1 : Creer le reseau Docker
|
||||
|
||||
Si le reseau n'existe pas :
|
||||
|
||||
```bash
|
||||
docker network create gitgit_syoul_fr_gitea_net
|
||||
```
|
||||
|
||||
Verifier :
|
||||
|
||||
```bash
|
||||
docker network ls | grep gitea
|
||||
```
|
||||
|
||||
## Etape 2 : Deployer PostgreSQL
|
||||
|
||||
```bash
|
||||
cd /opt/postgres
|
||||
docker compose up -d
|
||||
docker logs gitea_db
|
||||
```
|
||||
|
||||
Verifier :
|
||||
|
||||
```bash
|
||||
docker exec gitea_db pg_isready -U gitea
|
||||
```
|
||||
|
||||
## Etape 3 : Deployer Gitea
|
||||
|
||||
```bash
|
||||
cd /opt/gitea
|
||||
docker compose up -d
|
||||
docker logs gitea
|
||||
```
|
||||
|
||||
Verifier :
|
||||
|
||||
```bash
|
||||
curl -s http://localhost:3300/api/v1/version
|
||||
```
|
||||
|
||||
## Etape 4 : Deployer Consul (optionnel)
|
||||
|
||||
```bash
|
||||
cd /opt/consul
|
||||
docker compose up -d
|
||||
docker logs consul
|
||||
```
|
||||
|
||||
Verifier :
|
||||
|
||||
```bash
|
||||
# UI accessible
|
||||
curl -s http://localhost:8500/v1/status/leader
|
||||
|
||||
# DNS fonctionne
|
||||
dig @localhost -p 8600 consul.service.consul
|
||||
```
|
||||
|
||||
## Etape 5 : Deployer Registrator (optionnel)
|
||||
|
||||
**Prerequis** : Consul doit etre demarre et accessible.
|
||||
|
||||
```bash
|
||||
cd /opt/registrator
|
||||
docker compose up -d
|
||||
docker logs registrator
|
||||
```
|
||||
|
||||
Verifier :
|
||||
|
||||
```bash
|
||||
# Les services apparaissent dans Consul
|
||||
curl -s http://localhost:8500/v1/catalog/services | python3 -m json.tool
|
||||
```
|
||||
|
||||
## Etape 6 : Deployer Woodpecker
|
||||
|
||||
```bash
|
||||
cd /opt/woodpecker
|
||||
docker compose up -d
|
||||
docker logs woodpecker-server
|
||||
docker logs woodpecker-agent
|
||||
```
|
||||
|
||||
Verifier :
|
||||
|
||||
```bash
|
||||
curl -s http://localhost:9001/api/info
|
||||
```
|
||||
|
||||
## Verification finale
|
||||
|
||||
### Tous les conteneurs sont en cours d'execution
|
||||
|
||||
```bash
|
||||
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||
```
|
||||
|
||||
Resultat attendu :
|
||||
|
||||
```
|
||||
NAMES STATUS PORTS
|
||||
consul Up X minutes 0.0.0.0:8500->8500/tcp, ...
|
||||
registrator Up X minutes
|
||||
woodpecker-agent Up X minutes 3000/tcp
|
||||
woodpecker-server Up X minutes 0.0.0.0:9001->8000/tcp, ...
|
||||
gitea Up X minutes 0.0.0.0:3300->3000/tcp, ...
|
||||
gitea_db Up X minutes 5432/tcp
|
||||
```
|
||||
|
||||
### Services enregistres dans Consul
|
||||
|
||||
```bash
|
||||
curl -s http://localhost:8500/v1/catalog/services
|
||||
```
|
||||
|
||||
### Test de connexion OAuth2
|
||||
|
||||
1. Acceder a https://ci.syoul.fr
|
||||
2. Cliquer sur "Se connecter avec git.syoul.fr"
|
||||
3. S'authentifier sur Gitea
|
||||
4. Autoriser l'application Woodpecker
|
||||
5. Etre redirige vers le dashboard Woodpecker
|
||||
|
||||
## Commandes de maintenance
|
||||
|
||||
### Redemarrer un service
|
||||
|
||||
```bash
|
||||
cd /opt/[service]
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
### Voir les logs
|
||||
|
||||
```bash
|
||||
docker logs -f [nom-conteneur]
|
||||
```
|
||||
|
||||
### Mettre a jour un service
|
||||
|
||||
```bash
|
||||
cd /opt/[service]
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### Sauvegarder PostgreSQL
|
||||
|
||||
```bash
|
||||
docker exec gitea_db pg_dump -U gitea gitea > backup_$(date +%Y%m%d_%H%M%S).sql
|
||||
```
|
||||
|
||||
160
docs/03-configuration-gitea.md
Normal file
160
docs/03-configuration-gitea.md
Normal file
@ -0,0 +1,160 @@
|
||||
# Configuration Gitea
|
||||
|
||||
## Fichiers de configuration
|
||||
|
||||
- `gitea/docker-compose.yml` : Configuration Docker Compose
|
||||
- `gitea/gitea.env` : Variables d'environnement
|
||||
|
||||
## Configuration actuelle
|
||||
|
||||
### docker-compose.yml
|
||||
|
||||
```yaml
|
||||
services:
|
||||
gitea:
|
||||
container_name: gitea
|
||||
image: gitea/gitea:latest
|
||||
restart: always
|
||||
env_file:
|
||||
- gitea.env
|
||||
networks:
|
||||
- gitgit_syoul_fr_gitea_net
|
||||
volumes:
|
||||
- gitgit_syoul_fr_gitea_data:/data
|
||||
ports:
|
||||
- "3300:3000" # Web UI
|
||||
- "2222:22" # SSH
|
||||
|
||||
volumes:
|
||||
gitgit_syoul_fr_gitea_data:
|
||||
external: true
|
||||
|
||||
networks:
|
||||
gitgit_syoul_fr_gitea_net:
|
||||
external: true
|
||||
```
|
||||
|
||||
### Variables d'environnement (gitea.env)
|
||||
|
||||
| Variable | Valeur | Description |
|
||||
|----------|--------|-------------|
|
||||
| `USER_UID` | 1000 | UID de l'utilisateur Gitea |
|
||||
| `USER_GID` | 1000 | GID de l'utilisateur Gitea |
|
||||
| `GITEA__database__DB_TYPE` | postgres | Type de base de donnees |
|
||||
| `GITEA__database__HOST` | gitea_db:5432 | Hote de la base de donnees |
|
||||
| `GITEA__database__NAME` | gitea | Nom de la base de donnees |
|
||||
| `GITEA__database__USER` | gitea | Utilisateur de la base de donnees |
|
||||
| `GITEA__database__PASSWD` | *** | Mot de passe de la base de donnees |
|
||||
| `GITEA__server__DOMAIN` | git.syoul.fr | Domaine public |
|
||||
| `GITEA__server__PROTOCOL` | http | Protocole interne |
|
||||
| `GITEA__server__ROOT_URL` | http://git.syoul.fr/ | URL racine publique |
|
||||
| `GITEA__server__HTTP_PORT` | 3000 | Port HTTP interne |
|
||||
|
||||
## Configuration OAuth2 pour Woodpecker
|
||||
|
||||
### Creer l'application OAuth2
|
||||
|
||||
1. Se connecter a Gitea en tant qu'administrateur
|
||||
2. Aller dans **Parametres utilisateur** > **Applications**
|
||||
3. Sous "Gerer les applications OAuth2", creer une nouvelle application :
|
||||
- **Nom** : `Woodpecker CI`
|
||||
- **URI de redirection** : `https://ci.syoul.fr/authorize`
|
||||
- **Client confidentiel** : Oui
|
||||
4. Noter le **Client ID** et le **Client Secret**
|
||||
|
||||
### Configurer Woodpecker
|
||||
|
||||
Dans `woodpecker/docker-compose.yml`, utiliser :
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
WOODPECKER_GITEA_CLIENT: "votre-client-id"
|
||||
WOODPECKER_GITEA_SECRET: "votre-client-secret"
|
||||
```
|
||||
|
||||
## Configuration des webhooks
|
||||
|
||||
### Autoriser les webhooks locaux
|
||||
|
||||
Dans Gitea, ajouter dans `app.ini` ou via variables d'environnement :
|
||||
|
||||
```ini
|
||||
[webhook]
|
||||
ALLOWED_HOST_LIST = external,loopback,private
|
||||
```
|
||||
|
||||
Via docker-compose :
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
GITEA__webhook__ALLOWED_HOST_LIST: external,loopback,private
|
||||
```
|
||||
|
||||
### Configurer le webhook automatique
|
||||
|
||||
Woodpecker configure automatiquement les webhooks lors de l'activation d'un depot. Verifier dans :
|
||||
|
||||
**Depot** > **Parametres** > **Webhooks**
|
||||
|
||||
## Maintenance
|
||||
|
||||
### Sauvegarder Gitea
|
||||
|
||||
```bash
|
||||
# Sauvegarder le volume de donnees
|
||||
docker run --rm -v gitgit_syoul_fr_gitea_data:/data -v $(pwd):/backup alpine tar cvzf /backup/gitea_backup_$(date +%Y%m%d).tar.gz /data
|
||||
|
||||
# Sauvegarder la base de donnees
|
||||
docker exec gitea_db pg_dump -U gitea gitea > gitea_db_$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
### Mettre a jour Gitea
|
||||
|
||||
```bash
|
||||
cd /opt/gitea
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### Logs
|
||||
|
||||
```bash
|
||||
docker logs gitea -f
|
||||
```
|
||||
|
||||
## Depannage
|
||||
|
||||
### Erreur de connexion a la base de donnees
|
||||
|
||||
Verifier que PostgreSQL est accessible :
|
||||
|
||||
```bash
|
||||
docker exec gitea_db pg_isready -U gitea
|
||||
```
|
||||
|
||||
Verifier le reseau :
|
||||
|
||||
```bash
|
||||
docker exec gitea ping -c 2 gitea_db
|
||||
```
|
||||
|
||||
### Erreur OAuth2 "Client ID not registered"
|
||||
|
||||
1. Verifier que l'application OAuth2 existe dans Gitea
|
||||
2. Verifier que le Client ID dans Woodpecker correspond
|
||||
3. Verifier que l'URI de redirection est correcte
|
||||
|
||||
### Problemes d'envoi d'emails
|
||||
|
||||
Verifier les logs :
|
||||
|
||||
```bash
|
||||
docker logs gitea 2>&1 | grep -i mail
|
||||
```
|
||||
|
||||
Tester la connexion SMTP :
|
||||
|
||||
```bash
|
||||
docker exec gitea curl -v telnet://mail.anuanua.fr:465
|
||||
```
|
||||
|
||||
209
docs/04-configuration-woodpecker.md
Normal file
209
docs/04-configuration-woodpecker.md
Normal file
@ -0,0 +1,209 @@
|
||||
# Configuration Woodpecker CI
|
||||
|
||||
## Fichiers de configuration
|
||||
|
||||
- `woodpecker/docker-compose.yml` : Configuration Docker Compose
|
||||
|
||||
## Configuration actuelle
|
||||
|
||||
### docker-compose.yml
|
||||
|
||||
```yaml
|
||||
services:
|
||||
woodpecker-server:
|
||||
image: woodpeckerci/woodpecker-server:latest
|
||||
container_name: woodpecker-server
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9001:8000"
|
||||
environment:
|
||||
WOODPECKER_GITEA: "true"
|
||||
WOODPECKER_GITEA_URL: "http://gitea:3000"
|
||||
WOODPECKER_GITEA_CLIENT: "77390faa-e609-4f00-846b-955aab74095e"
|
||||
WOODPECKER_GITEA_SECRET: "***"
|
||||
WOODPECKER_AGENT_SECRET: "***"
|
||||
WOODPECKER_ADMIN: "syoul"
|
||||
WOODPECKER_HOST: "https://ci.syoul.fr"
|
||||
volumes:
|
||||
- woodpecker-data:/var/lib/woodpecker
|
||||
networks:
|
||||
- gitea_net
|
||||
|
||||
woodpecker-agent:
|
||||
image: woodpeckerci/woodpecker-agent:latest
|
||||
container_name: woodpecker-agent
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- woodpecker-server
|
||||
environment:
|
||||
WOODPECKER_SERVER: "woodpecker-server:9000"
|
||||
WOODPECKER_AGENT_SECRET: "***"
|
||||
WOODPECKER_HEALTHCHECK_ADDR: ":3001"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
networks:
|
||||
- gitea_net
|
||||
|
||||
volumes:
|
||||
woodpecker-data:
|
||||
|
||||
networks:
|
||||
gitea_net:
|
||||
external: true
|
||||
name: gitgit_syoul_fr_gitea_net
|
||||
```
|
||||
|
||||
## Variables d'environnement
|
||||
|
||||
### Woodpecker Server
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `WOODPECKER_GITEA` | Active l'integration Gitea |
|
||||
| `WOODPECKER_GITEA_URL` | URL interne de Gitea (via Docker network) |
|
||||
| `WOODPECKER_GITEA_CLIENT` | Client ID de l'application OAuth2 |
|
||||
| `WOODPECKER_GITEA_SECRET` | Client Secret de l'application OAuth2 |
|
||||
| `WOODPECKER_AGENT_SECRET` | Secret partage avec les agents |
|
||||
| `WOODPECKER_ADMIN` | Utilisateur administrateur |
|
||||
| `WOODPECKER_HOST` | URL publique de Woodpecker |
|
||||
|
||||
### Woodpecker Agent
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `WOODPECKER_SERVER` | Adresse du serveur (via Docker network) |
|
||||
| `WOODPECKER_AGENT_SECRET` | Secret partage avec le serveur |
|
||||
| `WOODPECKER_HEALTHCHECK_ADDR` | Adresse du healthcheck |
|
||||
|
||||
## URLs importantes
|
||||
|
||||
- **WOODPECKER_GITEA_URL** : `http://gitea:3000`
|
||||
- URL interne via le reseau Docker
|
||||
- Permet a Woodpecker de communiquer avec Gitea pour l'API
|
||||
|
||||
- **WOODPECKER_HOST** : `https://ci.syoul.fr`
|
||||
- URL publique pour les redirections OAuth2
|
||||
- Utilisee pour les callbacks
|
||||
|
||||
## Flux OAuth2
|
||||
|
||||
```
|
||||
Navigateur -> ci.syoul.fr/login
|
||||
|
|
||||
v
|
||||
Woodpecker -> Redirect vers git.syoul.fr/login/oauth/authorize
|
||||
|
|
||||
v
|
||||
Utilisateur s'authentifie sur Gitea
|
||||
|
|
||||
v
|
||||
Gitea -> Redirect vers ci.syoul.fr/authorize?code=XXX
|
||||
|
|
||||
v
|
||||
Woodpecker -> POST http://gitea:3000/login/oauth/access_token
|
||||
| (echange du code contre un token)
|
||||
v
|
||||
Utilisateur connecte sur Woodpecker
|
||||
```
|
||||
|
||||
## Configuration des pipelines
|
||||
|
||||
### Fichier .woodpecker.yml
|
||||
|
||||
Creer un fichier `.woodpecker.yml` a la racine du depot :
|
||||
|
||||
```yaml
|
||||
steps:
|
||||
build:
|
||||
image: alpine:latest
|
||||
commands:
|
||||
- echo "Hello from Woodpecker!"
|
||||
|
||||
test:
|
||||
image: alpine:latest
|
||||
commands:
|
||||
- echo "Running tests..."
|
||||
```
|
||||
|
||||
### Activer un depot
|
||||
|
||||
1. Se connecter a Woodpecker (ci.syoul.fr)
|
||||
2. Cliquer sur "Add repository"
|
||||
3. Selectionner le depot Gitea
|
||||
4. Activer le depot
|
||||
|
||||
Woodpecker configure automatiquement le webhook dans Gitea.
|
||||
|
||||
## Maintenance
|
||||
|
||||
### Verifier les agents connectes
|
||||
|
||||
```bash
|
||||
docker logs woodpecker-server | grep -i agent
|
||||
```
|
||||
|
||||
### Redemarrer les services
|
||||
|
||||
```bash
|
||||
cd /opt/woodpecker
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
### Mettre a jour Woodpecker
|
||||
|
||||
```bash
|
||||
cd /opt/woodpecker
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Depannage
|
||||
|
||||
### Erreur OAuth2
|
||||
|
||||
**Symptome** : "Erreur lors de l'authentification aupres du fournisseur OAuth"
|
||||
|
||||
**Causes possibles** :
|
||||
|
||||
1. **Woodpecker ne peut pas joindre Gitea** :
|
||||
```bash
|
||||
docker exec woodpecker-server wget -qO- http://gitea:3000/api/v1/version
|
||||
```
|
||||
|
||||
2. **Client ID ou Secret incorrect** :
|
||||
- Verifier dans Gitea > Parametres > Applications
|
||||
- Comparer avec `docker inspect woodpecker-server | grep CLIENT`
|
||||
|
||||
3. **URL de redirection incorrecte** :
|
||||
- Dans Gitea, verifier que l'URI de redirection est `https://ci.syoul.fr/authorize`
|
||||
|
||||
### Agent non connecte
|
||||
|
||||
**Symptome** : Les builds restent en attente
|
||||
|
||||
**Verification** :
|
||||
|
||||
```bash
|
||||
docker logs woodpecker-agent | grep -i error
|
||||
```
|
||||
|
||||
**Causes possibles** :
|
||||
|
||||
1. **WOODPECKER_AGENT_SECRET different** :
|
||||
- Verifier que le secret est identique sur le serveur et l'agent
|
||||
|
||||
2. **Reseau Docker** :
|
||||
```bash
|
||||
docker exec woodpecker-agent ping -c 2 woodpecker-server
|
||||
```
|
||||
|
||||
### Builds echouent avec erreur Docker
|
||||
|
||||
**Symptome** : "Cannot connect to Docker daemon"
|
||||
|
||||
**Solution** : Verifier le montage du socket Docker :
|
||||
|
||||
```bash
|
||||
docker exec woodpecker-agent ls -la /var/run/docker.sock
|
||||
```
|
||||
|
||||
213
docs/05-configuration-postgresql.md
Normal file
213
docs/05-configuration-postgresql.md
Normal file
@ -0,0 +1,213 @@
|
||||
# Configuration PostgreSQL
|
||||
|
||||
## Fichiers de configuration
|
||||
|
||||
- `postgres/docker-compose.yml` : Configuration Docker Compose
|
||||
- `postgres/docker-compose.env.yml` : Version avec fichier .env (optionnelle)
|
||||
|
||||
## Configuration actuelle
|
||||
|
||||
### docker-compose.yml
|
||||
|
||||
```yaml
|
||||
services:
|
||||
gitea_db:
|
||||
container_name: gitea_db
|
||||
image: postgres:14
|
||||
restart: always
|
||||
environment:
|
||||
POSTGRES_USER: gitea
|
||||
POSTGRES_PASSWORD: Gitea_Db-2025_Secure
|
||||
POSTGRES_DB: gitea
|
||||
volumes:
|
||||
- gitgit_syoul_fr_db_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- gitgit_syoul_fr_gitea_net
|
||||
|
||||
volumes:
|
||||
gitgit_syoul_fr_db_data:
|
||||
external: true
|
||||
|
||||
networks:
|
||||
gitgit_syoul_fr_gitea_net:
|
||||
external: true
|
||||
```
|
||||
|
||||
## Variables d'environnement
|
||||
|
||||
| Variable | Valeur | Description |
|
||||
|----------|--------|-------------|
|
||||
| `POSTGRES_USER` | gitea | Utilisateur de la base de donnees |
|
||||
| `POSTGRES_PASSWORD` | *** | Mot de passe |
|
||||
| `POSTGRES_DB` | gitea | Nom de la base de donnees |
|
||||
|
||||
## Volume persistant
|
||||
|
||||
Le volume `gitgit_syoul_fr_db_data` contient toutes les donnees PostgreSQL :
|
||||
|
||||
- Tables de la base de donnees
|
||||
- Configuration PostgreSQL
|
||||
- WAL (Write-Ahead Logging)
|
||||
|
||||
**IMPORTANT** : Ce volume est critique et doit etre sauvegarde regulierement.
|
||||
|
||||
## Sauvegardes
|
||||
|
||||
### Sauvegarde logique (pg_dump)
|
||||
|
||||
```bash
|
||||
# Sauvegarde complete
|
||||
docker exec gitea_db pg_dump -U gitea gitea > backup_$(date +%Y%m%d_%H%M%S).sql
|
||||
|
||||
# Sauvegarde compressee
|
||||
docker exec gitea_db pg_dump -U gitea gitea | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz
|
||||
```
|
||||
|
||||
### Restauration
|
||||
|
||||
```bash
|
||||
# Restaurer depuis une sauvegarde
|
||||
cat backup.sql | docker exec -i gitea_db psql -U gitea gitea
|
||||
|
||||
# Ou pour un fichier compresse
|
||||
gunzip -c backup.sql.gz | docker exec -i gitea_db psql -U gitea gitea
|
||||
```
|
||||
|
||||
### Sauvegarde du volume Docker
|
||||
|
||||
```bash
|
||||
# Arreter le conteneur avant la sauvegarde
|
||||
docker stop gitea_db
|
||||
|
||||
# Sauvegarder le volume
|
||||
docker run --rm \
|
||||
-v gitgit_syoul_fr_db_data:/data \
|
||||
-v $(pwd):/backup \
|
||||
alpine tar cvzf /backup/postgres_volume_$(date +%Y%m%d).tar.gz /data
|
||||
|
||||
# Redemarrer le conteneur
|
||||
docker start gitea_db
|
||||
```
|
||||
|
||||
## Maintenance
|
||||
|
||||
### Verifier l'etat
|
||||
|
||||
```bash
|
||||
docker exec gitea_db pg_isready -U gitea
|
||||
```
|
||||
|
||||
### Se connecter a la base
|
||||
|
||||
```bash
|
||||
docker exec -it gitea_db psql -U gitea gitea
|
||||
```
|
||||
|
||||
### Lister les tables
|
||||
|
||||
```sql
|
||||
\dt
|
||||
```
|
||||
|
||||
### Taille de la base
|
||||
|
||||
```bash
|
||||
docker exec gitea_db psql -U gitea gitea -c "SELECT pg_size_pretty(pg_database_size('gitea'));"
|
||||
```
|
||||
|
||||
### Vacuum (maintenance)
|
||||
|
||||
```bash
|
||||
docker exec gitea_db vacuumdb -U gitea gitea
|
||||
```
|
||||
|
||||
## Mise a jour
|
||||
|
||||
### Mise a jour mineure (14.x -> 14.y)
|
||||
|
||||
```bash
|
||||
cd /opt/postgres
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### Mise a jour majeure (14 -> 15)
|
||||
|
||||
**ATTENTION** : Necessite une migration manuelle des donnees.
|
||||
|
||||
1. Sauvegarder la base :
|
||||
```bash
|
||||
docker exec gitea_db pg_dump -U gitea gitea > backup_before_upgrade.sql
|
||||
```
|
||||
|
||||
2. Arreter le conteneur :
|
||||
```bash
|
||||
docker compose down
|
||||
```
|
||||
|
||||
3. Modifier la version dans docker-compose.yml :
|
||||
```yaml
|
||||
image: postgres:15
|
||||
```
|
||||
|
||||
4. Supprimer l'ancien volume (ATTENTION !) :
|
||||
```bash
|
||||
# Uniquement si vous avez une sauvegarde !
|
||||
docker volume rm gitgit_syoul_fr_db_data
|
||||
docker volume create gitgit_syoul_fr_db_data
|
||||
```
|
||||
|
||||
5. Demarrer le nouveau conteneur :
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
6. Restaurer la base :
|
||||
```bash
|
||||
cat backup_before_upgrade.sql | docker exec -i gitea_db psql -U gitea gitea
|
||||
```
|
||||
|
||||
## Depannage
|
||||
|
||||
### Connexion refusee
|
||||
|
||||
```bash
|
||||
# Verifier que le conteneur tourne
|
||||
docker ps | grep gitea_db
|
||||
|
||||
# Verifier les logs
|
||||
docker logs gitea_db
|
||||
|
||||
# Verifier le reseau
|
||||
docker network inspect gitgit_syoul_fr_gitea_net | grep gitea_db
|
||||
```
|
||||
|
||||
### Base corrompue
|
||||
|
||||
En cas de corruption, restaurer depuis une sauvegarde :
|
||||
|
||||
```bash
|
||||
# Arreter Gitea
|
||||
docker stop gitea
|
||||
|
||||
# Supprimer et recreer la base
|
||||
docker exec gitea_db psql -U gitea postgres -c "DROP DATABASE gitea;"
|
||||
docker exec gitea_db psql -U gitea postgres -c "CREATE DATABASE gitea;"
|
||||
|
||||
# Restaurer
|
||||
cat backup.sql | docker exec -i gitea_db psql -U gitea gitea
|
||||
|
||||
# Redemarrer Gitea
|
||||
docker start gitea
|
||||
```
|
||||
|
||||
### Performances
|
||||
|
||||
Optimiser les performances en ajoutant des variables d'environnement :
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
POSTGRES_INITDB_ARGS: "--encoding=UTF8"
|
||||
# Ou monter un fichier de configuration personnalise
|
||||
```
|
||||
|
||||
423
docs/06-configuration-consul.md
Normal file
423
docs/06-configuration-consul.md
Normal file
@ -0,0 +1,423 @@
|
||||
# Configuration Consul
|
||||
|
||||
## Presentation
|
||||
|
||||
Consul est un outil de service discovery et de configuration distribuee. Dans cette infrastructure, il permet :
|
||||
|
||||
- Decouverte automatique des services Docker
|
||||
- Resolution DNS des services (ex: `gitea.service.consul`)
|
||||
- Health checks centralises
|
||||
- Interface web de gestion
|
||||
- Controle d'acces via ACL (mode production)
|
||||
|
||||
## Fichiers de configuration
|
||||
|
||||
- `consul/docker-compose.yml` : Configuration Docker Compose
|
||||
- `consul/env.template` : Template pour les variables d'environnement
|
||||
|
||||
## Configuration production (avec ACL)
|
||||
|
||||
### docker-compose.yml
|
||||
|
||||
```yaml
|
||||
services:
|
||||
consul:
|
||||
container_name: consul
|
||||
image: hashicorp/consul:latest
|
||||
restart: unless-stopped
|
||||
command: agent -server -ui -node=server-1 -bootstrap-expect=1 -client=0.0.0.0
|
||||
|
||||
ports:
|
||||
- "8500:8500" # UI web et API HTTP
|
||||
- "8600:8600/udp" # DNS
|
||||
- "8600:8600/tcp" # DNS
|
||||
|
||||
environment:
|
||||
# Configuration ACL pour la production
|
||||
CONSUL_LOCAL_CONFIG: >-
|
||||
{
|
||||
"acl": {
|
||||
"enabled": true,
|
||||
"default_policy": "deny",
|
||||
"enable_token_persistence": true
|
||||
}
|
||||
}
|
||||
|
||||
volumes:
|
||||
- consul-data:/consul/data
|
||||
|
||||
networks:
|
||||
gitgit_syoul_fr_gitea_net:
|
||||
aliases:
|
||||
- consul
|
||||
|
||||
healthcheck:
|
||||
test: ["CMD", "consul", "members"]
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
|
||||
volumes:
|
||||
consul-data:
|
||||
|
||||
networks:
|
||||
gitgit_syoul_fr_gitea_net:
|
||||
external: true
|
||||
```
|
||||
|
||||
## Configuration ACL
|
||||
|
||||
### Politique de securite
|
||||
|
||||
| Parametre | Valeur | Description |
|
||||
|-----------|--------|-------------|
|
||||
| `acl.enabled` | `true` | Active le systeme ACL |
|
||||
| `acl.default_policy` | `deny` | Tout est interdit par defaut |
|
||||
| `acl.enable_token_persistence` | `true` | Tokens sauvegardes sur disque |
|
||||
|
||||
### Types de tokens
|
||||
|
||||
| Token | Usage | Permissions |
|
||||
|-------|-------|-------------|
|
||||
| Bootstrap (admin) | Administration Consul | Toutes |
|
||||
| Registrator | Enregistrer des services | service:write, node:read, agent:read |
|
||||
| Lecture seule | UI, monitoring | service:read, node:read |
|
||||
|
||||
### Initialisation des ACL
|
||||
|
||||
Apres le premier demarrage de Consul :
|
||||
|
||||
```bash
|
||||
# 1. Bootstrap des ACL (genere le token admin)
|
||||
docker exec consul consul acl bootstrap
|
||||
```
|
||||
|
||||
Resultat :
|
||||
```
|
||||
AccessorID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
||||
SecretID: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy <-- TOKEN ADMIN
|
||||
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
|
||||
```
|
||||
|
||||
**IMPORTANT** : Notez le `SecretID`, c'est votre token administrateur.
|
||||
|
||||
### Creer un token pour Registrator
|
||||
|
||||
```bash
|
||||
# 2. Creer la policy pour Registrator
|
||||
docker exec consul consul acl policy create \
|
||||
-name "registrator" \
|
||||
-description "Policy pour Registrator" \
|
||||
-rules '
|
||||
service_prefix "" {
|
||||
policy = "write"
|
||||
}
|
||||
node_prefix "" {
|
||||
policy = "read"
|
||||
}
|
||||
agent_prefix "" {
|
||||
policy = "read"
|
||||
}
|
||||
' \
|
||||
-token "VOTRE_TOKEN_ADMIN"
|
||||
|
||||
# 3. Creer le token avec cette policy
|
||||
docker exec consul consul acl token create \
|
||||
-description "Token Registrator" \
|
||||
-policy-name "registrator" \
|
||||
-token "VOTRE_TOKEN_ADMIN"
|
||||
```
|
||||
|
||||
Notez le `SecretID` du token Registrator pour configurer Registrator.
|
||||
|
||||
### Creer un token de lecture (optionnel)
|
||||
|
||||
Pour l'acces a l'UI en lecture seule :
|
||||
|
||||
```bash
|
||||
# Creer la policy de lecture
|
||||
docker exec consul consul acl policy create \
|
||||
-name "read-only" \
|
||||
-description "Policy lecture seule" \
|
||||
-rules '
|
||||
service_prefix "" {
|
||||
policy = "read"
|
||||
}
|
||||
node_prefix "" {
|
||||
policy = "read"
|
||||
}
|
||||
key_prefix "" {
|
||||
policy = "read"
|
||||
}
|
||||
' \
|
||||
-token "VOTRE_TOKEN_ADMIN"
|
||||
|
||||
# Creer le token
|
||||
docker exec consul consul acl token create \
|
||||
-description "Token lecture seule" \
|
||||
-policy-name "read-only" \
|
||||
-token "VOTRE_TOKEN_ADMIN"
|
||||
```
|
||||
|
||||
## Options de la commande
|
||||
|
||||
| Option | Description |
|
||||
|--------|-------------|
|
||||
| `-server` | Mode serveur (vs client) |
|
||||
| `-ui` | Active l'interface web |
|
||||
| `-node=server-1` | Nom du noeud |
|
||||
| `-bootstrap-expect=1` | Nombre de serveurs attendus (1 pour mode standalone) |
|
||||
| `-client=0.0.0.0` | Ecoute sur toutes les interfaces |
|
||||
|
||||
## Ports
|
||||
|
||||
| Port | Protocole | Description |
|
||||
|------|-----------|-------------|
|
||||
| 8500 | TCP | API HTTP et UI web |
|
||||
| 8600 | TCP/UDP | DNS |
|
||||
| 8300 | TCP | Communication serveur-a-serveur |
|
||||
| 8301 | TCP/UDP | Gossip LAN |
|
||||
| 8302 | TCP/UDP | Gossip WAN |
|
||||
|
||||
## Interface web
|
||||
|
||||
Accessible sur : `http://[serveur]:8500`
|
||||
|
||||
**Avec ACL** : Utilisez le token admin ou un token de lecture pour acceder a l'UI.
|
||||
|
||||
### Sections principales
|
||||
|
||||
- **Services** : Liste des services enregistres
|
||||
- **Nodes** : Liste des noeuds Consul
|
||||
- **Key/Value** : Stockage cle-valeur
|
||||
- **ACL** : Gestion des tokens et policies
|
||||
|
||||
## API HTTP avec ACL
|
||||
|
||||
### Authentification
|
||||
|
||||
Ajouter le header `X-Consul-Token` ou le parametre `?token=` :
|
||||
|
||||
```bash
|
||||
# Via header
|
||||
curl -H "X-Consul-Token: VOTRE_TOKEN" http://localhost:8500/v1/catalog/services
|
||||
|
||||
# Via parametre
|
||||
curl "http://localhost:8500/v1/catalog/services?token=VOTRE_TOKEN"
|
||||
```
|
||||
|
||||
### Lister les services
|
||||
|
||||
```bash
|
||||
curl -H "X-Consul-Token: $CONSUL_TOKEN" http://localhost:8500/v1/catalog/services
|
||||
```
|
||||
|
||||
### Details d'un service
|
||||
|
||||
```bash
|
||||
curl -H "X-Consul-Token: $CONSUL_TOKEN" http://localhost:8500/v1/catalog/service/gitea
|
||||
```
|
||||
|
||||
### Etat du cluster
|
||||
|
||||
```bash
|
||||
curl http://localhost:8500/v1/status/leader # Ne necessite pas de token
|
||||
curl http://localhost:8500/v1/status/peers
|
||||
```
|
||||
|
||||
### Health checks
|
||||
|
||||
```bash
|
||||
curl -H "X-Consul-Token: $CONSUL_TOKEN" http://localhost:8500/v1/health/service/gitea
|
||||
```
|
||||
|
||||
## DNS Consul
|
||||
|
||||
Le DNS Consul ne necessite pas de token par defaut.
|
||||
|
||||
### Resolution d'un service
|
||||
|
||||
```bash
|
||||
# Depuis le serveur
|
||||
dig @localhost -p 8600 gitea.service.consul
|
||||
|
||||
# Depuis un conteneur Docker
|
||||
docker exec consul dig @127.0.0.1 -p 8600 gitea.service.consul
|
||||
```
|
||||
|
||||
### Format des noms DNS
|
||||
|
||||
- `<service>.service.consul` : Service global
|
||||
- `<service>.service.<datacenter>.consul` : Service dans un datacenter specifique
|
||||
- `<node>.node.consul` : Noeud specifique
|
||||
|
||||
## Utilisation avec les autres services
|
||||
|
||||
### Configurer un service pour utiliser Consul DNS
|
||||
|
||||
Dans docker-compose.yml :
|
||||
|
||||
```yaml
|
||||
services:
|
||||
mon-service:
|
||||
dns:
|
||||
- 172.18.0.X # IP du conteneur Consul
|
||||
dns_search:
|
||||
- service.consul
|
||||
```
|
||||
|
||||
### Exemple avec Woodpecker
|
||||
|
||||
```yaml
|
||||
services:
|
||||
woodpecker-server:
|
||||
environment:
|
||||
WOODPECKER_GITEA_URL: "http://gitea.service.consul:3000"
|
||||
dns:
|
||||
- 172.18.0.X
|
||||
```
|
||||
|
||||
## Maintenance
|
||||
|
||||
### Verifier l'etat
|
||||
|
||||
```bash
|
||||
docker exec consul consul members
|
||||
```
|
||||
|
||||
### Lister les tokens
|
||||
|
||||
```bash
|
||||
docker exec consul consul acl token list -token "VOTRE_TOKEN_ADMIN"
|
||||
```
|
||||
|
||||
### Revoquer un token
|
||||
|
||||
```bash
|
||||
docker exec consul consul acl token delete -id "TOKEN_ACCESSOR_ID" -token "VOTRE_TOKEN_ADMIN"
|
||||
```
|
||||
|
||||
### Voir les logs
|
||||
|
||||
```bash
|
||||
docker logs consul -f
|
||||
```
|
||||
|
||||
### Forcer la deregistration d'un service
|
||||
|
||||
```bash
|
||||
curl -X PUT -H "X-Consul-Token: $CONSUL_TOKEN" \
|
||||
http://localhost:8500/v1/agent/service/deregister/[service-id]
|
||||
```
|
||||
|
||||
### Sauvegarder les donnees
|
||||
|
||||
```bash
|
||||
docker exec consul consul snapshot save /consul/data/backup.snap -token "VOTRE_TOKEN_ADMIN"
|
||||
docker cp consul:/consul/data/backup.snap ./consul_backup_$(date +%Y%m%d).snap
|
||||
```
|
||||
|
||||
### Restaurer une sauvegarde
|
||||
|
||||
```bash
|
||||
docker cp ./backup.snap consul:/consul/data/backup.snap
|
||||
docker exec consul consul snapshot restore /consul/data/backup.snap -token "VOTRE_TOKEN_ADMIN"
|
||||
```
|
||||
|
||||
## Depannage
|
||||
|
||||
### Erreur "Permission denied" ou "ACL not found"
|
||||
|
||||
Le token utilise n'a pas les permissions necessaires.
|
||||
|
||||
```bash
|
||||
# Verifier les permissions du token
|
||||
docker exec consul consul acl token read -id "TOKEN_ACCESSOR_ID" -token "VOTRE_TOKEN_ADMIN"
|
||||
```
|
||||
|
||||
### Consul ne demarre pas
|
||||
|
||||
```bash
|
||||
# Verifier les logs
|
||||
docker logs consul
|
||||
|
||||
# Verifier le volume
|
||||
docker volume inspect consul-data
|
||||
```
|
||||
|
||||
### Services non visibles
|
||||
|
||||
```bash
|
||||
# Verifier que Registrator fonctionne
|
||||
docker logs registrator
|
||||
|
||||
# Verifier que Registrator a un token valide
|
||||
docker exec registrator env | grep CONSUL
|
||||
|
||||
# Verifier les health checks
|
||||
curl -H "X-Consul-Token: $CONSUL_TOKEN" http://localhost:8500/v1/health/checks/[service-name]
|
||||
```
|
||||
|
||||
### Erreur DNS
|
||||
|
||||
```bash
|
||||
# Tester la resolution
|
||||
dig @localhost -p 8600 consul.service.consul
|
||||
|
||||
# Verifier que le port 8600 est accessible
|
||||
netstat -tuln | grep 8600
|
||||
```
|
||||
|
||||
## Securite - Recommandations production
|
||||
|
||||
### 1. ACL activees (fait)
|
||||
|
||||
La configuration actuelle active les ACL avec `default_policy: deny`.
|
||||
|
||||
### 2. Restreindre l'acces reseau
|
||||
|
||||
Ne pas exposer le port 8500 sur Internet. Utiliser un VPN ou un reverse proxy authentifie.
|
||||
|
||||
### 3. Configurer TLS (optionnel)
|
||||
|
||||
Pour chiffrer les communications :
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
CONSUL_LOCAL_CONFIG: >-
|
||||
{
|
||||
"acl": {
|
||||
"enabled": true,
|
||||
"default_policy": "deny",
|
||||
"enable_token_persistence": true
|
||||
},
|
||||
"verify_incoming": true,
|
||||
"verify_outgoing": true,
|
||||
"verify_server_hostname": true,
|
||||
"ca_file": "/consul/config/ca.pem",
|
||||
"cert_file": "/consul/config/server.pem",
|
||||
"key_file": "/consul/config/server-key.pem"
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Rotation des tokens
|
||||
|
||||
Changer regulierement les tokens et revoquer les anciens.
|
||||
|
||||
## Haute disponibilite
|
||||
|
||||
Pour un cluster de production, deployer au moins 3 serveurs Consul :
|
||||
|
||||
```yaml
|
||||
services:
|
||||
consul-1:
|
||||
command: agent -server -node=server-1 -bootstrap-expect=3 ...
|
||||
consul-2:
|
||||
command: agent -server -node=server-2 -join=consul-1 ...
|
||||
consul-3:
|
||||
command: agent -server -node=server-3 -join=consul-1 ...
|
||||
```
|
||||
370
docs/07-configuration-registrator.md
Normal file
370
docs/07-configuration-registrator.md
Normal file
@ -0,0 +1,370 @@
|
||||
# Configuration Registrator
|
||||
|
||||
## Presentation
|
||||
|
||||
Registrator surveille automatiquement les conteneurs Docker et les enregistre dans Consul. Il detecte :
|
||||
|
||||
- Les nouveaux conteneurs demarres
|
||||
- Les conteneurs arretes (deregistration automatique)
|
||||
- Les ports exposes
|
||||
- Les metadonnees (labels)
|
||||
|
||||
## Fichiers de configuration
|
||||
|
||||
- `registrator/docker-compose.yml` : Configuration Docker Compose
|
||||
- `registrator/env.template` : Template pour le token Consul
|
||||
|
||||
## Configuration production (avec ACL)
|
||||
|
||||
### docker-compose.yml
|
||||
|
||||
```yaml
|
||||
services:
|
||||
registrator:
|
||||
container_name: registrator
|
||||
image: gliderlabs/registrator:latest
|
||||
restart: unless-stopped
|
||||
|
||||
env_file:
|
||||
- .env
|
||||
|
||||
# -internal : utilise les IPs internes Docker
|
||||
# Le token est passe via la variable d'environnement CONSUL_HTTP_TOKEN
|
||||
command: -internal consul://consul:8500
|
||||
|
||||
volumes:
|
||||
- /var/run/docker.sock:/tmp/docker.sock:ro
|
||||
|
||||
networks:
|
||||
- gitgit_syoul_fr_gitea_net
|
||||
|
||||
networks:
|
||||
gitgit_syoul_fr_gitea_net:
|
||||
external: true
|
||||
```
|
||||
|
||||
### Fichier .env
|
||||
|
||||
Creer le fichier `.env` a partir du template `env.template` :
|
||||
|
||||
```bash
|
||||
cp env.template .env
|
||||
```
|
||||
|
||||
Contenu du fichier `.env` :
|
||||
|
||||
```
|
||||
CONSUL_HTTP_TOKEN=votre-token-registrator-ici
|
||||
```
|
||||
|
||||
**IMPORTANT** : Ne pas versionner le fichier `.env` dans git !
|
||||
|
||||
## Configuration du token Registrator
|
||||
|
||||
### Permissions requises
|
||||
|
||||
Le token Registrator doit avoir les permissions suivantes :
|
||||
|
||||
| Ressource | Permission | Description |
|
||||
|-----------|------------|-------------|
|
||||
| `service_prefix ""` | write | Enregistrer/desenregistrer des services |
|
||||
| `node_prefix ""` | read | Lire les informations des noeuds |
|
||||
| `agent_prefix ""` | read | Lire les informations des agents |
|
||||
|
||||
### Creer le token
|
||||
|
||||
Voir [Configuration Consul](06-configuration-consul.md#creer-un-token-pour-registrator) pour les instructions detaillees.
|
||||
|
||||
Resume rapide :
|
||||
|
||||
```bash
|
||||
# 1. Creer la policy
|
||||
docker exec consul consul acl policy create \
|
||||
-name "registrator" \
|
||||
-description "Policy pour Registrator" \
|
||||
-rules '
|
||||
service_prefix "" {
|
||||
policy = "write"
|
||||
}
|
||||
node_prefix "" {
|
||||
policy = "read"
|
||||
}
|
||||
agent_prefix "" {
|
||||
policy = "read"
|
||||
}
|
||||
' \
|
||||
-token "VOTRE_TOKEN_ADMIN"
|
||||
|
||||
# 2. Creer le token
|
||||
docker exec consul consul acl token create \
|
||||
-description "Token Registrator" \
|
||||
-policy-name "registrator" \
|
||||
-token "VOTRE_TOKEN_ADMIN"
|
||||
```
|
||||
|
||||
## Options de la commande
|
||||
|
||||
| Option | Description |
|
||||
|--------|-------------|
|
||||
| `-internal` | Utilise les IPs internes Docker (vs IPs externes) |
|
||||
| `consul://consul:8500` | Adresse du serveur Consul |
|
||||
|
||||
### Autres options disponibles
|
||||
|
||||
| Option | Description |
|
||||
|--------|-------------|
|
||||
| `-ip` | IP a utiliser pour l'enregistrement |
|
||||
| `-tags` | Tags par defaut a ajouter |
|
||||
| `-resync` | Intervalle de resynchronisation (ex: `60`) |
|
||||
| `-deregister` | Mode de deregistration : `always`, `on-success` |
|
||||
| `-cleanup` | Nettoyer les services orphelins au demarrage |
|
||||
|
||||
## Variable d'environnement pour l'authentification
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `CONSUL_HTTP_TOKEN` | Token ACL pour s'authentifier aupres de Consul |
|
||||
| `CONSUL_HTTP_ADDR` | Adresse de Consul (optionnel, defaut: localhost:8500) |
|
||||
|
||||
## Montage du socket Docker
|
||||
|
||||
Le montage `/var/run/docker.sock:/tmp/docker.sock:ro` permet a Registrator de :
|
||||
|
||||
- Surveiller les evenements Docker
|
||||
- Lire les metadonnees des conteneurs
|
||||
- Mode lecture seule (`:ro`) pour la securite
|
||||
|
||||
## Enregistrement automatique des services
|
||||
|
||||
### Sans configuration
|
||||
|
||||
Par defaut, Registrator enregistre chaque port expose avec :
|
||||
|
||||
- **Nom du service** : nom du conteneur + port
|
||||
- **ID du service** : conteneur:port
|
||||
- **Port** : port expose
|
||||
|
||||
### Avec labels Docker
|
||||
|
||||
Personnaliser l'enregistrement avec des labels :
|
||||
|
||||
```yaml
|
||||
services:
|
||||
gitea:
|
||||
labels:
|
||||
- "SERVICE_NAME=gitea"
|
||||
- "SERVICE_TAGS=web,git,vcs"
|
||||
- "SERVICE_3000_CHECK_HTTP=/api/v1/version"
|
||||
- "SERVICE_3000_CHECK_INTERVAL=10s"
|
||||
```
|
||||
|
||||
### Labels disponibles
|
||||
|
||||
| Label | Description |
|
||||
|-------|-------------|
|
||||
| `SERVICE_NAME` | Nom du service (override) |
|
||||
| `SERVICE_TAGS` | Tags separes par des virgules |
|
||||
| `SERVICE_ID` | ID personnalise |
|
||||
| `SERVICE_IGNORE` | Ignorer ce conteneur (`true`) |
|
||||
| `SERVICE_<port>_NAME` | Nom pour un port specifique |
|
||||
| `SERVICE_<port>_TAGS` | Tags pour un port specifique |
|
||||
| `SERVICE_<port>_CHECK_HTTP` | Health check HTTP |
|
||||
| `SERVICE_<port>_CHECK_TCP` | Health check TCP |
|
||||
| `SERVICE_<port>_CHECK_SCRIPT` | Health check script |
|
||||
| `SERVICE_<port>_CHECK_INTERVAL` | Intervalle du health check |
|
||||
| `SERVICE_<port>_CHECK_TIMEOUT` | Timeout du health check |
|
||||
|
||||
## Exemples de configuration avec labels
|
||||
|
||||
### Gitea avec health check
|
||||
|
||||
```yaml
|
||||
services:
|
||||
gitea:
|
||||
container_name: gitea
|
||||
image: gitea/gitea:latest
|
||||
labels:
|
||||
- "SERVICE_NAME=gitea"
|
||||
- "SERVICE_TAGS=web,git"
|
||||
- "SERVICE_3000_CHECK_HTTP=/api/v1/version"
|
||||
- "SERVICE_3000_CHECK_INTERVAL=15s"
|
||||
- "SERVICE_3000_CHECK_TIMEOUT=5s"
|
||||
```
|
||||
|
||||
### PostgreSQL avec health check TCP
|
||||
|
||||
```yaml
|
||||
services:
|
||||
gitea_db:
|
||||
container_name: gitea_db
|
||||
image: postgres:14
|
||||
labels:
|
||||
- "SERVICE_NAME=gitea-db"
|
||||
- "SERVICE_TAGS=postgres,database"
|
||||
- "SERVICE_5432_CHECK_TCP=true"
|
||||
- "SERVICE_5432_CHECK_INTERVAL=10s"
|
||||
```
|
||||
|
||||
### Woodpecker Server
|
||||
|
||||
```yaml
|
||||
services:
|
||||
woodpecker-server:
|
||||
container_name: woodpecker-server
|
||||
image: woodpeckerci/woodpecker-server:latest
|
||||
labels:
|
||||
- "SERVICE_NAME=woodpecker"
|
||||
- "SERVICE_TAGS=ci,web"
|
||||
- "SERVICE_8000_CHECK_HTTP=/healthz"
|
||||
- "SERVICE_8000_CHECK_INTERVAL=10s"
|
||||
```
|
||||
|
||||
### Ignorer un conteneur
|
||||
|
||||
```yaml
|
||||
services:
|
||||
internal-service:
|
||||
labels:
|
||||
- "SERVICE_IGNORE=true"
|
||||
```
|
||||
|
||||
## Verification
|
||||
|
||||
### Services enregistres
|
||||
|
||||
```bash
|
||||
# Via API Consul (avec token)
|
||||
curl -H "X-Consul-Token: $CONSUL_TOKEN" \
|
||||
http://localhost:8500/v1/catalog/services | python3 -m json.tool
|
||||
|
||||
# Via UI Consul
|
||||
# http://[serveur]:8500/ui/dc1/services
|
||||
```
|
||||
|
||||
### Details d'un service
|
||||
|
||||
```bash
|
||||
curl -H "X-Consul-Token: $CONSUL_TOKEN" \
|
||||
http://localhost:8500/v1/catalog/service/gitea | python3 -m json.tool
|
||||
```
|
||||
|
||||
### Logs Registrator
|
||||
|
||||
```bash
|
||||
docker logs registrator -f
|
||||
```
|
||||
|
||||
## Maintenance
|
||||
|
||||
### Redemarrer Registrator
|
||||
|
||||
```bash
|
||||
cd /opt/registrator
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
**Note** : Au redemarrage, Registrator re-scanne tous les conteneurs et les re-enregistre dans Consul.
|
||||
|
||||
### Forcer une resynchronisation
|
||||
|
||||
```bash
|
||||
# Option 1 : Redemarrer Registrator
|
||||
docker restart registrator
|
||||
|
||||
# Option 2 : Utiliser l'option -resync
|
||||
# (modifier la commande pour ajouter -resync 60)
|
||||
```
|
||||
|
||||
### Nettoyer les services orphelins
|
||||
|
||||
Si des services restent enregistres apres l'arret d'un conteneur :
|
||||
|
||||
```bash
|
||||
# Via API Consul (avec token)
|
||||
curl -X PUT -H "X-Consul-Token: $CONSUL_TOKEN" \
|
||||
http://localhost:8500/v1/agent/service/deregister/[service-id]
|
||||
|
||||
# Ou relancer Registrator avec -cleanup
|
||||
docker run --rm \
|
||||
-v /var/run/docker.sock:/tmp/docker.sock \
|
||||
-e CONSUL_HTTP_TOKEN="$REGISTRATOR_TOKEN" \
|
||||
gliderlabs/registrator:latest \
|
||||
-cleanup consul://consul:8500
|
||||
```
|
||||
|
||||
## Depannage
|
||||
|
||||
### Erreur "Permission denied" ou "ACL disabled"
|
||||
|
||||
Le token Registrator est invalide ou n'a pas les bonnes permissions.
|
||||
|
||||
```bash
|
||||
# Verifier que le token est defini
|
||||
docker exec registrator env | grep CONSUL
|
||||
|
||||
# Verifier les logs
|
||||
docker logs registrator
|
||||
|
||||
# Tester le token manuellement
|
||||
curl -H "X-Consul-Token: $REGISTRATOR_TOKEN" \
|
||||
http://localhost:8500/v1/agent/services
|
||||
```
|
||||
|
||||
### Registrator ne demarre pas
|
||||
|
||||
```bash
|
||||
# Verifier que Consul est accessible
|
||||
docker exec registrator wget -qO- http://consul:8500/v1/status/leader
|
||||
|
||||
# Verifier le socket Docker
|
||||
docker exec registrator ls -la /tmp/docker.sock
|
||||
```
|
||||
|
||||
### Services non enregistres
|
||||
|
||||
1. Verifier les logs Registrator :
|
||||
```bash
|
||||
docker logs registrator
|
||||
```
|
||||
|
||||
2. Verifier que le conteneur expose des ports :
|
||||
```bash
|
||||
docker inspect [conteneur] | grep -A 10 "ExposedPorts"
|
||||
```
|
||||
|
||||
3. Verifier que le label `SERVICE_IGNORE` n'est pas defini
|
||||
|
||||
4. Verifier que le token a les permissions `service:write`
|
||||
|
||||
### Health checks echouent
|
||||
|
||||
1. Verifier que le endpoint existe :
|
||||
```bash
|
||||
docker exec [conteneur] curl -s http://localhost:[port]/[path]
|
||||
```
|
||||
|
||||
2. Verifier les logs du service
|
||||
|
||||
3. Ajuster l'intervalle ou le timeout du health check
|
||||
|
||||
## Securite
|
||||
|
||||
### Token minimal
|
||||
|
||||
Utiliser un token avec les permissions minimales necessaires (voir section "Configuration du token Registrator").
|
||||
|
||||
### Socket Docker en lecture seule
|
||||
|
||||
Le socket Docker est monte en lecture seule (`:ro`) pour limiter les risques.
|
||||
|
||||
### Ne pas versionner les secrets
|
||||
|
||||
Le fichier `.env` contenant le token ne doit pas etre versionne dans git.
|
||||
|
||||
## Alternatives
|
||||
|
||||
Si Registrator ne repond pas a vos besoins, considerez :
|
||||
|
||||
- **Consul-Template** : Generation de configuration basee sur Consul
|
||||
- **Traefik** : Reverse proxy avec service discovery Docker natif
|
||||
- **Fabio** : Load balancer base sur Consul
|
||||
399
docs/08-deploiement-consul-registrator.md
Normal file
399
docs/08-deploiement-consul-registrator.md
Normal file
@ -0,0 +1,399 @@
|
||||
# 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_net` existant
|
||||
|
||||
## 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
|
||||
|
||||
```bash
|
||||
# Depuis votre machine locale
|
||||
scp -r consul/ portainer2:/opt/
|
||||
scp -r registrator/ portainer2:/opt/
|
||||
```
|
||||
|
||||
## Etape 2 : Deployer Consul
|
||||
|
||||
### Demarrer Consul
|
||||
|
||||
```bash
|
||||
ssh portainer2
|
||||
cd /opt/consul
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### Verifier le demarrage
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### Verifier le demarrage
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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 :
|
||||
```json
|
||||
{
|
||||
"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` :
|
||||
|
||||
```yaml
|
||||
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` :
|
||||
|
||||
```yaml
|
||||
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` :
|
||||
|
||||
```yaml
|
||||
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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
docker exec consul dig @127.0.0.1 -p 8600 gitea.service.consul
|
||||
```
|
||||
|
||||
## Verification finale
|
||||
|
||||
### Tous les services sont enregistres
|
||||
|
||||
```bash
|
||||
curl -s -H "X-Consul-Token: $CONSUL_TOKEN" \
|
||||
http://localhost:8500/v1/catalog/services | python3 -m json.tool
|
||||
```
|
||||
|
||||
Resultat attendu (avec labels) :
|
||||
|
||||
```json
|
||||
{
|
||||
"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
|
||||
|
||||
```bash
|
||||
dig @localhost -p 8600 gitea.service.consul +short
|
||||
# Devrait retourner l'IP du conteneur gitea
|
||||
```
|
||||
|
||||
### Tokens fonctionnels
|
||||
|
||||
```bash
|
||||
# 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 :
|
||||
|
||||
```bash
|
||||
# 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) :
|
||||
|
||||
```bash
|
||||
docker volume rm consul_consul-data
|
||||
```
|
||||
|
||||
## Securite - Bonnes pratiques
|
||||
|
||||
### 1. Proteger les fichiers .env
|
||||
|
||||
```bash
|
||||
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 :
|
||||
|
||||
```yaml
|
||||
ports:
|
||||
- "127.0.0.1:8500:8500"
|
||||
```
|
||||
|
||||
### 3. Rotation des tokens
|
||||
|
||||
Periodiquement (ex: tous les 3 mois) :
|
||||
|
||||
1. Creer un nouveau token Registrator
|
||||
2. Mettre a jour `/opt/registrator/.env`
|
||||
3. Redemarrer Registrator
|
||||
4. Revoquer l'ancien token
|
||||
|
||||
### 4. Sauvegardes
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
1. **Surveillance** : Ajouter des alertes basees sur les health checks Consul
|
||||
2. **Configuration distribuee** : Utiliser le Key/Value store de Consul
|
||||
3. **Haute disponibilite** : Deployer plusieurs noeuds Consul
|
||||
4. **TLS** : Activer le chiffrement des communications
|
||||
142
docs/README.md
Normal file
142
docs/README.md
Normal file
@ -0,0 +1,142 @@
|
||||
# Documentation Infrastructure Git CI/CD
|
||||
|
||||
Cette documentation couvre l'installation, la configuration et la maintenance de l'infrastructure Git et CI/CD.
|
||||
|
||||
## Index
|
||||
|
||||
### Architecture et Installation
|
||||
|
||||
1. [Architecture](01-architecture.md) - Vue d'ensemble de l'infrastructure
|
||||
2. [Installation](02-installation.md) - Guide d'installation complet
|
||||
|
||||
### Configuration des services
|
||||
|
||||
3. [Gitea](03-configuration-gitea.md) - Serveur Git auto-heberge
|
||||
4. [Woodpecker](04-configuration-woodpecker.md) - CI/CD
|
||||
5. [PostgreSQL](05-configuration-postgresql.md) - Base de donnees
|
||||
|
||||
### Service Discovery (optionnel, mode production)
|
||||
|
||||
6. [Consul](06-configuration-consul.md) - Service discovery avec ACL
|
||||
7. [Registrator](07-configuration-registrator.md) - Auto-registration Docker avec token
|
||||
8. [Deploiement Consul](08-deploiement-consul-registrator.md) - Guide de deploiement securise
|
||||
|
||||
## Stack technique
|
||||
|
||||
| Composant | Version | Description |
|
||||
|-----------|---------|-------------|
|
||||
| Gitea | latest | Serveur Git |
|
||||
| Woodpecker | latest | CI/CD |
|
||||
| PostgreSQL | 14 | Base de donnees |
|
||||
| Consul | latest | Service discovery avec ACL |
|
||||
| Registrator | latest | Auto-registration avec token |
|
||||
|
||||
## Mode production
|
||||
|
||||
Cette infrastructure est configuree pour la production avec :
|
||||
|
||||
- **ACL Consul** : Controle d'acces active (`default_policy: deny`)
|
||||
- **Tokens separes** : Token admin et token Registrator
|
||||
- **Secrets non versionnes** : Fichiers `.env` a creer sur le serveur
|
||||
|
||||
### Fichiers de secrets (non versionnes)
|
||||
|
||||
| Fichier | Contenu |
|
||||
|---------|---------|
|
||||
| `/opt/consul/.env` | Token administrateur Consul |
|
||||
| `/opt/registrator/.env` | Token Registrator |
|
||||
|
||||
## URLs d'acces
|
||||
|
||||
| Service | URL |
|
||||
|---------|-----|
|
||||
| Gitea | http://git.syoul.fr |
|
||||
| Woodpecker | https://ci.syoul.fr |
|
||||
| Consul UI | http://[serveur]:8500 (local, token requis) |
|
||||
|
||||
## Structure des dossiers
|
||||
|
||||
```
|
||||
/opt/
|
||||
consul/
|
||||
docker-compose.yml
|
||||
env.template # Template pour .env
|
||||
.env # Token admin (a creer, non versionne)
|
||||
gitea/
|
||||
docker-compose.yml
|
||||
gitea.env
|
||||
postgres/
|
||||
docker-compose.yml
|
||||
registrator/
|
||||
docker-compose.yml
|
||||
env.template # Template pour .env
|
||||
.env # Token Registrator (a creer, non versionne)
|
||||
woodpecker/
|
||||
docker-compose.yml
|
||||
```
|
||||
|
||||
## Reseau Docker
|
||||
|
||||
Tous les services utilisent le reseau : `gitgit_syoul_fr_gitea_net`
|
||||
|
||||
## Commandes rapides
|
||||
|
||||
### Etat des services
|
||||
|
||||
```bash
|
||||
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||
```
|
||||
|
||||
### Logs d'un service
|
||||
|
||||
```bash
|
||||
docker logs -f [nom-conteneur]
|
||||
```
|
||||
|
||||
### Redemarrer un service
|
||||
|
||||
```bash
|
||||
cd /opt/[service]
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
### Sauvegarder la base de donnees
|
||||
|
||||
```bash
|
||||
docker exec gitea_db pg_dump -U gitea gitea > backup_$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
### Sauvegarder Consul
|
||||
|
||||
```bash
|
||||
export CONSUL_TOKEN="votre-token-admin"
|
||||
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
|
||||
```
|
||||
|
||||
### Lister les services Consul
|
||||
|
||||
```bash
|
||||
export CONSUL_TOKEN="votre-token-admin"
|
||||
curl -s -H "X-Consul-Token: $CONSUL_TOKEN" http://localhost:8500/v1/catalog/services
|
||||
```
|
||||
|
||||
## Securite
|
||||
|
||||
### Bonnes pratiques appliquees
|
||||
|
||||
1. **ACL Consul** : Tout est interdit par defaut
|
||||
2. **Tokens separes** : Chaque service a son propre token
|
||||
3. **Secrets non versionnes** : Les fichiers `.env` ne sont pas dans git
|
||||
4. **Permissions fichiers** : `chmod 600` sur les fichiers `.env`
|
||||
|
||||
### A faire sur le serveur
|
||||
|
||||
- Ne pas exposer le port 8500 sur Internet
|
||||
- Configurer un firewall
|
||||
- Rotation periodique des tokens
|
||||
|
||||
## Contacts et support
|
||||
|
||||
- **Administrateur** : syoul
|
||||
- **Email** : contact@anuanua.fr
|
||||
46
gitea/docker-compose.yml
Normal file
46
gitea/docker-compose.yml
Normal file
@ -0,0 +1,46 @@
|
||||
GNU nano 7.2 /opt/gitea/docker-compose.yml
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
gitea:
|
||||
container_name: gitea
|
||||
image: gitea/gitea:latest
|
||||
restart: always
|
||||
|
||||
env_file:
|
||||
- gitea.env
|
||||
|
||||
networks:
|
||||
- gitgit_syoul_fr_gitea_net
|
||||
|
||||
volumes:
|
||||
- gitgit_syoul_fr_gitea_data:/data
|
||||
|
||||
ports:
|
||||
- "3300:3000"
|
||||
- "2222:22"
|
||||
|
||||
# depends_on:
|
||||
# - gitea_db
|
||||
|
||||
# gitea_db:
|
||||
# container_name: gitea_db
|
||||
# image: postgres:14
|
||||
# restart: always
|
||||
#
|
||||
# environment:
|
||||
# POSTGRES_DB: gitea
|
||||
# POSTGRES_USER: gitea
|
||||
# POSTGRES_PASSWORD: Gitea_Db-2025_Secure
|
||||
|
||||
volumes:
|
||||
gitgit_syoul_fr_gitea_data:
|
||||
external: true
|
||||
|
||||
|
||||
networks:
|
||||
gitgit_syoul_fr_gitea_net:
|
||||
external: true
|
||||
# gitgit_syoul_fr_db_data:
|
||||
# external: true
|
||||
|
||||
100
postgres/README.md
Normal file
100
postgres/README.md
Normal file
@ -0,0 +1,100 @@
|
||||
# Configuration PostgreSQL pour Gitea
|
||||
|
||||
Ce dossier contient la configuration Docker Compose pour pérenniser le conteneur PostgreSQL de Gitea.
|
||||
|
||||
## Configuration actuelle
|
||||
|
||||
- **Image** : `postgres:14`
|
||||
- **Nom du conteneur** : `gitea_db`
|
||||
- **Volume** : `gitgit_syoul_fr_db_data` (existant, ne sera pas recréé)
|
||||
- **Réseau** : `gitgit_syoul_fr_gitea_net` (existant, ne sera pas recréé)
|
||||
- **Restart policy** : `always`
|
||||
|
||||
## Utilisation
|
||||
|
||||
### Vérifier la configuration
|
||||
|
||||
```bash
|
||||
cd /opt/postgres # ou le chemin où vous avez copié ce fichier
|
||||
docker compose config
|
||||
```
|
||||
|
||||
### Important : Ne pas appliquer maintenant
|
||||
|
||||
**ATTENTION** : Le conteneur PostgreSQL est actuellement en production et fonctionne. Ce fichier docker-compose.yml est une sauvegarde de la configuration pour le jour où vous devrez recréer le conteneur.
|
||||
|
||||
### Quand utiliser ce fichier
|
||||
|
||||
1. **En cas de migration** : Si vous devez déplacer le conteneur vers un autre serveur
|
||||
2. **En cas de recréation** : Si le conteneur doit être recréé (mise à jour, problème, etc.)
|
||||
3. **Pour la documentation** : Pour avoir une trace de la configuration actuelle
|
||||
|
||||
### Procédure de migration/recréation (à faire plus tard)
|
||||
|
||||
1. **Sauvegarder la base de données** :
|
||||
```bash
|
||||
docker exec gitea_db pg_dump -U gitea gitea > backup_$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
2. **Arrêter le conteneur existant** (si nécessaire) :
|
||||
```bash
|
||||
docker stop gitea_db
|
||||
```
|
||||
|
||||
3. **Utiliser le docker-compose.yml** :
|
||||
```bash
|
||||
cd /opt/postgres
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
4. **Vérifier que tout fonctionne** :
|
||||
```bash
|
||||
docker ps | grep gitea_db
|
||||
docker logs gitea_db
|
||||
```
|
||||
|
||||
### Notes importantes
|
||||
|
||||
- Le volume `gitgit_syoul_fr_db_data` contient toutes les données PostgreSQL
|
||||
- Le réseau `gitgit_syoul_fr_gitea_net` est partagé avec Gitea et Woodpecker
|
||||
- Le mot de passe est celui actuellement utilisé en production
|
||||
- Aucun port n'est exposé (communication interne uniquement)
|
||||
|
||||
## Sécurité
|
||||
|
||||
### Version actuelle (docker-compose.yml)
|
||||
|
||||
Le mot de passe est stocké en clair dans le `docker-compose.yml` avec la valeur actuelle : `Gitea_Db-2025_Secure`
|
||||
|
||||
### Version sécurisée avec fichier .env (optionnelle)
|
||||
|
||||
Pour une meilleure sécurité, vous pouvez utiliser `docker-compose.env.yml` qui charge les variables depuis un fichier `.env` :
|
||||
|
||||
1. **Créer le fichier .env** (sur le serveur uniquement, ne pas versionner) :
|
||||
```bash
|
||||
cd /opt/postgres
|
||||
cat > .env << 'EOF'
|
||||
POSTGRES_USER=gitea
|
||||
POSTGRES_PASSWORD=Gitea_Db-2025_Secure
|
||||
POSTGRES_DB=gitea
|
||||
EOF
|
||||
```
|
||||
|
||||
2. **Vérifier que .env est ignoré par git** :
|
||||
```bash
|
||||
echo ".env" >> .gitignore
|
||||
git check-ignore .env
|
||||
```
|
||||
|
||||
3. **Utiliser la version avec .env** :
|
||||
```bash
|
||||
docker compose -f docker-compose.env.yml up -d
|
||||
```
|
||||
|
||||
### Alternatives de sécurité avancées
|
||||
|
||||
Pour une sécurité encore plus poussée :
|
||||
1. Utiliser Docker Secrets (en mode Swarm)
|
||||
2. Utiliser un gestionnaire de secrets externe (Vault, etc.)
|
||||
3. Chiffrer le fichier `.env` avec des outils comme `sops` ou `ansible-vault`
|
||||
|
||||
39
postgres/docker-compose.env.yml
Normal file
39
postgres/docker-compose.env.yml
Normal file
@ -0,0 +1,39 @@
|
||||
version: "3.9"
|
||||
|
||||
# Version alternative avec fichier .env pour plus de sécurité
|
||||
# Pour utiliser cette version :
|
||||
# 1. Copiez .env.example vers .env
|
||||
# 2. Remplissez les vraies valeurs dans .env
|
||||
# 3. Utilisez ce fichier au lieu de docker-compose.yml
|
||||
|
||||
services:
|
||||
gitea_db:
|
||||
container_name: gitea_db
|
||||
image: postgres:14
|
||||
restart: always
|
||||
|
||||
env_file:
|
||||
- .env
|
||||
|
||||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
|
||||
volumes:
|
||||
- gitgit_syoul_fr_db_data:/var/lib/postgresql/data
|
||||
|
||||
networks:
|
||||
- gitgit_syoul_fr_gitea_net
|
||||
|
||||
# Pas de ports exposés - communication interne uniquement
|
||||
# Le conteneur est accessible via le réseau Docker via les aliases: gitea_db, db
|
||||
|
||||
volumes:
|
||||
gitgit_syoul_fr_db_data:
|
||||
external: true
|
||||
|
||||
networks:
|
||||
gitgit_syoul_fr_gitea_net:
|
||||
external: true
|
||||
|
||||
30
postgres/docker-compose.yml
Normal file
30
postgres/docker-compose.yml
Normal file
@ -0,0 +1,30 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
gitea_db:
|
||||
container_name: gitea_db
|
||||
image: postgres:14
|
||||
restart: always
|
||||
|
||||
environment:
|
||||
POSTGRES_USER: gitea
|
||||
POSTGRES_PASSWORD: Gitea_Db-2025_Secure
|
||||
POSTGRES_DB: gitea
|
||||
|
||||
volumes:
|
||||
- gitgit_syoul_fr_db_data:/var/lib/postgresql/data
|
||||
|
||||
networks:
|
||||
- gitgit_syoul_fr_gitea_net
|
||||
|
||||
# Pas de ports exposés - communication interne uniquement
|
||||
# Le conteneur est accessible via le réseau Docker via les aliases: gitea_db, db
|
||||
|
||||
volumes:
|
||||
gitgit_syoul_fr_db_data:
|
||||
external: true
|
||||
|
||||
networks:
|
||||
gitgit_syoul_fr_gitea_net:
|
||||
external: true
|
||||
|
||||
24
registrator/docker-compose.yml
Normal file
24
registrator/docker-compose.yml
Normal file
@ -0,0 +1,24 @@
|
||||
services:
|
||||
registrator:
|
||||
container_name: registrator
|
||||
image: gliderlabs/registrator:latest
|
||||
restart: unless-stopped
|
||||
|
||||
# IMPORTANT : Creer le fichier .env a partir de env.template avant le deploiement
|
||||
# Le fichier .env contient le token CONSUL_HTTP_TOKEN pour l'authentification ACL
|
||||
env_file:
|
||||
- .env
|
||||
|
||||
# -internal : utilise les IPs internes Docker
|
||||
# Le token est passe via la variable d'environnement CONSUL_HTTP_TOKEN
|
||||
command: -internal consul://consul:8500
|
||||
|
||||
volumes:
|
||||
- /var/run/docker.sock:/tmp/docker.sock:ro
|
||||
|
||||
networks:
|
||||
- gitgit_syoul_fr_gitea_net
|
||||
|
||||
networks:
|
||||
gitgit_syoul_fr_gitea_net:
|
||||
external: true
|
||||
11
registrator/env.template
Normal file
11
registrator/env.template
Normal file
@ -0,0 +1,11 @@
|
||||
# Token Consul pour Registrator
|
||||
# Ce token doit avoir les permissions : service:write, node:read, agent:read
|
||||
# Genere lors de l'initialisation des ACL Consul
|
||||
#
|
||||
# INSTRUCTIONS :
|
||||
# 1. Copier ce fichier vers .env
|
||||
# 2. Remplacer la valeur du token par le vrai token
|
||||
# 3. NE PAS VERSIONNER le fichier .env !
|
||||
|
||||
CONSUL_HTTP_TOKEN=votre-token-registrator-ici
|
||||
|
||||
46
woodpecker/docker-compose.yml
Normal file
46
woodpecker/docker-compose.yml
Normal file
@ -0,0 +1,46 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
woodpecker-server:
|
||||
image: woodpeckerci/woodpecker-server:latest
|
||||
container_name: woodpecker-server
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9001:8000"
|
||||
environment:
|
||||
WOODPECKER_GITEA: "true"
|
||||
WOODPECKER_GITEA_URL: "http://gitea:3000"
|
||||
WOODPECKER_GITEA_CLIENT: "77390faa-e609-4f00-846b-955aab74095e"
|
||||
WOODPECKER_GITEA_SECRET: "gto_iz4cxjukjemthvcqkovb4lnmaf5cbqvmudzemowclyok54k647dq"
|
||||
|
||||
WOODPECKER_AGENT_SECRET: "620d5723e91c8d6b220d50fb3790dc12b7a166181dddbce0e05a616c5b2e4aa6"
|
||||
WOODPECKER_ADMIN: "syoul"
|
||||
WOODPECKER_HOST: "https://ci.syoul.fr"
|
||||
|
||||
volumes:
|
||||
- woodpecker-data:/var/lib/woodpecker
|
||||
networks:
|
||||
- gitea_net
|
||||
|
||||
woodpecker-agent:
|
||||
image: woodpeckerci/woodpecker-agent:latest
|
||||
container_name: woodpecker-agent
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- woodpecker-server
|
||||
environment:
|
||||
WOODPECKER_SERVER: "woodpecker-server:9000"
|
||||
WOODPECKER_AGENT_SECRET: "620d5723e91c8d6b220d50fb3790dc12b7a166181dddbce0e05a616c5b2e4aa6"
|
||||
WOODPECKER_HEALTHCHECK_ADDR: ":3001"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
networks:
|
||||
- gitea_net
|
||||
|
||||
volumes:
|
||||
woodpecker-data:
|
||||
|
||||
networks:
|
||||
gitea_net:
|
||||
external: true
|
||||
name: gitgit_syoul_fr_gitea_net
|
||||
Reference in New Issue
Block a user