Avec Docker â đ” Confirmé¶
Le projet fournit un Dockerfile. Cette mĂ©thode encapsule lâapplication et ses
dĂ©pendances dans des conteneurs, ce qui rend le dĂ©ploiement reproductible dâune
machine Ă lâautre. Elle suppose dâĂȘtre Ă lâaise avec Docker et Docker Compose.
Avertissement
Le Dockerfile fourni est un point de départ, pas une image de
production clĂ©s en main. Le systĂšme de fichiers dâun conteneur est Ă©phĂ©mĂšre :
ne comptez pas dessus pour stocker les médias uploadés
(le VOLUME déclaré ne suffit pas en production).
Configurez un stockage externe pour les médias
(voir Stockage des mĂ©dias en base de donnĂ©es (DB Storage)) et durcissez lâimage
selon votre contexte avant toute mise en production.
Prérequis¶
Docker et Docker Compose installés sur le serveur
Git (pour cloner le dépÎt)
Un nom de domaine configuré (pour la production)
Ătapes¶
Cloner le dépÎt.
Créer un fichier
docker-compose.ymlà la racine du projet (adapté à votre contexte : service web, base PostgreSQL, volumes).Générer une
SECRET_KEY(Copiez la valeur affichĂ©e dans le terminal, vous la collerez dans le.envĂ lâĂ©tape suivante) :python3 -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
Créer et éditer le fichier
.enven vous basant sur.env.example:cp .env.example .env
Ouvrez ensuite
.envdans un Ă©diteur de texte et renseignez les variables. Chaque variable sâĂ©crit sur une ligne sous la formeNOM=valeur(sans espace autour du=, sans guillemets). Ă minima :SECRET_KEY: la valeur gĂ©nĂ©rĂ©e Ă lâĂ©tape 3DATABASE_URL: lâadresse de connexion Ă la base PostgreSQLHOST_URL: votre domaine principalALLOWED_HOSTSvotre domaine principal et les Ă©ventuels (sous-)domaines secondairesUSE_DOCKER=1: pour que les recettesjustsâexĂ©cutent Ă lâintĂ©rieur du conteneur web
Pour ajouter dâautres variables dâenvironnement, voir la rĂ©fĂ©rence des variables dâenvironnement.
Construire et lancer les conteneurs :
docker compose up -d --build
Initialiser le site :
docker compose exec web python manage.py migrate docker compose exec web python manage.py collectstatic --noinput --ignore="*.sass" docker compose exec web python manage.py createsuperuser docker compose exec web python manage.py set_config docker compose exec web python manage.py import_dsfr_pictograms docker compose exec web python manage.py create_starter_pages
Astuce
đĄ Avec
USE_DOCKER=1dans votre.env, vous pouvez remplacer la quasi-totalité de ces commandes par un seuljust deploy(qui enchaßne migrations, fichiers statiques, pages de démarrage, gabarits, illustrations et indexation).Seul
createsuperuserreste à lancer séparément, viajust createsuperuser(ou son aliasjust csu).
Indexation de la recherche¶
Les contenus des pages sont indexés pour permettre la recherche sur le site, par
la commande update_index (cf. la documentation de Wagtail).
Elle est déjà lancée par just deploy à chaque déploiement.
Il est recommandĂ© dây ajouter une rĂ©indexation hebdomadaire, pour corriger dâĂ©ventuels Ă©carts entre lâindex et les contenus. Selon votre plateforme :
Si vous disposez de
cronsur la machine hÎte, ajoutez-y une tùche qui exécute la commande dans le conteneur :crontab -e # Ajouter (en adaptant le chemin du projet) : 0 3 * * 0 cd /opt/sites-conformes && docker compose exec -T web python manage.py update_index
Lâoption
-TdĂ©sactive lâallocation dâun terminal : elle est indispensable pour une exĂ©cution via cron, qui nâen dispose pas.Sur un hĂ©bergement de type container-as-a-service (oĂč
cronnâest souvent pas disponible), planifiez plutĂŽtpython manage.py update_indexvia lâordonnanceur de tĂąches de votre plateforme (tĂąche programmĂ©e / scheduled job).
Mise à jour (Docker)¶
Sauvegarder la base de données (voir Sauvegarde locale de la base de données et des médias).
Récupérer la derniÚre version du code :
git pullReconstruire les images et relancer :
docker compose up -d --build
Appliquer les migrations et regénérer les fichiers statiques :
docker compose exec web python manage.py migrate docker compose exec web python manage.py collectstatic --noinput --ignore="*.sass"
Astuce
Avec
USE_DOCKER=1, la recettejust updateenchaßne la synchronisation des dépendances (uv sync) puisjust deploy. Pratique pour une mise à jour complÚte en une commande.Avertissement
Si vous venez de faire une migration depuis un site en prod avec une base de donnĂ©es de prod pour le faire tourner en local, nâoubliez pas dâeffectuer la commande
set_configpour réécrire la valeur deHOST_URLen base.