keryan.net — Portfolio actuel
Portfolio personnel self-hosted sur VPS, accessible publiquement. Présente l'ensemble du parcours BTS SIO, les réalisations professionnelles, et sert de support numérique pour l'épreuve E5.
Structure recommandée pour l'épreuve E5 : 10 min présentation du parcours de professionnalisation + 5 min transition vers l'échange jury (30 min). Utilise le portfolio comme fil conducteur.
Introduction — Parcours et contexte
« Je m'appelle Keryan, je suis en BTS SIO option SLAM en alternance chez [entreprise]. Mon parcours couvre à la fois le développement applicatif en entreprise et des projets personnels de formation. Je vais vous présenter mes réalisations professionnelles à travers mon portfolio disponible en ligne sur keryan.net. »
WAChangeLogUrgence — Réalisation principale (alternance)
« En alternance, j'ai développé WAChangeLogUrgence, une application web de gestion des notes de mise à jour des logiciels internes. »
- Architecture découplée : API REST ASP.NET Core 8 (C#) + SPA Angular 17
- Authentification stateless par JWT (access token 15 min + refresh token 7 jours)
- Entity Framework Core comme ORM, base MySQL, migrations versionnées
- Pattern MVC côté API : Controller renvoie du JSON, la View est Angular
Modifications WinDev — Maintenance applicative (alternance)
« Parallèlement, j'ai assuré la maintenance corrective et évolutive des logiciels Urgence et Akosone développés en WinDev 27. »
- Analyse des rapports de bugs, reproduction, correction, tests, livraison
- Évolutions fonctionnelles à la demande des utilisateurs métier
GSB — Projet formation fil rouge BTS SIO
« En formation, j'ai réalisé GSB, l'application de gestion des frais des visiteurs médicaux du Laboratoire Galaxy Swiss Bourdin. »
- Architecture MVC en PHP 8, accès BDD via PDO (requêtes préparées, protection injection SQL)
- Authentification par sessions PHP, mots de passe hashés en SHA-256
- Gestion des états de fiche (CR → VA → RB), génération PDF avec cache via TCPDF
- Tests unitaires PHPUnit, documentation auto phpDocumentor
Nolark & Ancien portfolio — Projets de formation front-end
« En début de formation, j'ai réalisé deux projets front-end statiques pour acquérir les fondamentaux. »
- Nolark : site vitrine HTML5 sémantique, CSS3 Flexbox, responsive design avec media queries
- Ancien portfolio : portfolio sur GitHub Pages, Bootstrap, formulaire de contact
- Ces projets posent les bases qui me permettent aujourd'hui de lire et comprendre le HTML/CSS généré par Angular
Portfolio actuel keryan.net — Infrastructure et self-hosting
« Pour héberger et présenter l'ensemble de ces réalisations, j'ai déployé ce portfolio sur un VPS self-managed. »
- Serveur web Nginx en reverse proxy, certificat HTTPS Let's Encrypt
- Authentification centralisée Authelia SSO (2FA TOTP) sur les zones privées
- Démos live des projets accessibles derrière Authelia :
/wachangelog-demo/,/gsb/,/nolark/ - Site statique HTML/CSS/JS pur, sans framework — CSS variables, mode jour/nuit, slider d'images
- Favicon SVG, CSP headers, HSTS, balises Open Graph
Progression et fil conducteur
« Ce qui relie tous ces projets, c'est une progression logique des compétences : »
- HTML/CSS statique (Nolark, ancien portfolio) → bases front-end
- PHP/MySQL/MVC (GSB) → introduction au back-end, sessions, ORM
- WinDev (alternance) → maintenance d'un existant, relation client interne
- ASP.NET Core + Angular + JWT (WAChangeLogUrgence) → architecture professionnelle découplée
- Nginx + Authelia + VPS (portfolio) → infrastructure, sécurité, self-hosting
Conclusion + ouverture vers l'échange
« L'ensemble de ces réalisations est consultable en ligne sur keryan.net/projet/. Chaque fiche projet détaille les compétences mobilisées, les choix techniques et les alternatives envisagées. Je suis prêt à approfondir n'importe lequel de ces points. »
- Proposer au jury d'accéder au portfolio en direct si possible
- Avoir les démos prêtes : WAChangeLog (
keryan/Test1234!), GSB (p.ayot/xiej3uuY0) - Tableau de synthèse prêt (annexe 8-1)
VPS plutôt que GitHub Pages
GitHub Pages héberge uniquement du statique. Le VPS permet d'exécuter PHP, .NET, des conteneurs Docker — nécessaire pour les démos live des projets. Coût : ~5€/mois, compétence infra en prime.
Nginx plutôt qu'Apache
Nginx consomme moins de mémoire en charge, gère mieux les connexions concurrentes, et sa syntaxe de configuration est plus lisible pour les proxys. Choix standard en production moderne.
Authelia plutôt qu'un simple .htpasswd
Authelia apporte le SSO (une seule authentification pour tous les services), le 2FA TOTP, et des règles d'accès par chemin URL. .htpasswd ne gère qu'un mot de passe basique sans 2FA.
CSS pur plutôt que Bootstrap
CSS variables natives (var(--bg)), Grid et Flexbox couvrent tous les besoins sans dépendance externe. Bootstrap aurait ajouté ~150 Ko inutiles. Résultat : site plus rapide et CSS entièrement maîtrisé.
| Bloc de compétence | Application dans le portfolio |
|---|---|
| Développer la présence en ligne de l'organisation | Portfolio public HTTPS sur keryan.net. Balises Open Graph, canonical, robots.txt, favicon SVG. Mise en valeur du parcours professionnel et des réalisations accessibles en ligne. |
| Gérer le patrimoine informatique | Configuration Nginx avec règles d'accès par chemin, headers de sécurité (CSP, HSTS, X-Frame-Options). Gestion des services auto-hébergés via Authelia. Certificat SSL Let's Encrypt avec renouvellement automatique. |
| Mettre à disposition un service informatique | Déploiement des démos projets sur le même VPS (WAChangeLog, GSB, Nolark). Tests de bon fonctionnement. Documentation d'accès (identifiants démo) disponible sur chaque fiche projet. |
| Organiser son développement professionnel | Identité professionnelle visible publiquement (GitHub, LinkedIn, email). Portfolio évolutif qui documente la progression des compétences. Veille active sur les pratiques web modernes (CSS variables, SVG, sécurité HTTP). |
| Travailler en mode projet | Conception et réalisation du portfolio itérativement : version statique simple → ajout des sliders d'images → mode théâtre → fiches projet E5 → self-hosting avec Authelia. |
1. Qu'est-ce qu'un reverse proxy ?
Un proxy classique se place entre le client et internet (ex : proxy d'entreprise qui filtre les sites). Un reverse proxy se place entre internet et les serveurs internes. Le client ne parle qu'au reverse proxy — il ne sait pas qu'il y a plusieurs applications derrière.
Avantages : un seul port 443 exposé, HTTPS centralisé sur Nginx (les apps internes tournent en HTTP simple), routing par chemin URL, headers de sécurité ajoutés en un seul endroit.
2. Configuration Nginx — comment ça marche vraiment
Nginx lit les blocs location selon un ordre de priorité strict : exact match = > préfixe prioritaire ^~ > regex ~ > préfixe simple.
alias vs root : avec root /var/www/gsb/public, Nginx cherche /var/www/gsb/public/gsb/index.php (chemin doublé). Avec alias /var/www/gsb/public/, il remplace le préfixe /gsb/ par le chemin physique → correct.
3. HTTPS avec Let's Encrypt
Let's Encrypt est une autorité de certification gratuite. L'outil certbot génère un certificat TLS valide 90 jours et le renouvelle automatiquement via un cron.
Comment ça fonctionne : lors du handshake TLS, le navigateur vérifie que le certificat est signé par une autorité reconnue (Let's Encrypt → ISRG Root X1). Le contenu est ensuite chiffré via AES. Sans HTTPS, n'importe qui sur le réseau pourrait lire les tokens JWT ou les mots de passe en transit.
4. Authelia — SSO et 2FA, comment ça s'intègre à Nginx
Authelia est un serveur d'authentification. Il ne sert pas les pages lui-même — il répond uniquement à une question : « cet utilisateur est-il connecté et autorisé à accéder à cette URL ? ». C'est Nginx qui l'interroge via la directive auth_request.
Flux complet — accès à /gsb/ sans être connecté :
Le snippet nginx qui déclenche tout ça (/etc/nginx/snippets/authelia-authrequest.conf) :
L'endpoint de vérification interne (location /authelia/api/verify, marqué internal = inaccessible depuis le navigateur) :
5. Headers de sécurité HTTP
6. Problèmes rencontrés et solutions
🔴 Problème — La favicon était interceptée par le proxy Authelia
La règle Nginx location ~ ^/(favicon) capturait /favicon.svg et la renvoyait vers le proxy de la homepage (port 7575), qui répondait avec une redirection 302 vers Authelia. La favicon n'apparaissait jamais.
✅ Solution — Exact match prioritaire
Ajout d'une règle location = /favicon.svg (exact match =) avant la regex. En Nginx, = a priorité absolue sur ~, donc le fichier statique est servi directement sans passer par Authelia.
🔴 Problème — alias + PHP-FPM : chemin SCRIPT_FILENAME incorrect
Avec root /var/www/gsb/public et l'URL /gsb/index.php, Nginx construisait le chemin /var/www/gsb/public/gsb/index.php qui n'existe pas. PHP-FPM retournait une 404.
✅ Solution — Utiliser alias + $request_filename
Avec alias /var/www/gsb/public/, Nginx remplace le préfixe /gsb/ par le chemin physique. fastcgi_param SCRIPT_FILENAME $request_filename récupère alors le bon chemin résolu.
🔴 Problème — Le JavaScript du slider Nolark ne s'exécutait pas
Le bloc (function() { makeSlider(...) })() était inséré dans le HTML sans balises <script></script>. Le navigateur l'ignorait complètement, les flèches et le bouton expand ne répondaient pas.
✅ Solution — Balises script manquantes
Ajout de <script> avant l'IIFE et </script> après. Diagnostic : inspection du DOM avec les DevTools du navigateur → onglet Sources → le code JS n'apparaissait pas dans les scripts chargés.
🔴 Problème — auth_request renvoyait 500 sur certaines routes
Lorsqu'Authelia n'était pas encore démarré ou que son socket était inaccessible, Nginx renvoyait une erreur 500 au lieu d'une redirection propre vers le portail de login.
✅ Solution — Vérifier l'ordre de démarrage des services
Authelia doit être démarré avant Nginx. Dans systemd, configurer After=authelia.service dans l'unité Nginx. Vérifier avec systemctl status authelia que le service est active (running) avant de recharger Nginx.