Infrastructure Docker pour Odoo 19 avec backup automatique vers Cloudflare R2.
- Docker & Docker Compose
- AWS CLI (pour R2)
- Compte Cloudflare avec R2 activé
# Ubuntu/Debian
sudo apt install awscli
# macOS
brew install awscli
# Vérification
aws --versionodoo-infra/
├── docker-compose.yml # Configuration Docker
├── .env # Variables d'environnement (à créer)
├── .env.example # Template de configuration
├── .gitignore # Fichiers à ignorer
├── README.md # Cette documentation
├── addons/ # Modules Odoo personnalisés
├── config/
│ └── odoo.conf # Configuration Odoo
├── backup/ # Backups locaux
└── scripts/
├── setup.sh # Installation infrastructure
├── backup.sh # Création backup
└── restore.sh # Restauration backup
# Cloner le projet
git clone <votre-repo>
cd odoo-infra
# Créer .env depuis template
cp .env.example .env
nano .env # Configurer les mots de passe et R2- Aller sur https://dash.cloudflare.com
- R2 → Créer un bucket
odoo-backups - R2 API Tokens → Créer un token avec accès R/W
- Copier les credentials dans
.env:
CF_R2_ENDPOINT=https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com
CF_R2_BUCKET=odoo-backups
CF_R2_ACCESS_KEY_ID=your_key_here
CF_R2_SECRET_ACCESS_KEY=your_secret_herechmod +x scripts/*.sh
./scripts/setup.shL'installation va:
- Créer la structure de dossiers
- Générer la config Odoo
- Tester la connexion R2
- Démarrer les containers
- Vérifier que tout fonctionne
Odoo sera accessible sur: http://localhost:8069
./scripts/backup.shLe backup inclut:
- ✅ Base de données PostgreSQL (format custom)
- ✅ Filestore Odoo (fichiers uploadés)
- ✅ Modules personnalisés (addons/)
- ✅ Métadonnées (date, taille, etc.)
Le backup est:
- Créé localement dans
backup/ - Compressé en
.tar.gz - Uploadé vers R2 (si configuré)
- Les anciens backups sont nettoyés selon
BACKUP_RETENTION_DAYS
./scripts/restore.sh list# Depuis R2
./scripts/restore.sh odoo_backup_2024-01-15_10-30-00
# Depuis un fichier local
./scripts/restore.sh backup/odoo_backup_2024-01-15_10-30-00.tar.gz# Éditer crontab
crontab -e
# Ajouter (backup tous les 5 jours à 2h du matin)
0 2 */5 * * /chemin/vers/odoo-infra/scripts/backup.sh >> /var/log/odoo-backup.log 2>&1# /etc/systemd/system/odoo-backup.service
[Unit]
Description=Odoo Backup
[Service]
Type=oneshot
ExecStart=/chemin/vers/odoo-infra/scripts/backup.sh
User=your_user
# /etc/systemd/system/odoo-backup.timer
[Unit]
Description=Odoo Backup Timer
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
# Activer
sudo systemctl enable odoo-backup.timer
sudo systemctl start odoo-backup.timer# Voir les logs
docker compose logs -f
docker compose logs -f odoo
docker compose logs -f db
# Arrêter
docker compose down
# Redémarrer
docker compose restart
# Reconstruire
docker compose up -d --build
# Nettoyer tout
docker compose down -v # ⚠️ Supprime les données!# Se connecter à PostgreSQL
docker exec -it odoo-db psql -U odoo -d odoo
# Lister les bases
docker exec odoo-db psql -U odoo -c "\l"
# Taille de la base
docker exec odoo-db psql -U odoo -d odoo -c "SELECT pg_size_pretty(pg_database_size('odoo'));"# Shell Odoo
docker exec -it odoo-app odoo shell -d odoo
# Mettre à jour un module
docker exec odoo-app odoo -d odoo -u nom_module
# Installer un module
docker exec odoo-app odoo -d odoo -i nom_module# Dans .env
POSTGRES_PASSWORD=un_mot_de_passe_fort_aleatoire_123!
ODOO_ADMIN_PASSWORD=un_autre_mot_de_passe_fort_456!
# Dans config/odoo.conf
admin_passwd = votre_master_password_unique
list_db = False # Désactiver la liste des DBserver {
listen 80;
server_name votre-domaine.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name votre-domaine.com;
ssl_certificate /etc/ssl/certs/votre-cert.pem;
ssl_certificate_key /etc/ssl/private/votre-key.pem;
location / {
proxy_pass http://localhost:8069;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /longpolling {
proxy_pass http://localhost:8072;
}
}# Santé des containers
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Utilisation ressources
docker stats
# Espace disque backups
du -sh backup/
# Espace R2
aws s3 ls s3://odoo-backups/ --endpoint-url $CF_R2_ENDPOINT --summarize --human-readable# Vérifier les logs
docker compose logs odoo
# Problème de DB?
docker compose logs db
# Redémarrer proprement
docker compose down
docker compose up -d# Tester R2 manuellement
AWS_ACCESS_KEY_ID=$CF_R2_ACCESS_KEY_ID \
AWS_SECRET_ACCESS_KEY=$CF_R2_SECRET_ACCESS_KEY \
aws s3 ls s3://$CF_R2_BUCKET --endpoint-url $CF_R2_ENDPOINT
# Vérifier containers
docker ps | grep odoo# Vérifier intégrité backup
tar tzf backup/odoo_backup_XXX.tar.gz
# Espace disque?
df -h
# Forcer recréation DB
docker exec odoo-db psql -U odoo -c "DROP DATABASE odoo;"
docker exec odoo-db psql -U odoo -c "CREATE DATABASE odoo;"-
Backups R2: Les backups sont cryptés en transit (HTTPS) mais pas au repos. Activez le chiffrement R2 si nécessaire.
-
Rétention: Par défaut 30 jours. Les vieux backups sont supprimés automatiquement (local + R2).
-
Performance: Avec
workers=4, prévoir minimum 2GB RAM pour Odoo. -
Modules: Placez vos modules custom dans
addons/. Ils seront backupés automatiquement. -
Config: Modifiez
config/odoo.confselon vos besoins, puisdocker compose restart odoo.
Votre licence ici.
Votre nom