Files
infrastructure/docs/05-configuration-postgresql.md

214 lines
4.2 KiB
Markdown

# 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
```