[🛠] Secret Messenger 开发日志 #2:Flutter Web + Django、Roadmap、English
✨ GPT 摘要
把技术栈切换为 Flutter Web + Django 组合,并确立整体开发路线图与英语开发环境的一天。
🚀 路线图
Phase 1–4 的逐步 To-Do List,涵盖:
- 🧠 项目规划、技术栈选择与域名购买
- 🛠️ Flutter Web build + Django static 集成(本地开发)
- 🔗 基础 trigger API 实现
- 🌐 VPS 部署、Nginx 设置与安全域名服务
✅ PHASE 1 — 初始规划与战略决策
-
🧠 定义项目范围与安全策略
- 目标用户:中国境内无证居住的脱北者
- 目标:提供安全、伪装、基于浏览器的沟通工具
- UX 策略:模拟计算器界面以隐藏真实功能
-
🤖 选择 AI 辅助开发方式
- 使用 GPT-4o 和 o1 协助设计与实现
- 应用 “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 替换为
TextField和Sendbutton
-
-
🧪 通过
http.post()向/api/check-trigger/发送输入 -
🔨 Build Web output
-
flutter build web
-
-
📁 移动 build files
-
在 Django root 创建
frontend_static/folder -
cp -r build/web/* frontend_static/
-
在 Django root 创建
⚙️ 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" }
-
接收 POST
- 🔐 确保前端 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
-
上传项目(
scp或git 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" }
-
Django 应返回
- 🧪 测试无效输入是否返回拒绝消息
✅ 最终备注
- 🧼 从前端移除所有敏感逻辑
- 🔒 用 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,把它打磨一下,然后照着执行吧。
留下评论