Aller au contenu

Installer sur un serveur neuf (de zéro)

Cette page sert uniquement si tu repars d'un serveur vierge (opération rare). Pour la mise à jour au quotidien, va plutôt sur Déployer en production.

Architecture visée (la même qu'aujourd'hui) : un proxy web central qui gère HTTPS et aiguille les adresses, plus l'application qui tourne en images et se met à jour toute seule via GitHub (CI/CD). On ne met plus de reverse-proxy dans le projet lui-même.


Étape 1 — Préparer OVH

  1. DNS — dans OVH → Zone DNS, crée les entrées A vers l'IP du serveur :
    • transaction.boaz-study.tech et api-transaction.boaz-study.tech (production)
    • test-transaction.boaz-study.tech et api-test-transaction.boaz-study.tech (test)
  2. Pare-feu OVH — n'autorise que : ton port SSH, 80 et 443.

Vérifier : dig +short transaction.boaz-study.tech renvoie l'IP du serveur.


Étape 2 — Préparer le serveur

1
2
3
4
5
ssh ubuntu@IP_DU_SERVEUR
sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER && newgrp docker

Vérifier : docker ps fonctionne sans sudo.


Étape 3 — Installer le proxy web central

Le proxy central gère HTTPS et route les adresses vers chaque application.

1
2
3
4
git clone <URL_DU_REPO_nginx-proxy-center> /home/ubuntu/nginx-proxy-center
cd /home/ubuntu/nginx-proxy-center
docker network create proxy-network      # le réseau partagé
docker compose up -d                      # démarre le proxy + le renouvellement HTTPS

Vérifier : docker ps montre nginx-proxy-central et certbot-central en route. La procédure complète pour ajouter une adresse + son certificat est décrite dans Domaines (DNS) et certificats HTTPS.


Étape 4 — Déposer les fichiers de configuration (secrets)

1
2
3
4
5
mkdir -p /home/ubuntu/Projet_boaz_bank_transaction_fullstack/secrets
# Copier ici les 2 fichiers de reglages (jamais sur GitHub) :
#   .env.prod   (production)
#   .env.test   (test)
chmod 600 /home/ubuntu/Projet_boaz_bank_transaction_fullstack/secrets/.env.*

Récupère .env.prod / .env.test depuis une sauvegarde (voir Sauvegarde et restauration) ou recopie-les depuis le modèle .env.test.example du projet.


Étape 5 — Installer le robot de déploiement (runner)

Le runner reçoit les ordres de GitHub et déploie tout seul. Il s'installe avec l'outil réutilisable Template_runner_github_cd_deploy_server, via son assistant guidé :

1
2
3
git clone <URL>/Template_runner_github_cd_deploy_server.git
cd Template_runner_github_cd_deploy_server
sudo ./setup.sh

L'assistant te guide pas à pas : nouveau projet ou projet existant, nom du dossier projet, dépôt GitHub, jeton (PAT — il explique comment l'obtenir), puis récap + installation. Il range le runner dans …/<NomProjet>/actions-runners/<repo> (arborescence « 1 dossier par projet »).

sudo ./setup.sh --dry-run montre ce qui serait fait, sans rien installer.

Vérifier : dans GitHub → repo → Settings → Actions → Runners, le runner apparaît en ligne.


Étape 6 — Premier déploiement

Une fois runner + secrets + proxy en place, il suffit de pousser le code :

  • pousser sur main → déploie la production ;
  • pousser sur dev → déploie le test.

Le déploiement construit les images, applique les migrations de base de données automatiquement, puis démarre l'application.

Vérifier (production) :

1
2
3
curl -I https://transaction.boaz-study.tech/            # -> HTTP/2 200
curl -I https://api-transaction.boaz-study.tech/health  # -> HTTP/2 200
docker ps --filter name=transaction_                    # conteneurs "Up (healthy)"


Étape 7 — Sauvegardes automatiques

  • Une sauvegarde est faite avant chaque déploiement de production.
  • Une sauvegarde complète tourne chaque nuit (tâche planifiée / cron).
  • Pour tout sauvegarder à la main : voir Sauvegarde et restauration.

Problèmes courants

Problème Cause Solution
permission denied sur docker pas dans le groupe docker sudo usermod -aG docker $USER puis newgrp docker
Le site répond en 502 l'application n'est pas encore démarrée docker logs -f transaction_backend (attendre la fin des migrations)
HTTPS invalide certificat pas encore généré voir Domaines et certificats
Le runner n'apparaît pas jeton GitHub expiré régénère le jeton, relance sudo ./install.sh
DNS ne répond pas propagation en cours dig +short domaine, patienter

Checklist finale

  • DNS des 4 adresses OK (dig +short)
  • Pare-feu OVH : SSH + 80 + 443
  • Docker installé, docker ps sans sudo
  • Proxy central + certbot-central en route, réseau proxy-network créé
  • .env.prod et .env.test déposés (droits 600)
  • Runner en ligne dans GitHub
  • Certificats HTTPS générés
  • https://transaction.boaz-study.tech et /health répondent 200
  • Sauvegarde nocturne planifiée