2025.04.17 (Jeu)

✨ Résumé de GPT  

Une journée où j’ai réussi à configurer la connexion SSH, puis à intégrer un script shell écrit auparavant pour automatiser la configuration de l’environnement VPS. Grâce à cela, le temps de préparation de l’environnement projet Flutter+Django a été radicalement réduit.


💭 Journal

Donc se connecter à un serveur distant par SSH, c’était aussi simple que ça ? Avec l’aide de GPT, ça s’est fait rapidement, sans blocage. Avant, je mélangeais sans cesse les concepts, j’oubliais des trucs, c’était n’importe quoi…

Et après la réussite de la connexion SSH, j’ai juste fait “clic” sur le script d’automatisation que j’avais écrit avant, et toute la configuration d’environnement a réussi d’un coup lol

Comme prévu, même les trucs qui ressemblent à du bricolage inutile finissent par servir plus tard, hein ?


🚀 Roadmap

Plan d’exécution pour une messagerie Flutter Web + Django sécurisée et déguisée, destinée à des personnes très surveillées et à haut risque en Chine continentale — en particulier des évadés nord-coréens sans papiers — où la dissimulation et la protection des données sont primordiales. L’application est camouflée en calculatrice en ligne basique tout en fournissant, en dessous, du chat en temps réel, du partage de fichiers et des diffusions d’informations à sens unique.


✅ Phase 1 — Planification et architecture

  • 🧠 Définir l’objectif du projet et le modèle de menace
    • Public : évadés nord-coréens sans papiers en Chine
    • Mission : outil de messagerie sécurisé, déguisé, basé sur le navigateur et sans installation
    • Déguisement UX : interface de style calculatrice
  • 🤖 Sélectionner un workflow de dev piloté par AI
    • Utiliser GPT-4o + o1 pour la conception, le codegen et l’itération
    • Suivre le “Vibe Coding” -> dev rapide en langage naturel via AI
  • ⚙️ Finaliser la stack technique
    • Frontend : Flutter Web (Material 3, go_router, Riverpod, http)
    • Backend : Django + Django REST Framework (Django 5.x)
    • Déploiement : conteneur VPS unique (statique + API), avec proxy Cloudflare optionnel
  • 🌐 Acquérir le domaine
    • Domaine : ___.net
    • Coût : ₩18,000/an via un bureau d’enregistrement coréen
    • Objectif : camouflage visuel en calculatrice en ligne

✅ Phase 2 — Configuration VPS et déploiement de base

  • 💳 Créer un compte Vultr et payer $10.

  • 🛒 Créer une instance VPS
    • Région : Singapore (meilleure performance GFW sur Vultr)
    • OS : Ubuntu 22.04 x64
    • Plan : 1vCPU / 1 Go RAM ($5/mois)
    • Configuration par clé SSH ou mot de passe
  • 🔑 Fluidifier la connexion SSH Mac <-> serveur
    • Générer une clé ed25519 sur le MacBook et la charger dans l’agent

      ssh-keygen -t ed25519 -C "___-remote"
      ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<IP>
      
    • À partir de maintenant : ssh root@<IP> -> demande de phrase de passe -> connexion instantanée

  • 🐚 Bootstrap de l’environnement shell sur le VPS
    • Cloner le dépôt personnel de dotfiles et lancer le script de configuration

      git clone https://github.com/JUD210/dev-settings-backup.git ~/dev-settings-backup
      cd ~/dev-settings-backup
      chmod +x init_my_shell.sh && ./init_my_shell.sh
      
    • Le script installe / vérifie zsh, Oh-My-Zsh, Powerlevel10k, relie .zshrc, .vimrc, .gitconfig, et définit zsh comme shell par défaut.
    • Il vérifie aussi que des outils CLI essentiels comme less et git sont installés
  • 🔐 Accéder au VPS et l’initialiser
    • Se connecter et installer les paquets essentiels (si le script bootstrap ne l’a pas déjà fait)

      ssh root@<IP>
      apt update && apt upgrade -y
      apt install python3-pip python3-venv nginx ufw -y
      ufw allow OpenSSH && ufw allow 'Nginx Full' && ufw enable
      
  • 📁 Préparer le répertoire projet et le virtualenv

    mkdir /srv/___ && cd /srv/___
    python3 -m venv venv && source venv/bin/activate
    pip install django djangorestframework whitenoise gunicorn
    

Note : Un proxy Cloudflare est recommandé pour masquer l’IP du VPS et absorber les DDoS.


✅ Phase 3 — Initialisation du projet (Django + Flutter)

🔧 Configuration Django

  • django-admin startproject stealthcore .
    • Crée le dossier stealthcore/ et manage.py dans /srv/___.
  • python manage.py startapp api
    • Crée le dossier api/ pour votre logique personnalisée (gestion des messages, uploads de fichiers, annonces de diffusion, etc.).
  • Ajouter 'api', 'rest_framework' à INSTALLED_APPS
    • Dans stealthcore/stealthcore/settings.py, par exemple :

      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'rest_framework',  # Add
          'api',            # Add
      ]
      
  • python manage.py migrate
    • Crée les tables initiales de la base de données (SQLite par défaut).
  • python manage.py createsuperuser
    • Permet d’accéder au panneau d’administration de Django (optionnel mais recommandé).

Extensions futures :

  • /api/messages/ pour le chat de groupe avec TTL
  • /api/upload/ pour le partage de fichiers (suppression automatique)
  • /api/notice/ pour les messages de diffusion administrateur

