Journal de bord

Comment j'ai construit et déployé ce portfolio

Ce site n'est pas juste une page web : c'est aussi un mini-projet d'administration systèmes et réseaux à part entière. Voici le déroulé réel, y compris les erreurs rencontrées et comment je les ai résolues.

Auteur : Muhammed Lamin Jammeh
Hébergement : Oracle Cloud (Always Free)
Stack : HTML/CSS/JS · Nginx · Ubuntu

01 — Le choix de l'infrastructure

Plutôt que d'héberger ce portfolio sur une plateforme clé-en-main (GitHub Pages, Netlify, etc.), j'ai volontairement choisi de le déployer moi-même sur une VM Oracle Cloud. L'objectif : que le portfolio soit lui-même une preuve de compétences en administration systèmes, pas seulement une vitrine.

Oracle Cloud Always Free Ubuntu 24.04 Nginx Git / GitHub DuckDNS Let's Encrypt

02 — Premier obstacle : capacité et rate limiting Oracle

La création d'une instance VM.Standard.E2.1.Micro a immédiatement échoué avec une erreur de capacité dans l'availability domain AD-1. En retentant plusieurs fois rapidement, j'ai déclenché un rate limit sur l'API Oracle (« Too many requests »).

Problème

Les shapes gratuites d'Oracle Cloud (E2.1.Micro et A1.Flex) sont très demandées et souvent en rupture de capacité dans les régions populaires.

Résolution : attendre entre les tentatives au lieu de retenter en boucle, alterner entre les deux shapes gratuites (leurs pools de capacité sont indépendants), et réessayer à différents moments de la journée. La capacité s'est libérée après plusieurs tentatives espacées.

Ce que ça montre : comprendre les limites d'une plateforme cloud et adapter sa stratégie de retry plutôt que de s'acharner — un réflexe important en administration systèmes.

03 — Nettoyage d'une VM existante

J'avais déjà une VM Oracle utilisée pour un ancien projet (un bot d'automatisation vidéo). Plutôt que de nettoyer manuellement les services, crons et fichiers résiduels — avec le risque d'en oublier un qui continue de tourner en arrière-plan — j'ai choisi de terminer l'instance et d'en recréer une propre.

Ce que ça montre : savoir reconnaître quand une réinstallation propre est plus sûre qu'un nettoyage partiel, surtout sur une machine dont l'historique n'est pas totalement maîtrisé.

04 — Serveur web : Nginx

Une fois la VM provisionnée avec une IP publique, installation de Nginx et configuration du pare-feu — à deux niveaux, ce qui est une source d'erreur classique sur Oracle Cloud :

sudo apt install nginx -y
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow OpenSSH
sudo ufw enable

Oublier l'un des deux niveaux est l'erreur la plus fréquente pour quelqu'un qui découvre Oracle Cloud — les deux pare-feux doivent être ouverts indépendamment.

05 — Déploiement via Git

Le code du site est versionné sur GitHub et déployé sur la VM via git clone / git pull, plutôt que par transfert de fichiers manuel. Cela permet un historique propre et un flux de mise à jour reproductible :

git clone https://github.com/jamehj7-png/portfolio.git
cd portfolio
sudo cp index.html /var/www/html/
Problème

GitHub n'accepte plus l'authentification par mot de passe pour git push. Il faut un Personal Access Token (PAT) avec le scope repo, utilisé à la place du mot de passe.

Une fois le token généré côté GitHub, les mises à jour du site suivent un flux simple : modification en local → commit → push → git pull sur la VM → copie vers /var/www/html/.

06 — Nom de domaine avec DuckDNS

Plutôt que de publier une adresse IP brute, j'ai relié un sous-domaine DuckDNS gratuit (jammehj.duckdns.org) à l'IP publique de la VM. Un script planifié via cron met à jour l'enregistrement DNS toutes les 5 minutes, au cas où l'IP changerait :

*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

07 — HTTPS avec Let's Encrypt

Certificat SSL gratuit et renouvellement automatique via Certbot, branché directement sur la configuration Nginx :

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d jammehj.duckdns.org

Certbot configure automatiquement la redirection HTTP → HTTPS et renouvelle le certificat tous les ~60 jours sans intervention manuelle.

08 — Ce que je retiens

Ce projet vous donne une idée de ma façon de travailler et de résoudre des problèmes concrets.

← Retour au portfolio