# 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

  1. Mettre à jour le système :
sudo apt update && sudo apt upgrade -y
  1. Installer les dépendances nécessaires :
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
  1. 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
  1. 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
  1. Installer Docker :
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
  1. Vérifier l’installation :
docker --version

# 1.2 Installation de Docker Compose

  1. 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
  1. Donner les droits d’exécution :
sudo chmod +x /usr/local/bin/docker-compose
  1. 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

  1. Accédez au gestionnaire DNS de votre fournisseur de domaine.
  2. Ajoutez un enregistrement A :
    • Nom : api (ou autre sous-domaine souhaité).
    • Valeur : l'adresse IP publique de votre VPS.
  3. 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

  1. Installer Git sur le VPS (si ce n'est pas déjà fait) :
sudo apt install -y git
  1. 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

  1. Lancer la stack Docker :

  2. Vérifier que les services fonctionnent correctement :

  3. Accéder aux services :

  • API Backend : http://<IP_VPS>:9883
  • Elasticsearch : http://<IP_VPS>:9200
  • AirNotifier : http://<IP_VPS>:8801
  1. 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
  1. Mettre à jour le dépôt depuis GitLab :
git pull origin main
  1. Mettre à jour les images Docker :
docker-compose pull
docker-compose up -d

  1. Nettoyer les anciens volumes inutilisés :
docker volume prune