Files
Socialflow/DOCKER.md
T
Claude fcbc6b706f fix(docker): construire les images au lieu de tenter de les télécharger
Portainer échouait en « Pull and redeploy » : `pull access denied for
sociaflow-app, repository does not exist`. Les services `app` et
`ffmpeg-api` n'ayant que `build:`, Compose leur dérivait un nom d'image
depuis le nom de la stack et Docker allait la chercher sur Docker Hub,
où elle n'existe évidemment pas.

- `pull_policy: build` : l'image est reconstruite, jamais téléchargée
- `image:` explicite, pour que le nom ne dépende plus du nom donné à la
  stack dans Portainer
- DOCKER.md : procédure Portainer et diagnostic de cette erreur

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Db2EazEcvnqgTTeg8oGTif
2026-09-11 18:08:48 +00:00

237 lines
6.4 KiB
Markdown

# Déploiement Docker - Social Flow
## 📋 Configuration
L'application utilise Docker Compose pour orchestrer :
- **PostgreSQL 16** : Base de données sur réseau interne
- **Social Flow App** : Application Node.js exposée sur le port **4523**
## 🚀 Démarrage rapide
### 1. Copier le fichier d'environnement
```bash
cp .env.example .env
```
### 2. Éditer les variables d'environnement
Modifiez `.env` avec vos valeurs :
```bash
# Base de données
PGDATABASE=socialflow
PGUSER=socialflow
PGPASSWORD=votre_mot_de_passe_securise
# Application
PORT=4523
SESSION_SECRET=votre_cle_secrete_aleatoire
# API OpenRouter (pour la génération IA)
OPENROUTER_API_KEY=votre_cle_openrouter
```
### 3. Lancer les conteneurs
```bash
# Démarrer en arrière-plan
docker-compose up -d
# Voir les logs
docker-compose logs -f
# Arrêter
docker-compose down
```
## 🌐 Accès
- **PostgreSQL** : Accessible sur le port **4523** (interne et externe)
- **Application** : Accessible via Nginx sur le réseau `nginx_default`
## 🔧 Architecture réseau
### Réseau interne (`internal`)
- PostgreSQL et l'application communiquent sur ce réseau privé
### Réseau nginx (`nginx_default`)
- Réseau externe pour le reverse proxy Nginx
- PostgreSQL et l'application sont sur ce réseau
- Permet l'accès via Nginx et un domaine personnalisé
### Ports exposés
- **PostgreSQL** : `4523:4523` (port hôte 4523 → port container 4523)
- **Application** : Port 5555 interne (non exposé sur l'hôte, accessible via Nginx)
## 📝 Configuration Nginx
### Prérequis : Créer le réseau nginx
**Avant de lancer docker-compose**, créez le réseau nginx (une seule fois) :
```bash
docker network create nginx_default
```
### Configuration Nginx
Configurez Nginx pour cibler l'application sur le port **5555** :
```nginx
upstream socialflow {
server socialflow-app:5555; # ← Port interne de l'application
}
server {
listen 80;
server_name votre-domaine.com;
location / {
proxy_pass http://socialflow;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
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;
}
}
```
**Important** : Si vous n'utilisez pas Nginx, vous pouvez retirer le réseau `nginx_default` du `docker-compose.yml`.
## 🛠️ Commandes utiles
### Reconstruire les images
```bash
docker-compose build --no-cache
docker-compose up -d
```
### Voir les logs d'un service spécifique
```bash
docker-compose logs -f app # Application
docker-compose logs -f postgres # Base de données
```
### Accéder au conteneur
```bash
docker-compose exec app sh # Shell de l'application
docker-compose exec postgres psql -U socialflow # PostgreSQL CLI
```
### Nettoyer complètement
```bash
# Arrêter et supprimer les conteneurs, réseaux
docker-compose down
# Supprimer aussi les volumes (⚠️ PERTE DE DONNÉES)
docker-compose down -v
```
## 🔗 URL publique et connexions OAuth (Facebook / TikTok)
Les boutons « Connecter une page » construisent une URI de redirection à partir
de l'URL publique de l'application. Renseignez donc `APP_URL` avec le domaine
réel :
```bash
APP_URL=https://socialflow.exemple.fr
```
Puis déclarez l'URI correspondante chez le fournisseur :
- Facebook : *Connexion Facebook → Paramètres → URI de redirection OAuth valides*
→ `https://socialflow.exemple.fr/api/facebook/callback`
- TikTok : *Login Kit → Redirect URI* → `https://socialflow.exemple.fr/api/tiktok/callback`
Si `APP_URL` est absent, l'URL est déduite des en-têtes `X-Forwarded-Proto` et
`X-Forwarded-Host` envoyés par Nginx — vérifiez que le proxy les transmet
(voir la configuration Nginx ci-dessus). Un `APP_URL` réglé sur
`http://localhost:5555` en production produit une URI que Facebook refuse.
## 🧩 Déploiement via Portainer (stack Git)
La stack se construit depuis les sources : `app` et `ffmpeg-api` ont une section
`build:`, leurs images n'existent sur aucun registre.
- **« Pull and redeploy » échoue** avec `pull access denied for <stack>-app,
repository does not exist` : Docker cherche sur Docker Hub une image qui est
construite localement. Le `pull_policy: build` du `docker-compose.yml` évite
cette tentative ; si votre version de Portainer déclenche quand même le pull,
décochez **« Re-pull image »** dans la mise à jour de la stack.
- Pour reconstruire après une mise à jour du dépôt : *Stack → Editor →
Update the stack*, en laissant Docker rebâtir les images (ou
`docker compose up -d --build` en ligne de commande).
- Le nom des images est figé (`socialflow-app:latest`,
`socialflow-ffmpeg-api:latest`) : il ne dépend donc plus du nom donné à la
stack dans Portainer.
## 🔒 Sécurité en production
1. **Variables d'environnement** : Ne commitez JAMAIS le fichier `.env`
2. **Mots de passe** : Utilisez des mots de passe forts et aléatoires
3. **SESSION_SECRET** : Générez une clé aléatoire de 32+ caractères
4. **Firewall** : Limitez l'accès au port 4523 ou utilisez Nginx
5. **HTTPS** : Configurez un certificat SSL (Let's Encrypt + Nginx)
## 📊 Healthchecks
- **PostgreSQL** : Vérifie que la base est prête avant de démarrer l'app
- **Migrations** : Exécutées automatiquement au démarrage (`drizzle-kit push --force`)
## 🐛 Dépannage
### L'application ne démarre pas
```bash
# Vérifier les logs
docker-compose logs app
# Vérifier que PostgreSQL est prêt
docker-compose exec postgres pg_isready -U socialflow
```
### Port 4523 déjà utilisé
```bash
# Trouver le processus
sudo lsof -i :4523
# Ou changer le port dans .env et docker-compose.yml
```
### Erreur de connexion à la base de données
Vérifiez que `DATABASE_URL` dans `.env` correspond aux variables `PGUSER`, `PGPASSWORD`, etc.
## 📦 Volumes Docker
- `postgres_data` : Données persistantes de PostgreSQL
- Mappages locaux :
- `./attached_assets` → `/app/attached_assets` (médias uploadés)
- `./migrations` → `/app/migrations` (migrations DB)
## 🔄 Mise à jour de l'application
```bash
# 1. Pull les dernières modifications
git pull
# 2. Reconstruire l'image
docker-compose build
# 3. Redémarrer
docker-compose up -d
# 4. Vérifier les logs
docker-compose logs -f app
```