🛠️ Configuration Flutter Web

  • flutter create ___web
    • Produit un projet Flutter Web de base.
  • Remplacer l’UI par une mise en page de style calculatrice
    • Exemple minimal dans main.dart :

      TextField(
        onChanged: (val) {
          // store user input
        },
      );
      ElevatedButton(
        onPressed: () {
          // call /api/check-trigger/
        },
        child: Text("Send"),
      );
      
    • En pratique, implémenter un pavé numérique, de l’arithmétique basique, etc.

  • Connecter la requête POST à /api/check-trigger/
    • Avec http :

      final response = await http.post(
        Uri.parse('/api/check-trigger/'),
        body: {'input': userInput},
      );
      
    • Si valide, le backend émet un jeton -> Flutter charge l’UI cachée de la messagerie.

  • flutter build web
    • Compile votre app Flutter vers build/web/.
  • Copier les fichiers :

    mkdir frontend_static/
    cp -r build/web/* frontend_static/
    
    • Ceux-ci peuvent être servis par Nginx ou par WhiteNoise de Django.

✅ Phase 4 — API de déclenchement et intégration Flutter

  • Dans Django api/views.py :

    from rest_framework.decorators import api_view
    from rest_framework.response import Response
    import os
    
    @api_view(['POST'])
    def check_trigger(request):
        # Production: store real trigger in os.environ or DB
        valid_trigger = os.environ.get('___TRIGGER', '1004')
        if request.data.get('input') == valid_trigger:
            return Response({'status': 'success', 'token': 'XYZ'})
        return Response({'status': 'denied'})
    
  • Créer /api/urls.py et enregistrer la route

    from django.urls import path
    from .views import check_trigger
    
    urlpatterns = [
        path('check-trigger/', check_trigger, name='check-trigger'),
    ]
    
  • Connecter depuis Flutter avec http.post(...)
    • Si "success", stocker le jeton en mémoire (Riverpod) -> afficher l’UI cachée
    • Si "denied", rester une simple calculatrice
  • Vérifier qu’aucune logique sensible n’existe dans le frontend
    • Toutes les valeurs secrètes (comme le code de déclenchement) vivent sur le serveur.

✅ Phase 5 — Hébergement Nginx & HTTPS

  • Créer la config Nginx :

    server {
        listen 80;
        server_name ___.net;
    
        location /static/ {
            alias /srv/___/frontend_static/;
        }
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
  • Activer la config et redémarrer :

    ln -s /etc/nginx/sites-available/___/etc/nginx/sites-enabled/
    nginx -t && systemctl restart nginx
    
  • Activer HTTPS :

    apt install certbot python3-certbot-nginx -y
    certbot --nginx -d ___.net
    
    • Installe un certificat Let’s Encrypt pour ___.net.
    • Ensuite, https://___.net doit servir la calculatrice déguisée.

Gunicorn & systemd

  • En production, exécuter Django avec Gunicorn derrière Nginx :

    gunicorn stealthcore.wsgi:application --bind 127.0.0.1:8000
    
  • Créer un /etc/systemd/system/gunicorn.service pour redémarrer automatiquement au reboot.


✅ Phase 6 — Tests finaux et durcissement du déguisement

  • 🧪 Tester l’UI et le déclencheur
    • Visiter https://___.net
    • Saisir 1004 (ou le vrai déclencheur) -> vérifier {"status":"success"} + jeton
    • Saisie invalide -> {"status":"denied"}
  • 🔒 Nettoyer le frontend
    • Retirer toutes les références à “chat” ou “trigger”
    • Aucun secret ni jeton hardcodé
    • Usage minimal de localStorage pour les sessions éphémères
  • 🧊 Peaufiner le déguisement final
    • Fausse identité visuelle de calculatrice (titre, icône, etc.)
    • Arithmétique réelle (optionnelle), pour qu’elle soit pleinement plausible comme calculatrice
    • Alignement UI, thème et style final
  • 🧠 Créer deploy.md (doc interne)
    • Déployer, mettre à jour, rollback et vérifier
    • Résumer les variables d’environnement (___TRIGGER, SECRET_KEY)
    • Inclure les bonnes pratiques de sécurité et de journalisation

🔮 Fonctionnalités futures

  • 📥 Info Board (annonces en lecture seule)
  • 💬 Group Chat avec suppression des messages basée sur TTL
  • 📁 File Sharing (expiration automatique pour la sécurité)
  • 🔥 Auto-Deletion via cron/commande de gestion pour les données expirées
  • 🌐 Cloudflare Proxy pour masquer l’IP du VPS et atténuer les DDoS

Utiliser cette roadmap pour guider le développement de bout en bout de ___ — de la configuration initiale du VPS jusqu’à la production finale.—


👀 Git Log

Date Type Message
25.04.17 Thu docs(roadmap) refine Phase 2 with SSH setup and bootstrap script integration (HEAD -> main, origin/main)
25.04.13 Sun docs(roadmap) refine and finalize Phase 1–6 plan for secure disguised messenger
25.04.03 Thu docs(roadmap) edit full Phase 0–3 checklist for Flutter Web + Django deployment
25.04.03 Thu docs add dev-principles and roadmap with links from README
25.04.03 Thu docs(README) add more details to roadmap
25.04.03 Thu docs(README) change backend from Node to Django, and change from Kor to Eng
25.04.02 Wed docs(README) add minor details for user
25.04.01 Tue docs(README) add description, tech stack, features, roadmap, …
25.04.01 Tue - Initial commit

Laisser un commentaire