84 lines
3.2 KiB
Markdown
84 lines
3.2 KiB
Markdown
# 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.
|