1. Architecture
Ce guide vous accompagne dans le lancement et l'exposition du backend DQE One Standalone sur une machine virtuelle Linux (Ubuntu) préalablement provisionnée.
Ce document décrit un exemple de configuration pour mettre en place l'instance du serveur backend Standalone sur une machine virtuelle Ubuntu. Ce document ne couvre pas l'ensemble de la couche de sécurité de votre propre environnement.
L'application backend est déployée avec Docker Compose et est généralement exposée via NGINX en HTTPS.
Architecture recommandée
Internet
|
HTTPS:443
|
NGINX
|
http://localhost:8000
|
DQE One Standalone backendMesures de sécurité
- Protocoles et ports : exposez l'application publiquement via HTTPS sur le port 443. L'application Docker elle-même écoute sur le port 8000 et doit de préférence rester derrière NGINX.
- Filtrage IP : selon votre architecture, restreignez l'accès entrant aux seules adresses IP de confiance.
- Certificat SSL : si la VM est directement exposée à internet, elle doit disposer d'une entrée DNS et d'un certificat SSL associé.
Recommandation
- Configuration serveur :
- Type : Unix, par exemple Ubuntu
- RAM : 3 à 5 Go
- Espace disque : 10 Go minimum
- CPU : 1 vCPU minimum
2. Installation
2.1. Prérequis
Installation de Docker
$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
$ sudo apt update
$ sudo apt install docker-ce
$ docker --versionRemarque : sur les versions récentes d'Ubuntu, la commande apt-key peut afficher un avertissement de dépréciation. Cet avertissement est normal et n'empêche pas l'installation de Docker si la commande renvoie OK.
Docker Compose
Les versions récentes de Docker incluent Docker Compose V2 par défaut. Ce guide utilise la commande du plugin Compose :
$ docker composeVérifiez que Docker Compose est disponible :
$ docker compose versionSi un numéro de version est renvoyé, aucune installation supplémentaire de Docker Compose n'est nécessaire.
Installation de NGINX
$ sudo apt update
$ sudo apt install nginxExemple de configuration :
server {
listen 443 ssl;
server_name myserver.example.com;
ssl_certificate /etc/nginx/ssl/[MY_CERTIFICATE].pem;
ssl_certificate_key /etc/nginx/ssl/[MY_PRIVATE_KEY].key;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
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;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header Cookie $http_cookie;
proxy_set_header Referer $http_referer;
proxy_pass http://localhost:8000;
}
access_log /var/log/nginx/dqeone-standalone.log;
error_log /var/log/nginx/dqeone-standalone-error.log error;
}Après avoir mis à jour la configuration NGINX, redémarrez NGINX :
$ sudo systemctl restart nginx2.2. Fichier Docker Compose
Créez un fichier docker-compose.yml avec le contenu suivant :
services:
redis:
container_name: redis
image: dqeone.azurecr.io/dqe-one-redis:v1.0
hostname: redis
logging:
driver: none
ports:
- "6379:6379"
volumes:
- redis_data:/data
dqeone:
container_name: dqeone
image: dqeone.azurecr.io/standalone:v1.4.0
hostname: dqeone
expose:
- "8000"
ports:
- "8000:8000"
depends_on:
- redis
- postgres
environment:
- SFAPIVERSION=v65.0
- CREATE_SUPERUSER=true
- RUN_COLLECTSTATIC=false
- DQE_ONE_SERVER_ADMIN_USER=<admin_user>
- DQE_ONE_SERVER_ADMIN_PASSWORD=<admin_password>
- DQE_CLIENT_LICENCE=<client_licence>
- WEBSITE_HOSTNAME=https://<your-domain>
- SECRET_ENCRYPTION_KEY=<secret_encryption_key>
- WAIT_HOSTS=redis:6379
- WAIT_HOSTS_TIMEOUT=300
- WAIT_SLEEP_INTERVAL=5
- WAIT_HOST_CONNECT_TIMEOUT=30
- REDIS_URL=redis://redis:6379
- PORT=8000
- DEBUG=false
- DB_USER=dqeone
- DB_PASSWORD=<database_password>
- DB_NAME=dqeone
- DB_HOST=postgres
- DB_VOLUME_PATH=./db/
- DB_MAX_CAPACITY=8000000000
- AUTHORIZED_SFTP_HOSTS=<authorized_sftp_hosts>
command:
- "bash"
- "./entrypoint.sh"
postgres:
container_name: postgres
image: dqeone.azurecr.io/dqe-one-postgres:v1.0
logging:
driver: none
environment:
POSTGRES_USER: dqeone
POSTGRES_PASSWORD: <database_password>
POSTGRES_DB: dqeone
expose:
- "5432"
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
redis_data:
postgres_data:
Important : remplacez toutes les valeurs indicatives entre
<...> par les valeurs fournies ou générées pour l'installation
du client.
Important : utilisez les versions d'images fournies par DQE. Ne les
remplacez pas par le tag latest, car certaines images peuvent ne pas
être publiées avec ce tag.
Note de sécurité : ne publiez pas les identifiants réels des clients, les clés de licence, les clés de chiffrement, les mots de passe du registre ou les mots de passe de base de données dans la documentation.
Variables d'environnement
Le service dqeone requiert plusieurs variables d'environnement pour configurer
le backend Standalone.
| Variable | Exemple de valeur | Description |
|---|---|---|
SFAPIVERSION |
v65.0 |
Version de l'API Salesforce utilisée par l'application lors de la communication avec Salesforce. |
CREATE_SUPERUSER |
true |
Crée le compte administrateur initial lors du premier démarrage. |
RUN_COLLECTSTATIC |
false |
Exécute la commande Django collectstatic au démarrage. Laissez à false sauf si explicitement requis. |
DQE_ONE_SERVER_ADMIN_USER |
<admin_user> |
Nom d'utilisateur du compte administrateur initial. |
DQE_ONE_SERVER_ADMIN_PASSWORD |
<admin_password> |
Mot de passe du compte administrateur initial. Choisissez un mot de passe fort et gardez-le confidentiel. |
DQE_CLIENT_LICENCE |
<client_licence> |
Clé de licence client fournie par DQE. |
WEBSITE_HOSTNAME |
https://standalone.example.com |
URL HTTPS publique de l'instance Standalone. Cette valeur doit correspondre au nom DNS et à la configuration NGINX. |
SECRET_ENCRYPTION_KEY |
<secret_encryption_key> |
Clé secrète utilisée pour chiffrer les informations sensibles stockées par l'application. Générez une clé unique pour chaque installation et ne la modifiez jamais après le déploiement. |
WAIT_HOSTS |
redis:6379 |
Liste des services dépendants qui doivent être accessibles avant le démarrage de l'application. |
WAIT_HOSTS_TIMEOUT |
300 |
Délai d'attente maximal, en secondes, pour que les services dépendants deviennent disponibles. |
WAIT_SLEEP_INTERVAL |
5 |
Délai, en secondes, entre deux vérifications de disponibilité. |
WAIT_HOST_CONNECT_TIMEOUT |
30 |
Délai d'expiration, en secondes, pour chaque tentative de connexion à un service dépendant. |
REDIS_URL |
redis://redis:6379 |
URL de connexion Redis utilisée par l'application. |
PORT |
8000 |
Port d'écoute interne de l'application. |
DEBUG |
false |
Active ou désactive le mode debug. Cette valeur doit être définie sur false en production. |
DB_USER |
dqeone |
Nom d'utilisateur de la base de données PostgreSQL utilisé par l'application. |
DB_PASSWORD |
<database_password> |
Mot de passe de la base de données PostgreSQL utilisé par l'application. Il doit correspondre à POSTGRES_PASSWORD dans le service postgres. |
DB_NAME |
dqeone |
Nom de la base de données PostgreSQL utilisé par l'application. Il doit correspondre à POSTGRES_DB dans le service postgres. |
DB_HOST |
postgres |
Nom d'hôte du service PostgreSQL défini dans le fichier Docker Compose. |
DB_VOLUME_PATH |
./db/ |
Chemin utilisé par l'application pour le stockage lié à la base de données. |
DB_MAX_CAPACITY |
8000000000 |
Capacité maximale de la base de données, exprimée en octets. |
AUTHORIZED_SFTP_HOSTS |
depot-1.dqe-software.net |
Liste d'hôtes SFTP, séparés par des virgules, autorisés par l'application pour les échanges de fichiers sécurisés. |
Important : la clé SECRET_ENCRYPTION_KEY doit être générée
une seule fois et conservée pendant toute la durée de vie du déploiement. Modifier cette
valeur après l'initialisation de l'application peut empêcher le déchiffrement des données
précédemment chiffrées.
Pour générer une clé de chiffrement compatible, exécutez :
python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
Si le module cryptography n'est pas installé, installez-le d'abord :
sudo apt install python3-cryptography
2.3. Valider le fichier Docker Compose
$ docker compose config
Si Docker Compose renvoie une erreur telle que :
yaml: found character that cannot start any token
vérifiez l'indentation du fichier. YAML ne prend en charge que les espaces. Des tabulations ou des caractères invisibles peuvent générer cette erreur. Le problème peut aussi se situer à la ligne précédant celle indiquée dans le message d'erreur.
3. Lancement
3.1. Connexion au registre de conteneurs Azure de DQE
$ docker login dqeone.azurecr.io
Username: <Login provided by DQE>
Password: <Password provided by DQE>3.2. Télécharger les images
$ docker compose pull
Si Docker renvoie une erreur unauthorized lors du téléchargement d'une image,
vérifiez que toutes les images utilisent le registre de conteneurs Azure fourni par DQE.
Les installations clients ne doivent pas référencer de registres de développement tels que
dqeonedev.azurecr.io.
3.3. Démarrer les services
$ docker compose up -dVérifiez que chaque conteneur est en cours d'exécution :
$ docker compose psServices attendus :
dqeoneredispostgres
3.4. Vérifier l'installation
$ curl -I http://localhost:8000Une réponse similaire à la suivante confirme que l'application est en cours d'exécution :
HTTP/1.1 301 Moved PermanentlyUne fois NGINX configuré, l'application doit être accessible via le point d'accès HTTPS public :
https://<your-domain>4. Dépannage
Erreur d'analyse YAML
yaml: found character that cannot start any tokenCauses possibles :
- Caractère de tabulation
- Indentation invalide
- Caractère invisible
Solution :
- Remplacez les tabulations par des espaces.
-
Validez le fichier à l'aide de
docker compose config. - Vérifiez la ligne précédant celle indiquée par le message d'erreur.
Erreur unauthorized lors du téléchargement des images
unauthorized: authentication requiredVérifiez que :
-
vous vous êtes correctement authentifié avec
docker login dqeone.azurecr.io; -
toutes les images référencent le registre de production DQE
dqeone.azurecr.io; - les versions d'images correspondent à celles fournies par DQE.
Impossible d'accéder à l'application à distance
Vérifiez que :
- les conteneurs Docker sont en cours d'exécution ;
- NGINX est en cours d'exécution ;
- le port 443 est autorisé par le pare-feu du serveur ;
- le certificat SSL est correctement configuré ;
- l'entrée DNS pointe vers la VM ou la passerelle exposant le service.
Associé à