#
Déploiement
#
Étapes de Déploiement
#
Étape 1 : Installation de Docker et Docker Compose
Sur votre VPS Linux (ex. : Contabo), connectez-vous en SSH et suivez les étapes suivantes :
#
1.1 Installation de Docker
- Mettre à jour le système :
sudo apt update && sudo apt upgrade -y
- Installer les dépendances nécessaires :
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
- Ajouter la clé GPG de Docker :
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- Ajouter le dépôt Docker officiel :
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Installer Docker :
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
- Vérifier l’installation :
docker --version
#
1.2 Installation de Docker Compose
- Télécharger Docker Compose :
sudo curl -L "https://github.com/docker/compose/releases/download/v2.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- Donner les droits d’exécution :
sudo chmod +x /usr/local/bin/docker-compose
- Vérifier l’installation :
docker-compose --version
#
1.3 Configuration des permissions Docker
sudo usermod -aG docker $USER
#
Étape 2 : Installation de PostgreSQL
# Mise à jour du système
sudo apt update && sudo apt upgrade -y
# Installation de PostgreSQL
sudo apt install postgresql postgresql-contrib -y
# Démarrage du service PostgreSQL
sudo systemctl start postgresql
# Activation du service au démarrage
sudo systemctl enable postgresql
# Création d'un utilisateur PostgreSQL
sudo -u postgres createuser --interactive
# Entrez le nom de l'utilisateur : crm_user
# Autoriser les superprivileges ? (y/n) : n
# Création de la base de données
sudo -u postgres createdb crm_db -O crm_user
# Définition d'un mot de passe pour l'utilisateur
sudo -u postgres psql -c "ALTER USER crm_user WITH PASSWORD 'securepassword';"
# Modification du fichier pg_hba.conf pour autoriser les connexions externes
sudo nano /etc/postgresql/<version>/main/pg_hba.conf
# Ajouter :
host all all 0.0.0.0/0 md5
# Modification du fichier postgresql.conf
sudo nano /etc/postgresql/<version>/main/postgresql.conf
# Décommenter et modifier la ligne suivante :
listen_addresses = '*'
# Redémarrer PostgreSQL
sudo systemctl restart postgresql
# Vérification de la connectivité PostgreSQL
psql -h <IP_VPS> -U crm_user -d crm_db
#
Étape 3 : Installation et configuration de Docker Proxy Manager
#
Installation de Docker Proxy Manager
# Création du répertoire pour Docker Proxy Manager
mkdir -p /opt/docker/proxy-manager
cd /opt/docker/proxy-manager
# Création du fichier docker-compose.yml
nano docker-compose.yml
# Coller le contenu suivant :
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: always
ports:
- '80:80' # HTTP
- '443:443' # HTTPS
- '81:81' # Interface d'administration
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
# Lancement de Docker Proxy Manager
docker-compose up -d
# Accès à l'interface Web
# URL : http://<IP_VPS>:81
# Identifiants par défaut :
# Email : admin@example.com
# Mot de passe : changeme
#
Configuration d'un domaine
- Accédez au gestionnaire DNS de votre fournisseur de domaine.
- Ajoutez un enregistrement A :
- Nom :
api(ou autre sous-domaine souhaité). - Valeur : l'adresse IP publique de votre VPS.
- Nom :
- Dans Docker Proxy Manager :
- Ajoutez un nouvel hôte proxy avec le sous-domaine configuré.
- Configurez le routage vers l'API backend (
http://<IP_VPS>:9883). - Générer un certificat SSL avec Let's Encrypt.
#
Étape 4 : Récupération de la stack Docker depuis GitLab
- Installer Git sur le VPS (si ce n'est pas déjà fait) :
sudo apt install -y git
- Cloner le dépôt GitLab contenant le stack Docker :
git clone https://gitlab.com/votre-projet/crm-docker-stack.git
cd crm-docker-stack
#
Étape 4.1 : Configuration des Variables d’Environnement
Créez un fichier .env dans le dossier cloné pour centraliser les configurations sensibles. Exemple de configuration :
# Configuration de la base de données PostgreSQL
DB_HOST=external-db-host
DB_PORT=5432
DB_NAME=crm_db
DB_USER=admin
DB_PASSWORD=securepassword
# Django
DJANGO_SECRET_KEY=your_secret_key
DJANGO_DEBUG=False
# Elasticsearch
ES_HOST=elasticsearch
ES_PORT=9200
# AirNotifier
AIRNOTIFIER_API_KEY=your_airnotifier_api_key
# API SMS
SMS_API_URL=https://api.smsprovider.com/send
SMS_API_USERNAME=your_sms_username
SMS_API_PASSWORD=your_sms_password
# Configuration générale
APP_ENV=production
BACKEND_PORT=8000
Important : Protégez ce fichier .env pour éviter toute fuite de données sensibles.
#
Étape supplémentaire : Stack Docker pour Grafana et Prometheus
# Créer un répertoire pour le stack de monitoring
mkdir -p /opt/docker/monitoring
cd /opt/docker/monitoring
# Création du fichier docker-compose.yml
nano docker-compose.yml
# Contenu du fichier docker-compose.yml
version: '3'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000
#
Étape 4.2 : Déploiement avec Docker Compose
Lancer la stack Docker :
Vérifier que les services fonctionnent correctement :
Accéder aux services :
- API Backend : http://<IP_VPS>:9883
- Elasticsearch : http://<IP_VPS>:9200
- AirNotifier : http://<IP_VPS>:8801
- Tester la connexion aux bases de données et services tiers.
#
Étape 5 : Sauvegarde des données et des volumes Docker
#
5.1 Sauvegarde PostgreSQL
Configurez un script pour sauvegarder la base de données PostgreSQL. Exemple :
#!/bin/bash
DATE=$(date +%Y%m%d)
pg_dump -h $DB_HOST -U $DB_USER -d $DB_NAME > /backup/postgres_backup_$DATE.sql
Ajoutez ce script à un cron job pour automatiser la sauvegarde :
crontab -e
Ajoutez la ligne suivante pour une sauvegarde quotidienne :
0 2 * * * /path/to/backup_script.sh
#
5.2 Sauvegarde des volumes Docker
Pour sauvegarder les données Elasticsearch et les autres volumes Docker :
docker run --rm --volumes-from crm_elasticsearch -v $(pwd):/backup ubuntu tar cvf /backup/es_backup.tar /usr/share/elasticsearch/data
#
5.3 Sauvegarde des images Docker
docker save $(docker images -q) | gzip > docker_images_backup_$(date +%Y%m%d).tar.gz
#
Étape 6 : Maintenance et Mise à jour
- Mettre à jour le dépôt depuis GitLab :
git pull origin main
- Mettre à jour les images Docker :
docker-compose pull
docker-compose up -d
- Nettoyer les anciens volumes inutilisés :
docker volume prune