Déploiement
Le déploiement est fait avec Docker et Docker Compose qui empaquettent tout ce dont il y a besoin dans des conteneurs.
Il faut donc ces 2 logiciels sur le serveur de production :
- Docker Engine v20+
- Docker Compose v2.12+
Les deux fichiers Docker Compose staging.yml
et production.yml
couplé à des variables d'environnement correctement configurées donnent la possibilité d'avoir des conteneurs et des volumes Docker complétement séparés, de manière à ce qu'un environnement de production et un autre de pré-production puissent tourner sur la même machine indépendamment.
Le chiffrement SSL/TLS n'est pas fait dans une des couches Docker de cette application, vous devrez donc vous en occuper avant que le traffic n'atteigne le point d'entrée du conteneur Traefik.
Pour commencer le déploiement, vous devez cloner le dépôt sur votre serveur :
git clone https://gitlab.com/koena/connect-access/connect-access.git
Variables d'environnement
La majeure partie de la configuration est faite au travers de variables d'environnement qui sont chargées par Docker Compose à partir de fichiers situés dans le répertoire .envs/
.
Créer les fichiers
Tout d'abord vous devez copier .envs/production_template/
pour les environnements de production et de pré-production :
cd connect-access
cp -r .envs/production_template .envs/.production
cp -r .envs/production_template .envs/.staging
Renseigner les valeurs
Vous devez renseigner les valeurs pour les 5 fichiers de configuration :
- Data
- Django
- Docker
- Postgres
- Traefik
- DATA_PLATFORM_NAME
- Le nom de la plateforme qui va apparaître publiquement à la place de "Connect Access".
- DATA_PLATFORM_DOMAIN_NAME
- Le nom de domaine de votre site web.
- DATA_COMPANY_NAME, DATA_COMPANY_EMAIL
- Le nom et l'adresse email de votre entreprise, utilisés pour l'envoi d'emails.
- DATA_ADMIN_NAME, DATA_ADMIN_EMAIL
- Le nom et l'adresse email de l'administrateurice, pour lui envoyer des emails quand d'importantes erreurs se produisent.
- DATA_LOGO_FILENAME
Le nom du logo principal dans
frontend/src/images/
, avec une taille recommandée de 178 x 80 pixels. Si c'est votre propre image vous devrez l'ajouter dans le répertoire indiqué. Vous pouvez laisser la valeur par défaut pour cette variable d'environnement et ajouter votre image au cheminfrontend/src/images/logo_custom.png
.- DATA_LOGO_FILENAME_SMALL
Le nom du petit logo dans
frontend/src/images/
. Ce logo apparaît dans le panneau d'administration lorsque le menu est contracté, et doit être carré.
- DJANGO_SETTINGS_MODULE
- Le module de paramètres Django utilisé. Vous n'aurez probablement pas besoin de changer cette variable.
- DJANGO_SECRET_KEY
Une clé secrète que vous devrez générer pour votre application. Vous pouvez regarder la documentation de Django à ce propos, et vous pouvez trouver de nombreux générateurs sur le web.
- DJANGO_ADMIN_URL
Il s'agit du chemin de votre panneau d'administration Django :
votredomaine.com/[DJANGO_ADMIN_URL]/
. Grâce à cela, le panneau d'administration Django sera plus difficile à trouver par des attaquants.- DJANGO_ALLOWED_HOSTS
Vous pouvez mettre ici tous les noms d'hôte autorisés à envoyer des requêtes au serveur Django, séparés par des virgules. Vous devriez principalement mettre ici vos noms de domaines. C'est utile pour éviter les attaques Cross Site Scripting et Cross-Site Request Forgery. Vous trouverez plus d'informations dans la documentation de Django à propos de ALLOWED_HOSTS.
- DJANGO_COOKIE_SECURE
Ce paramètre n'est utilisé que dans l'image de production et doit toujours être
True
dans un environnement de production, sauf dans des cas spécifiques tels que l'exécution de tests de bout en bout non sécurisés.- DJANGO_SERVER_EMAIL
- L'adresse email que Django utilise pour indiquer l'émetteur d'un message d'erreur à destination des administrateurs.
- DJANGO_EMAIL_HOST, DJANGO_EMAIL_USE_TLS, DJANGO_EMAIL_PORT, DJANGO_EMAIL_HOST_USER, DJANGO_EMAIL_HOST_PASSWORD,
- Les éléments de configuration liés à l'email, que vous obtiendrez de votre fournisseur de service d'envoi d'email.
- WEB_CONCURRENCY
Le nombre de processus Gunicorn créés pour gérer les requêtes. Vous pouvez en apprendre plus sur cette fonctionnalité sur la documentation de Gunicorn.
- SENTRY_DSN, SENTRY_ENVIRONMENT,
Connect Access est configuré pour envoyer des logs d'erreur à Sentry, qui est à la fois un outil open source de surveillance que vous pouvez installer, et une entreprise qui opère un service utilisant des instances de cet outil.
Le plus simple est de vous créer un compte sur sentry.io et d'utiliser la version gratuite pour voir si cet outil est utile pour vous.
SENTRY_DSN
est une URL qui vous est fournie lorsque vous créez un compte, etSENTRY_ENVIRONMENT
est utilisé pour la configuration, pour distinguer la production de la pré-production par exemple.- REDIS_URL
- Dans le cas où vous voudriez utiliser une autre instance Redis sur votre serveur.
- CELERY_FLOWER_USER, CELERY_FLOWER_PASSWORD,
- Un nom d'utilisateur et un mot de passe aléatoires pour l'outil de survaillance de queues Flower.
- MEDIATION_REQUEST_EMAIL
- L'adresse email à laquelle un message sera envoyé à chaque fois qu'une demande de médiation est créée.
- COMPOSE_PROJECT_NAME
- Il s'agit du nom de projet utilisé par Docker pour tous les conteneurs et volumes, qui pourront alors avoir le même nom mais être quand même indépendants grâce à des noms de projet différents. Vous devez changer cela à chaque fois que vous voulez une version indépendante de Connect Access : pour avoir une instance de pré-production et de production sur la même machine, mais aussi si vous voulez plusieurs instances de production.
- POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD,
- Ces informations définissent l'accès à la base de données PostgreSQL qui sera utilisée par le backend.
- POSTGRES_DB_END_TO_END
- Il s'agit ici du nom de la base de données utilisée par les tests de bout en bout. Elle est vidée à chaque fois que les tests sont lancés. Vous n'en aurez probablement pas besoin si vous voulez seulement installer un serveur de pré-production / production.
- APPLICATION_PORT
- Le port du point d'entrée principal pour l'application Django. Vous devrez rediriger le traffic arrivant sur votre serveur ici, après avoir géré le chiffrement SSL/TLS
- FLOWER_PORT
- Le port utilisé comme point d'entrée par le conteneur de Flower. Vous n'avez pas besoin de changer ce paramètre si vous n'utilisez pas ce service.
Créer des fichiers fusionnés
Vous ne pouvez passer qu'un seule fichier contenant des variables d'environnement à créer à docker compose
, donc vous devez fusionner ces fichiers à chaque fois que vous y changez quelque chose. Vous pouvez le faire avec la commande suivante :
python merge_production_dotenvs_in_dotenv.py
Ceci va créer 2 fichiers .env_production
et .env_staging
qui sont simplement des concaténations des 5 fichiers de configuration que vous avez rempli.
Construire et déployer l'application
À chaque fois que vous souhaitez exécuter une commande, vous devez spécifier le bon fichier YAML de configuration à docker compose
, et le bon fichier fusionné de variables d'environnements.
- Production
- Pré-production
docker compose -f production.yml --env-file .env_production my_command
docker compose -f staging.yml --env-file .env_staging my_command
Pour construire et démarrer l'application, utilisez ces commandes :
- Production
- Pré-production
docker compose -f production.yml --env-file .env_production build
docker compose -f production.yml --env-file .env_production run django python backend/manage.py migrate
docker compose -f production.yml --env-file .env_production up -d
docker compose -f staging.yml --env-file .env_staging build
docker compose -f staging.yml --env-file .env_staging run django python backend/manage.py migrate
docker compose -f staging.yml --env-file .env_staging up -d
L'application va démarrer, et écouter sur le port spécifié par la variables d'environnement APPLICATION_PORT
.
La commande migrate
est exécutée par Django pour créer initialement les tables dans la base de données.
Configuration
Une fois que l'application est en train de tourner, vous pouvez configurer certains éléments depuis le panneau d'administration qui sera disponible à l'adresse votredomaine.com/[DJANGO_ADMIN_URL]/
.
Mais d'abord vous devez créer un compte admin avec la commande suivants (vous devrez indiquer certaines informations basiques comme votre nom, adresse email et mot de passe) :
- Production
- Pré-production
docker compose -f production.yml --env-file .env_production run django python backend/manage.py createsuperuser
docker compose -f staging.yml --env-file .env_staging run django python backend/manage.py createsuperuser
Avec le compte ainsi crée vous pouvez vous connecter au panneau d'administration Django et remplir certaines informations :
- Informations à propos de l'organisation qui gère le service de médiation
Ici vous pouvez ajouter des informations à propos de votre entreprise ou organisation. Ces informations apparaîtront dans le pied de page de l'application Connect Access dans la section "Nous contacter".
Vous pouvez aussi renseigner vos conditions générales d'utilisation, qui apparaîtront sur la page
votredomaine.com/terms-of-service
.- Informations à propos du service de médiation
Ici vous pouvez ajouter des liens qui apparaîtront dans le pied de page de l'application, dans la section "À propos". Chaque entrée est un lien.
L'URL du lien doit être soit une URL absolue (commençant par
http
ouhttps
) qui s'ouvrira dans une nouvelle fenêtre, soit une URL relative qui n'ouvrira pas de nouvelle fenêtre et ne rechargera pas non plus la page. Si vous remplissez le contenu des conditions générales d'utilisation dans la section des informations à propos de l'organisation, l'URL du lien que vous devrez utiliser seraterms-of-service
.- Sites
- Dans cette section, ajoutez une entrée pour chaque nom de domaine de votre application.