# Déploiement (Portainer) & maintenance ## Principe - Le conteneur ne contient que **l'application** (Gunicorn). Il est **sans état**. - La **base PostgreSQL est externe** (la tienne). Aucune donnée n'est stockée dans le conteneur. - Au démarrage, l'`entrypoint` applique les migrations, crée le compte admin (si variables fournies), charge éventuellement les données d'exemple, puis lance Gunicorn. ## Préparer PostgreSQL Sur ton serveur PostgreSQL existant : ```sql CREATE DATABASE compta; CREATE USER jb WITH PASSWORD 'ton_mot_de_passe'; GRANT ALL PRIVILEGES ON DATABASE compta TO jb; -- PostgreSQL 15+ : donner aussi les droits sur le schéma public \c compta GRANT ALL ON SCHEMA public TO jb; ``` Vérifie que le serveur accepte les connexions depuis l'hôte Docker (`listen_addresses` dans `postgresql.conf` et une ligne dans `pg_hba.conf`). ## Important : le contexte de build `COPY . .` dans le Dockerfile copie le **contexte de build** (les fichiers fournis à Docker). L'**éditeur web** de Portainer ne fournit **que le docker-compose** comme contexte : tes dossiers `config/` et `compta/` sont absents, et le build échoue avec `No module named 'config'`. Il faut donc fournir le projet complet par l'une des deux méthodes ci-dessous. ### Option A — dépôt Git (recommandé) 1. Pousse le dossier du projet dans un dépôt Git (GitHub privé, ou Gitea auto-hébergé). 2. Portainer → **Stacks → Add stack → Repository**. 3. Renseigne l'URL du dépôt, la branche, et `docker-compose.yml` comme *Compose path*. 4. **Environment variables** : ajoute les valeurs (cf. `.env.example`). 5. **Deploy the stack**. Portainer clone le dépôt → contexte complet → `build: .` fonctionne. Mise à jour : `git push`, puis dans Portainer **Pull and redeploy**. ### Option B — image pré-construite sur l'hôte (sans Git) 1. Copie le projet sur l'hôte Docker (WinSCP/scp), ex. `/opt/jb-compta`. 2. En SSH : `cd /opt/jb-compta && docker build -t jb-compta:latest .` 3. Dans `docker-compose.yml`, commente `build: .` et décommente `image: jb-compta:latest`. 4. Portainer → **Stacks → Add stack → Web editor**, colle le compose, renseigne les variables, déploie. Mise à jour : re-copier les fichiers, `docker build` à nouveau, puis redéployer la stack. ### Premier démarrage Mets `SEED_DEMO=1` pour charger les barèmes 2026 et un jeu d'exemple, puis repasse à `0` et redéploie. ## Accès - Admin / saisie : `http://IP:8001/admin/` - Tableau de bord : `http://IP:8001/dashboard/` Change le port `8001` dans le compose si besoin. ## Mettre à jour l'application 1. Mets à jour le code (Git pull ou nouvelle image). 2. Dans Portainer : **Stacks → jb-compta → Update / Re-pull and redeploy**. 3. Les migrations éventuelles s'appliquent automatiquement au redémarrage. ## Sauvegarde Sauvegarde **uniquement la base PostgreSQL** (le conteneur n'a rien à sauvegarder) : ```bash pg_dump -h IP_DB -U jb compta > sauvegarde_compta_$(date +%F).sql ``` ## Sécurité - Génère un vrai `DJANGO_SECRET_KEY` (longue chaîne aléatoire). - `DJANGO_DEBUG=0` en production. - Renseigne `DJANGO_ALLOWED_HOSTS` et `DJANGO_CSRF_TRUSTED_ORIGINS` avec ton IP/domaine. - Place l'app derrière un reverse proxy HTTPS (Nginx Proxy Manager, Traefik…) si tu l'exposes.