2025.04.03 (四)

✨ GPT 摘要  

把技术栈切换为 Flutter Web + Django 组合,并确立整体开发路线图与英语开发环境的一天。

🚀 路线图

Phase 1–4 的逐步 To-Do List,涵盖:

  1. 🧠 项目规划、技术栈选择与域名购买
  2. 🛠️ Flutter Web build + Django static 集成(本地开发)
  3. 🔗 基础 trigger API 实现
  4. 🌐 VPS 部署、Nginx 设置与安全域名服务

✅ PHASE 1 — 初始规划与战略决策

  • 🧠 定义项目范围与安全策略
    • 目标用户:中国境内无证居住的脱北者
    • 目标:提供安全、伪装、基于浏览器的沟通工具
    • UX 策略:模拟计算器界面以隐藏真实功能
  • 🤖 选择 AI 辅助开发方式
    • 使用 GPT-4oo1 协助设计与实现
    • 应用 “Vibe Coding” workflow — 用自然语言和 AI 进行迭代式原型开发
  • ⚙️ 选择技术栈
    • 前端:Flutter Web(用于伪装成计算器的精致 app-like UI)
    • 后端:Django + Django REST Framework(用于结构化 API、内置 admin 与安全)
    • 部署:单个 VPS container,同时提供 Flutter static files 与 Django API
  • 🌐 购买伪装域名
    • 域名:___.net
    • 用途:看起来合理的计算器工具外观
    • 价格:通过韩国注册商购买,₩18,000/year

✅ PHASE 2 — 本地开发:Flutter Web + Django 集成

🔧 1. 项目环境设置

  • 🧱 创建 Django project
    • django-admin startproject stealthcore .
  • ⚙️ 创建 Django app(用于 API)
    • python manage.py startapp api
  • 🧩 将 'api''rest_framework' 添加到 INSTALLED_APPS
  • 🐍 创建 virtual environment 并安装依赖
    • python -m venv venv && source venv/bin/activate
    • pip install django djangorestframework whitenoise

🛠️ 2. Flutter Web Build

  • 💻 初始化 Flutter app
    • flutter create ____web
    • 将默认 UI 替换为 TextFieldSend button
  • 🧪 通过 http.post()/api/check-trigger/ 发送输入
  • 🔨 Build Web output
    • flutter build web
  • 📁 移动 build files
    • 在 Django root 创建 frontend_static/ folder
    • cp -r build/web/* frontend_static/

⚙️ 3. Django Static File Serving

  • 🧷 更新 settings.py

    STATIC_URL = '/static/'
    STATICFILES_DIRS = [ BASE_DIR / 'frontend_static' ]
    
  • (可选)启用 WhiteNoise
    • 'whitenoise.middleware.WhiteNoiseMiddleware' 添加到 MIDDLEWARE
  • 🎛️ 将 build/web/index.html 复制到 templates/index.html
  • 🛠️ 修复 index.html 中的 asset paths:

    <script src="/static/main.dart.js"></script>
    

🔗 4. 连接 Flutter 与 Django

  • 🧪 创建 /api/check-trigger/ endpoint
    • 接收 POST { input: "..." }
    • 如果输入为 '1004',返回 { status: "success" }
  • 🔐 确保前端 source 中不存在 trigger strings
  • 🧪 用 http.post(...) 确认前端集成

✅ PHASE 3 — VPS 部署(Vultr)

🛒 1. 服务器设置

  • 创建 Vultr instance(Ubuntu 22.04,1GB RAM)
  • 🔑 设置 SSH access(ssh root@<ip>
  • 📦 安装依赖:
    • sudo apt update && sudo apt upgrade
    • sudo apt install python3 python3-pip nginx git
    • sudo apt install certbot python3-certbot-nginx

🚀 2. 部署 Django

  • 上传项目(scpgit clone
  • 设置 virtual environment
    • python3 -m venv venv && source venv/bin/activate
    • pip install -r requirements.txt
  • 🔫 安装并测试 Gunicorn
    • pip install gunicorn
    • gunicorn stealthcore.wsgi:application

🌐 3. 使用 Nginx 提供服务

  • 创建 Nginx config:

    server {
        listen 80;
        server_name ___.net;
    
        location /static/ {
            alias /home/youruser/project/frontend_static/;
        }
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
  • 🔐 用 Let’s Encrypt 启用 HTTPS
    • sudo certbot --nginx -d ___.net
  • 🔄 重启 Nginx:
    • sudo systemctl restart nginx

✅ PHASE 4 — 最终测试与加固

  • 💻 访问 https://___.net
    • 确认计算器 UI 成功加载
  • 🔍 在 Flutter input 中输入 '1004' 并发送
    • Django 应返回 { "status": "success" }
  • 🧪 测试无效输入是否返回拒绝消息

✅ 最终备注

  • 🧼 从前端移除所有敏感逻辑
  • 🔒 用 session token validation 保护未来的 API endpoints
  • 🧊 打磨伪装:更新 app icon、page title,并加入假的工具元素
  • 🧠 编写内部文档(deploy.md),使部署可重复

💭 日记

发生了以下几个很大的变化。

  • 路线改成了 Flutter Web(Frontend)+ Django(Backend)。
    • 因为以后开发 app 时,我也打算一直用这样的组合推进。
    • 也因为这两个都是我用过的 framework,所以能期待更快的生产力。
  • 决定所有 Documentation、Comment 和 Commit Message 都用英语编写。
    • 因为用英语写 prompt,多少可以期待一点性能提升。
    • 因为全世界最新的知识大多都是用英语处理的。
    • 因为必须养成经常使用英语的习惯,英语才会变得更熟悉。
  • 决定 Git Commit Message Convention 必须遵循开发行业的标准格式。
    • from

      * 21adba0 25.04.03 Thu <Hyuk Min> Chore | README.md: Add more details to roadmap
      
    • to

      * 21adba0 25.04.03 Thu <Hyuk Min> docs(README): add more details to roadmap
      
    • 因为如果不是打算一辈子都当独立一人开发者,就应该提前养成遵循行业标准的习惯。
    • 因为以后如果使用 Change log 相关程序,只有标准格式才能被正确 parsing。

单看路线图本身,感觉已经产出了足够好跟着做的 guideline。

明天继续接受 GPT feedback,把它打磨一下,然后照着执行吧。

留下评论