deploiement - Tablify-Developement/Tablify-Web GitHub Wiki

Résumé coaching 6.a

+ Le groupe a pu mettre en ligne l'application développée dans son état actuel.
+ Le groupe peut expliquer ce qu'il a dû faire pour héberger et déployer, et justifier les choix. 

+ Le groupe présente sur le wiki le choix qui a été posé pour héberger l'application web : fournisseur, configuration matérielle, prix, garantie, plateforme logicielle, …
+ Le groupe présente sur le wiki la configuration du serveur utilisée et la justifie. 
+ Les étudiants présentent sur le wiki la manière dont le code est déployé en production : moment, étapes, outils et protocoles utilisés, …  
+ Le groupe explique dans le wiki l'automatisation (CI/CD) qui aurait été mis en place.

Rapport de Déploiement - Tablify

1. Choix du serveur d'hébergement (Hostinger)

Configuration du serveur choisi

Fournisseur : Hostinger VPS

  • Plan : VPS 2
  • CPU : 2 vCores
  • RAM : 8 GB DDR4
  • Stockage : 100 GB SSD NVMe
  • Bande passante : 1000 Mbps (illimitée)
  • OS : Ubuntu 22.04 LTS / Debian 11
  • Localisation : Europe (Amsterdam/Londres)

Justification du choix Hostinger

1. Rapport qualité-prix exceptionnel

  • Coût : 8.99€/mois (avec promotion souvent disponible à 4.49€/mois)
  • Performance : 8 GB RAM pour seulement ~9€/mois vs 15-25€ chez la concurrence
  • Stockage : SSD NVMe 3x plus rapide que les SSD classiques

2. Configuration matérielle adaptée

  • 8 GB RAM : Largement suffisant pour Docker + PostgreSQL + Next.js + Express
  • 2 vCores : Intel/AMD dernière génération, performances optimales
  • 100 GB SSD NVMe : Vitesse d'I/O exceptionnelle pour la base de données
  • Réseau 1Gbps : Latence faible, idéal pour applications web

3. Garanties et fiabilité

  • SLA : 99.9% de disponibilité garantie
  • Uptime : Historique prouvé de >99.95%
  • Support : 24/7/365 via chat en français
  • Infrastructure : Datacenters Tier-3, redondance complète
  • Sauvegardes : Snapshots automatiques hebdomadaires inclus

4. Avantages techniques

  • IPv4 dédiée : Incluse sans frais supplémentaires
  • Panel de gestion : hPanel intuitif + accès SSH complet
  • Sécurité : Firewall inclus, protection DDoS
  • Monitoring : Surveillance 24/7 des performances

5. Support et documentation

  • Documentation : Guides détaillés en français
  • Communauté : Forum actif et tutorials
  • Migration : Assistance gratuite pour migration
  • Remboursement : 30 jours satisfait ou remboursé

Comparaison avec les alternatives

Critère Hostinger VPS 2 DigitalOcean AWS EC2 t3.medium OVH VPS SSD 3
RAM 8 GB 4 GB 4 GB 8 GB
CPU 2 vCores 2 vCPUs 2 vCPUs 2 vCores
Stockage 100 GB NVMe 80 GB SSD 30 GB SSD 160 GB SSD
Prix/mois 8.99€ 24$ (~22€) 35$ (~32€) 11.99€
Support FR ✅ 24/7 ❌ EN uniquement ❌ EN uniquement ✅ 24/7
Bande passante Illimitée 1Gbps 4 TB inclus Payant 500 Mbps
Setup 5 min 10 min 30 min 10 min

Conclusion du choix

Hostinger offre le meilleur rapport performance/prix pour notre application, avec une configuration largement suffisante (8GB RAM vs 4GB minimum requis) et un support francophone de qualité.


2. Technique de déploiement

2.1 Schéma d'architecture

┌─────────────────────────────────────────────────────────────┐
│                        INTERNET                             │
│                     (Utilisateurs)                         │
└─────────────────────┬───────────────────────────────────────┘
                      │
                      │ HTTPS (443) / HTTP (80)
                      │
