React/TypeScript/Vite/Tailwind prototype from the design session (login, dashboard, photos, backups, settings views with mocked API layer). Infra work (Rust services, Ansible, OpenTofu) follows in subsequent commits. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
4.7 KiB
Handoff — Tripoli Cloud
À coller dans la nouvelle session Claude Code locale (CLI, sur votre Mac) pour lui redonner le contexte. Cette session cloud n'a aucune persistance au-delà de cette conversation.
Ce qui est fait (session cloud, non déployé)
- Prototype Claude Design (
Tripoli Cloud.dc.html) implémenté en React + TypeScript + Vite + Tailwind dansapp/. - Vues : Login/Signup (glassmorphism sombre, cross-fade bg), Dashboard (stats, upload simulé, fichiers grille/liste), Photos, Sauvegardes, Réglages (3 onglets), bouton "Visiter en tant qu'invité", aucune mention famille.
- Architecture :
src/api/(mocks typés async),src/types.ts,src/contexts/(Theme/Session/Navigation),src/hooks/, composants par domaine. npm run buildpasse, testé au navigateur (dark/light, mobile drawer, 4 vues) — captures OK.- Rien n'est commité au git de ce repo, aucun remote configuré, rien n'est déployé. Le zip joint contient tout
app/(sans node_modules/dist) — faitesnpm installaprès extraction.
Ce qui reste : déploiement infra réelle (PAS fait, PAS commencé)
Brief complet donné par vous plus tôt dans cette session — reproduit tel quel :
Brief technique — Tripoli Cloud v1 — déploiement sur Hetzner CPX22 (eu-central)
CONTEXTE : Projet personnel réel (cloud familial : photos, backup, partage de fichiers), construit pour démontrer des compétences SRE proches de la stack de Clever Cloud (Rust, netlink, WireGuard, GitLab CI). Un seul VPS, pas un cluster. Sois honnête dans le code et les commentaires sur cette limite, ne simule jamais un comportement multi-nœuds/multi-DC.
CONTRAINTES NON NÉGOCIABLES
- 1 seul serveur (CPX22, 2 vCPU, 80 Go disque). Pas de virtualisation imbriquée disponible : NE TENTE PAS de mise en place KVM/QEMU sur ce serveur, ce n'est pas possible chez Hetzner Cloud.
- Tout le code métier (edge, API, orchestrateur réseau) en Rust. Pas d'application open source clé en main (pas de Nextcloud/Seafile/etc.) pour le service principal.
- Code commenté et compréhensible : je dois pouvoir défendre chaque ligne en entretien technique, n'utilise pas d'abstractions opaques.
- Avance phase par phase, commit GitLab à la fin de chaque phase, attends ma validation avant de passer à la phase suivante. N'exécute aucune commande destructive sur le serveur sans me l'expliquer avant.
SERVEUR IP : 65.109.142.188 Utilisateur : root Clé SSH : cherche une clé nommée "hetzner-2026" (probablement dans ~/.ssh/) et utilise-la pour la connexion. Domaine : tripoli.cloud (DNS à pointer vers l'IP ci-dessus)
PHASE 0 — Connexion & reconnaissance : SSH avec la clé hetzner-2026 sur root@65.109.142.188. Explorer avant toute action (OS, paquets, services, ports, disque, utilisateurs, /etc). Rapport avant d'agir.
PHASE 1 — Socle & sécurité : firewall (nftables/ufw, seulement 80/443/WireGuard en entrée), WireGuard (serveur + peer admin Mac, vérifier le tunnel AVANT de fermer SSH public), Ansible (rôle de base), OpenTofu (serveur + DNS en code).
PHASE 2 — Edge proxy (mini-Sōzu) : projet Rust
tripoli-edge(TLS Let's Encrypt, routage par Host header, logs structurés,/metrics).PHASE 3 — API backend : projet Rust
tripoli-api(axum/actix-web) : auth, upload/download, métadonnées PostgreSQL (sqlx), blobs disque ou Hetzner Object Storage, progression d'upload réelle.PHASE 4 — Réseau bas niveau : projet Rust
tripoli-netctl(cratertnetlink) : network namespace + veth par service, audit-logué, documenté comme labo pédagogique un-seul-poste.PHASE 5 — Observabilité : Prometheus + Grafana (dashboards versionnés), alertes disque plein / service down.
PHASE 6 (bonus) : Bird (BGP/BFD) entre les namespaces de la Phase 4, présenté comme labo, pas comme failover de prod.
CI/CD :
.gitlab-ci.yml(build cargo+npm, test cargo, deploy rsync/scp + redémarrage systemd, unit files versionnés).LIVRABLE FINAL : README avec schéma d'architecture, ce qui est réellement en place vs simulé, limites assumées (1 VPS, pas de KVM).
Contexte de sécurité important
- Ce brief avait été collé une première fois en réponse à une question sans rapport (emplacement du dossier du projet React), ce qui ressemblait à une confusion ou un copier-coller involontaire. Vous avez ensuite confirmé explicitement vouloir bien lancer ce déploiement.
- Aucune commande destructive (fermeture SSH publique, etc.) ne doit être exécutée sans explication préalable, comme précisé dans votre propre brief.
- Vérifiez vous-même, avant de lancer la session locale, que la clé "hetzner-2026" existe bien dans
~/.ssh/sur votre Mac et que l'IP/le domaine sont corrects.