2025.04.17 (Jue)

✨ Resumen de GPT  

Un día en que logré configurar la conexión SSH e integrar un shell script escrito antes para automatizar la preparación del entorno VPS. Gracias a eso, la preparación del entorno del proyecto Flutter+Django se acortó drásticamente.


💭 Diario

¿Conectarse a un servidor remoto por SSH era así de fácil? Con ayuda de GPT, se resolvió rápido y sin atascarse. Antes confundía conceptos, se me olvidaban cosas y todo era un desastre…

Y después de lograr la conexión SSH, hice “clic” con el script de automatización que había escrito antes y conseguí configurar todo el entorno de una sola vez jajaja

Claro, incluso las cosas que parecen tonterías acaban siendo útiles así más adelante, ¿no?


🚀 Roadmap

Plan de ejecución para un mensajero seguro y disfrazado con Flutter Web + Django, dirigido a personas de alto riesgo y fuertemente vigiladas en China continental —específicamente desertores norcoreanos indocumentados— donde el ocultamiento y la protección de datos son esenciales. La aplicación se camufla como una calculadora online básica, mientras por debajo ofrece chat en tiempo real, intercambio de archivos y difusiones unidireccionales de información.


✅ Phase 1 — Planificación y arquitectura

  • 🧠 Definir objetivo del proyecto y modelo de amenazas
    • Público: desertores norcoreanos indocumentados en China
    • Misión: herramienta de mensajería segura, disfrazada, basada en navegador y sin instalación
    • Disfraz UX: interfaz estilo calculadora
  • 🤖 Seleccionar flujo de desarrollo impulsado por IA
    • Usar GPT-4o + o1 para diseño, generación de código e iteración
    • Seguir “Vibe Coding” → desarrollo rápido en lenguaje natural mediante IA
  • ⚙️ Finalizar stack técnico
    • Frontend: Flutter Web (Material 3, go_router, Riverpod, http)
    • Backend: Django + Django REST Framework (Django 5.x)
    • Despliegue: un único contenedor VPS (estáticos + API), con proxy Cloudflare opcional
  • 🌐 Adquirir dominio
    • Dominio: ㅇㅇㅇ.net
    • Costo: ₩18,000/año mediante registrador coreano
    • Propósito: camuflaje visual como calculadora online

✅ Phase 2 — Configuración de VPS y despliegue base

  • 💳 Crear una cuenta en Vultr y pagar $10.

  • 🛒 Crear una instancia VPS
    • Región: Singapur (mejor rendimiento GFW en Vultr)
    • OS: Ubuntu 22.04 x64
    • Plan: 1vCPU / 1GB RAM ($5/mes)
    • Configuración de clave SSH o acceso por contraseña
  • 🔑 Simplificar el inicio de sesión SSH Mac ↔ servidor
    • Generar una clave ed25519 en el MacBook y cargarla en el agente

      ssh-keygen -t ed25519 -C "ㅇㅇㅇ-remote"
      ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<IP>
      
    • A partir de ahora: ssh root@<IP> → solicitud de passphrase → login instantáneo

  • 🐚 Bootstrap del entorno shell en el VPS
    • Clonar el repo personal de dotfiles y ejecutar el script de setup

      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
      
    • El script instala / comprueba zsh, Oh‑My‑Zsh, Powerlevel10k, enlaza .zshrc, .vimrc, .gitconfig y configura zsh como shell predeterminado.
    • También asegura que herramientas CLI esenciales como less y git estén instaladas
  • 🔐 Acceder e inicializar el VPS
    • Iniciar sesión e instalar paquetes esenciales (si el script bootstrap no los gestionó ya)

      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
      
  • 📁 Preparar directorio del proyecto y virtualenv

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

Nota: Se recomienda un proxy Cloudflare para ocultar la IP del VPS y absorber DDoS.


✅ Phase 3 — Inicialización del proyecto (Django + Flutter)

🔧 Configuración de Django

  • django-admin startproject stealthcore .
    • Crea la carpeta stealthcore/ y manage.py dentro de /srv/ㅇㅇㅇ.
  • python manage.py startapp api
    • Crea la carpeta api/ para tu lógica personalizada (gestión de mensajes, subida de archivos, avisos broadcast, etc.).
  • Añadir 'api', 'rest_framework' a INSTALLED_APPS
    • En stealthcore/stealthcore/settings.py, por ejemplo:

      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
    • Crea las tablas iniciales de la base de datos (SQLite por defecto).
  • python manage.py createsuperuser
    • Te permite acceder al panel de administración de Django (opcional pero recomendado).