┌─────────────────────▼───────────────────────────────────────┐
│                  HOSTINGER VPS                             │
│  ┌─────────────────────────────────────────────────────────┐│
│  │               NGINX REVERSE PROXY                      ││
│  │  • SSL Termination (Let's Encrypt)                    ││
│  │  • Load Balancing                                     ││
│  │  • Gzip Compression                                   ││
│  │  • Rate Limiting                                      ││
│  └─────────────────┬───────────────────────────────────────┘│
│                    │                                        │
│  ┌─────────────────▼───────────────────────────────────────┐│
│  │                DOCKER NETWORK                          ││
│  │                                                        ││
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     ││
│  │  │  Frontend   │  │   Backend   │  │ PostgreSQL  │     ││
│  │  │  Next.js    │  │  Express.js │  │     15      │     ││
│  │  │   :3000     │◄─┤    :3001    │◄─┤   :5432     │     ││
│  │  │             │  │             │  │             │     ││
│  │  └─────────────┘  └─────────────┘  └─────────────┘     ││
│  │                                                        ││
│  │  ┌─────────────────────────────────────────────────────┐││
│  │  │                   VOLUMES                           │││
│  │  │  • postgres_data (Base de données)                 │││
│  │  │  • backend_uploads (Fichiers uploadés)             │││
│  │  └─────────────────────────────────────────────────────┘││
│  └────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘

2.2 Méthodologie de déploiement

Type de déploiement : Déploiement manuel avec scripts d'automatisation

Workflow de développement :

Développement Local → GitHub → Serveur de Production
     ↓                  ↓              ↓
• Tests unitaires   • Git push    • Git pull
• Docker local      • CI checks   • Docker rebuild
• Hot reload        • Code review • Restart services

Étapes détaillées :

  1. Phase de développement

    # Développement en local avec hot reload
    npm run dev
    # Tests avec Docker
    docker-compose up
    
  2. Validation et commit

    # Tests avant commit
    npm run test
    npm run build
    

    Commit et push

    git add . git commit -m "feat: nouvelle fonctionnalité" git push origin main

  3. Déploiement sur production

    # Connexion au serveur
    ssh [email protected]
    

    Mise à jour du code

    cd ~/tablify git pull origin main

    Déploiement avec zero-downtime

    ./deploy.sh

2.3 Fréquence et planification

  • Nouvelles fonctionnalités : Déploiement manuel après validation
  • Corrections de bugs : Déploiement immédiat (hotfix)
  • Mises à jour de sécurité : Déploiement planifié le dimanche soir
  • Maintenance système : 1ère semaine de chaque mois

2.4 Outils et technologies utilisés

Conteneurisation

  • Docker 24.0+ : Isolation des services et portabilité
  • Docker Compose : Orchestration multi-conteneurs
  • Docker Networks : Isolation réseau sécurisée

Serveur Web et Proxy

  • Nginx 1.22+ : Reverse proxy haute performance
  • Let's Encrypt : Certificats SSL automatiques et gratuits
  • Certbot : Gestion automatique des certificats

Base de données

  • PostgreSQL 15 : Base de données relationnelle robuste
  • Docker Volumes : Persistance des données garantie

Monitoring et Maintenance

  • UFW : Firewall simplifié pour sécuriser les ports
  • Logrotate : Rotation automatique des logs
  • Cron : Tâches automatisées (sauvegardes, maintenance)

2.5 Automatisation mise en place

Scripts d'automatisation développés :

  1. Script de déploiement (deploy.sh)

    #!/bin/bash
    # Déploiement zero-downtime
    echo "🚀 Démarrage du déploiement..."
    git pull origin main
    docker-compose -f docker-compose.prod.yml build
    docker-compose -f docker-compose.prod.yml up -d
    echo "✅ Déploiement terminé!"
    
  2. Sauvegarde automatique quotidienne

    # Cron job : 0 2 * * *
    #!/bin/bash
    DATE=$(date +%Y%m%d_%H%M%S)
    docker exec tablify-postgres pg_dump -U tablify_user tablify > /backup/db_$DATE.sql
    # Nettoyage des sauvegardes > 7 jours
    find /backup -name "db_*.sql" -mtime +7 -delete
    
  3. Monitoring de santé

    # Vérification toutes les 5 minutes
    #!/bin/bash
    if ! curl -f http://localhost:3000/health; then
        docker-compose -f docker-compose.prod.yml restart
        echo "Application redémarrée automatiquement" | mail [email protected]
    fi
    

Automatisations système :

  • Restart automatique : Policy Docker "unless-stopped"
  • Renouvellement SSL : Certbot automatique
  • Rotation des logs : Logrotate configuré
  • Sauvegardes : Script cron quotidien
  • Updates système : Unattended-upgrades pour sécurité

Futures automatisations prévues :

  • 🔄 GitHub Actions : CI/CD automatique sur push
  • 🔄 Monitoring avancé : Prometheus + Grafana
  • 🔄 Tests automatisés : Pipeline de tests intégrée
  • 🔄 Notifications : Slack/Discord pour alerts

3. Déploiement - Commandes simples

3.1 Installation initiale (à faire une seule fois)

# Connexion au serveur Hostinger
ssh root@votre-ip-hostinger

Mise à jour du système

apt update && apt upgrade -y

Installation de Docker

curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh systemctl start docker systemctl enable docker

Installation de Nginx

apt install nginx -y systemctl start nginx systemctl enable nginx

Installation de Certbot pour SSL

apt install certbot python3-certbot-nginx -y

Configuration du firewall

ufw allow 22,80,443/tcp ufw enable

Création utilisateur deploy

adduser deploy usermod -aG docker,sudo deploy

3.2 Déploiement de l'application

# Connexion avec l'utilisateur deploy
ssh deploy@votre-ip-hostinger

Clonage du repository

git clone https://github.com/votre-username/tablify.git cd tablify

Configuration des variables d'environnement

nano .env

Ajouter vos variables (DB, JWT secrets, etc.)

Construction et démarrage des containers

docker compose -f docker-compose.prod.yml up -d --build

Configuration Nginx

sudo nano /etc/nginx/sites-available/tablify

Coller la configuration Nginx

sudo ln -s /etc/nginx/sites-available/tablify /etc/nginx/sites-enabled/ sudo rm /etc/nginx/sites-enabled/default sudo nginx -t sudo systemctl reload nginx

3.3 Configuration SSL HTTPS

# Obtention du certificat SSL Let's Encrypt
sudo certbot --nginx -d votre-domaine.com

Test du renouvellement automatique

sudo certbot renew --dry-run

3.4 Commandes de mise à jour (déploiement régulier)

# Connexion au serveur
ssh deploy@votre-ip-hostinger

Navigation vers le projet

cd ~/tablify

Mise à jour du code

git pull origin main

Redémarrage avec la nouvelle version

docker compose -f docker-compose.prod.yml down docker compose -f docker-compose.prod.yml up -d --build

Vérification du statut

docker compose -f docker-compose.prod.yml ps

3.5 Commandes de monitoring essentielles

# Vérifier l'état des services
docker compose -f docker-compose.prod.yml ps

Voir les logs en temps réel

docker compose -f docker-compose.prod.yml logs -f

Vérifier l'utilisation des ressources

docker stats

Tester l'application

curl https://votre-domaine.com/api/health

Vérifier le certificat SSL

openssl s_client -connect votre-domaine.com:443 -servername votre-domaine.com

3.6 Script de déploiement automatisé (optionnel)

# Création du script de déploiement rapide
nano ~/deploy.sh

#!/bin/bash echo "🚀 Début du déploiement Tablify..." cd ~/tablify git pull origin main docker compose -f docker-compose.prod.yml down docker compose -f docker-compose.prod.yml up -d --build echo "✅ Déploiement terminé! Application disponible sur https://votre-domaine.com"

Rendre le script exécutable

chmod +x ~/deploy.sh

Utilisation future en une seule commande

./deploy.sh

3.7 Commandes de maintenance

# Sauvegarde manuelle de la base de données
docker exec tablify-postgres pg_dump -U tablify_user tablify > backup_$(date +%Y%m%d).sql

Nettoyage des images Docker inutilisées

docker system prune -a

Redémarrage complet en cas de problème

docker compose -f docker-compose.prod.yml restart

Mise à jour des certificats SSL

sudo certbot renew


Résumé des avantages de cette solution

Performance : 8GB RAM Hostinger vs 4GB concurrence
Prix : 8.99€/mois vs 20-35€ ailleurs
Simplicité : Déploiement en 5 commandes
Sécurité : HTTPS automatique + Firewall
Fiabilité : 99.9% uptime garanti
Support : 24/7 en français
Évolutivité : Upgrade facile si besoin

Cette solution offre un excellent équilibre entre performance, coût et simplicité de gestion pour le déploiement de Tablify.

⚠️ **GitHub.com Fallback** ⚠️