Expansiones futuras:

  • /api/messages/ para chat grupal con TTL
  • /api/upload/ para compartir archivos (borrado automático)
  • /api/notice/ para mensajes broadcast de administrador

🛠️ Configuración de Flutter Web

  • flutter create ㅇㅇㅇ_web
    • Genera un proyecto básico de Flutter Web.
  • Reemplazar la UI por un layout estilo calculadora
    • Ejemplo mínimo en main.dart:

      TextField(
        onChanged: (val) {
          // store user input
        },
      );
      ElevatedButton(
        onPressed: () {
          // call /api/check-trigger/
        },
        child: Text("Send"),
      );
      
    • De forma realista, implementar teclado numérico, aritmética básica, etc.

  • Conectar solicitud POST a /api/check-trigger/
    • Usando http:

      final response = await http.post(
        Uri.parse('/api/check-trigger/'),
        body: {'input': userInput},
      );
      
    • Si es válido, el backend emite un token → Flutter carga la UI oculta del mensajero.

  • flutter build web
    • Compila tu app Flutter a build/web/.
  • Copiar archivos:

    mkdir frontend_static/
    cp -r build/web/* frontend_static/
    
    • Esto puede servirse mediante Nginx o WhiteNoise de Django.

✅ Phase 4 — API de disparador e integración con Flutter

  • En 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'})
    
  • Crear /api/urls.py y registrar la ruta

    from django.urls import path
    from .views import check_trigger
    
    urlpatterns = [
        path('check-trigger/', check_trigger, name='check-trigger'),
    ]
    
  • Conectar desde Flutter con http.post(...)
    • Si es "success", guardar token en memoria (Riverpod) → mostrar UI oculta
    • Si es "denied", permanecer como una simple calculadora
  • Asegurar que no haya lógica sensible en el frontend
    • Todos los valores secretos (como el código disparador) viven en el servidor.

✅ Phase 5 — Hosting con Nginx y HTTPS

  • Crear configuración de 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;
        }
    }
    
  • Habilitar configuración y reiniciar:

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

    apt install certbot python3-certbot-nginx -y
    certbot --nginx -d ㅇㅇㅇ.net
    
    • Instala el certificado de Let’s Encrypt para ㅇㅇㅇ.net.
    • Después, https://ㅇㅇㅇ.net debería servir tu calculadora disfrazada.

Gunicorn & systemd

  • En producción, ejecutar Django con Gunicorn detrás de Nginx:

    gunicorn stealthcore.wsgi:application --bind 127.0.0.1:8000
    
  • Crear un /etc/systemd/system/gunicorn.service para reinicio automático al arrancar.


✅ Phase 6 — Pruebas finales y endurecimiento del disfraz

  • 🧪 Probar UI y disparador
    • Visitar https://ㅇㅇㅇ.net
    • Introducir 1004 (o disparador real) → verificar {"status":"success"} + token
    • Entrada inválida → {"status":"denied"}
  • 🔒 Limpiar frontend
    • Eliminar todas las referencias a “chat” o “trigger”
    • Sin secretos ni tokens hardcodeados
    • Uso mínimo de localStorage para sesiones efímeras
  • 🧊 Pulido final del disfraz
    • Branding falso de calculadora (título, icono, etc.)
    • Aritmética real (opcional) para que sea plenamente plausible como calculadora
    • Alineación de UI, theming y estilos finales
  • 🧠 Crear deploy.md (documento interno)
    • Cómo desplegar, actualizar, hacer rollback y verificar
    • Resumir variables de entorno (ㅇㅇㅇ_TRIGGER, SECRET_KEY)
    • Incluir buenas prácticas de seguridad y logging

🔮 Funciones futuras

  • 📥 Panel de información (avisos de solo lectura)
  • 💬 Chat grupal con borrado de mensajes basado en TTL
  • 📁 Compartir archivos (autoexpiración por seguridad)
  • 🔥 Borrado automático mediante cron/management command para datos expirados
  • 🌐 Proxy Cloudflare para ocultar la IP del VPS y mitigar DDoS

Usar esta hoja de ruta para guiar el desarrollo end-to-end de ㅇㅇㅇ, desde la configuración inicial del VPS hasta la producción final.—


👀 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

Deja un comentario