2025.04.17 (木)

✨ GPTの要約  

SSH接続設定に成功し、以前に書いておいたシェルスクリプトを連携させて、VPS環境の自動セットアップに成功した一日。そのおかげでFlutter+Djangoプロジェクト環境の準備速度が劇的に短縮された。


💭 日記

SSH接続でリモートサーバーに入るのって、こんなに簡単だったんだな? GPTに助けてもらったら、詰まることなくすぐできてしまった。昔は概念をごちゃごちゃにしたり、忘れたり、めちゃくちゃだったのに…

そしてSSH接続に成功した後は、前に組んでおいた自動化スクリプトを「カチッ」と実行して、いろんな環境設定を一発で成功。笑

やっぱり、無駄な寄り道みたいに見えても、あとでこうやって全部役に立つんだよな?


🚀 Roadmap

中国本土で厳しい監視下に置かれた高リスクの人々、特に未登録の北朝鮮脱出者を対象にした、安全で偽装されたFlutter Web + Djangoメッセンジャーの実行計画です。ここでは隠蔽性とデータ保護が最優先になります。
このアプリケーションは基本的なオンライン電卓に偽装しつつ、内部ではリアルタイムチャット、ファイル共有、一方向の情報告知を提供します。


✅ Phase 1 — 計画とアーキテクチャ

  • 🧠 プロジェクト目標と脅威モデルを定義
    • 対象: 中国国内の未登録の北朝鮮脱出者
    • ミッション: ブラウザベース、インストール不要、安全で偽装されたメッセージングツール
    • UX偽装: 電卓風インターフェース
  • 🤖 AI主導の開発ワークフローを選択
    • 設計、codegen、反復にGPT-4o + o1を使用
    • “Vibe Coding”に従う → AIによる高速な自然言語開発
  • ⚙️ 技術スタックを確定
    • Frontend: Flutter Web (Material 3, go_router, Riverpod, http)
    • Backend: Django + Django REST Framework (Django 5.x)
    • Deployment: 単一VPSコンテナ (static + API)、必要に応じてCloudflare proxy
  • 🌐 ドメインを取得
    • Domain: ___.net
    • Cost: 韓国レジストラ経由で₩18,000/year
    • Purpose: オンライン電卓として視覚的に偽装

✅ Phase 2 — VPSセットアップと基本デプロイ

  • 💳 Vultrアカウントを作成し、$10を支払う。

  • 🛒 VPS instanceを作成
    • Region: Singapore (Vultr上でGFW性能が最も良い)
    • OS: Ubuntu 22.04 x64
    • Plan: 1vCPU / 1GB RAM ($5/month)
    • SSH keyまたはパスワードアクセスをセットアップ
  • 🔑 Mac ↔ server SSH loginを効率化
    • MacBookでed25519 keyを生成し、agentへ読み込む

      ssh-keygen -t ed25519 -C "___-remote"
      ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<IP>
      
    • これからは: ssh root@<IP> → passphrase prompt → 即login

  • 🐚 VPS上のshell環境をbootstrap
    • 個人dotfiles repoをcloneし、setup scriptを実行

      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
      
    • ScriptはzshOh‑My‑ZshPowerlevel10kをインストール/確認し、.zshrc.vimrc.gitconfigをlinkし、zshをdefault shellに設定する。
    • lessgitのような必須CLI toolsもインストール済みにする。
  • 🔐 VPSへアクセスして初期化
    • loginして、必須パッケージをインストール (bootstrap scriptで未処理の場合)

      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
      
  • 📁 プロジェクトディレクトリとvirtualenvを準備

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

Note: VPS IPを隠しDDoSを吸収するため、Cloudflare proxyを推奨します。


✅ Phase 3 — プロジェクト初期化 (Django + Flutter)

🔧 Django Setup

  • django-admin startproject stealthcore .
    • /srv/___の中にstealthcore/フォルダとmanage.pyを作成します。
  • python manage.py startapp api
    • 独自ロジック(メッセージ処理、ファイルアップロード、ブロードキャスト通知など)用のapi/フォルダを作成します。
  • INSTALLED_APPS'api''rest_framework'を追加
    • stealthcore/stealthcore/settings.pyで、例:

      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
    • 初期database tableを作成します (デフォルトではSQLite)。
  • python manage.py createsuperuser
    • Djangoのadmin panelへアクセスできるようにします (任意だが推奨)。

Future expansions:

  • TTL付きグループチャット用の/api/messages/
  • ファイル共有(自動削除)用の/api/upload/
  • 管理者ブロードキャストメッセージ用の/api/notice/

🛠️ Flutter Web Setup

  • flutter create ___web
    • 基本的なFlutter Webプロジェクトを生成します。
  • UIを置き換える 電卓風レイアウトへ
    • main.dartでの最小例:

      TextField(
        onChanged: (val) {
          // store user input
        },
      );
      ElevatedButton(
        onPressed: () {
          // call /api/check-trigger/
        },
        child: Text("Send"),
      );
      
    • 現実的には、数字キーパッド、基本的な四則演算などを実装します。

  • /api/check-trigger/へPOST requestを接続
    • httpを使用:

      final response = await http.post(
        Uri.parse('/api/check-trigger/'),
        body: {'input': userInput},
      );
      
    • 有効なら、backendがtokenを発行 → Flutterが隠しmessenger UIを読み込む。

  • flutter build web
    • Flutterアプリをbuild/web/へコンパイルします。
  • ファイルをコピー:

    mkdir frontend_static/
    cp -r build/web/* frontend_static/
    
    • これはNginxまたはDjangoのWhiteNoiseで配信できます。

✅ Phase 4 — Trigger APIとFlutter統合

  • 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'})
    
  • /api/urls.pyを作成し、routeを登録

    from django.urls import path
    from .views import check_trigger
    
    urlpatterns = [
        path('check-trigger/', check_trigger, name='check-trigger'),
    ]
    
  • Flutterからhttp.post(...)で接続
    • "success"なら、tokenをmemory(Riverpod)に保存 → 隠しUIを表示
    • "denied"なら、単純な電卓のまま残す
  • frontendに機密ロジックがないことを確認
    • すべてのsecret value(trigger codeなど)はサーバー上に置く。

✅ Phase 5 — Nginx & HTTPS Hosting

  • Nginx configを作成:

    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;
        }
    }
    
  • configを有効化して再起動:

    ln -s /etc/nginx/sites-available/___ /etc/nginx/sites-enabled/
    nginx -t && systemctl restart nginx
    
  • HTTPSを有効化:

    apt install certbot python3-certbot-nginx -y
    certbot --nginx -d ___.net
    
    • ___.net用のLet’s Encrypt証明書をインストールします。
    • その後、https://___.netで偽装電卓が配信されるはずです。

Gunicorn & systemd

  • 本番では、Nginxの後ろでGunicornを使ってDjangoを実行:

    gunicorn stealthcore.wsgi:application --bind 127.0.0.1:8000
    
  • 再起動時に自動復旧するよう、/etc/systemd/system/gunicorn.serviceを作成します。


✅ Phase 6 — 最終テストと偽装の堅牢化

  • 🧪 UIとtriggerをテスト
    • https://___.netへアクセス
    • 1004(または本当のtrigger)を入力 → {"status":"success"} + tokenを確認
    • 無効な入力 → {"status":"denied"}を確認
  • 🔒 frontendをクリーンにする
    • “chat”や”trigger”への参照をすべて削除
    • hardcoded secretsやtokensなし
    • ephemeral sessionsのため、localStorage使用は最小限
  • 🧊 最終偽装を磨く
    • 偽の電卓branding (title、iconなど)
    • 完全に電卓として信じられるよう、実際の演算機能を入れる (任意)
    • UI alignment、theming、final styling
  • 🧠 deploy.mdを作成 (内部ドキュメント)
    • デプロイ、更新、rollback、検証方法
    • 環境変数(___TRIGGERSECRET_KEY)を要約
    • security & logging best practicesを含める

🔮 Future Features

  • 📥 Info Board (読み取り専用のお知らせ)
  • 💬 TTLベースのメッセージ削除付きGroup Chat
  • 📁 File Sharing (セキュリティのため自動expire)
  • 🔥 期限切れデータ用のcron/management commandによるAuto-Deletion
  • 🌐 VPS IPを隠しDDoSを緩和するCloudflare Proxy

このロードマップを使って、初期VPSセットアップから最終本番化まで、___のend-to-end developmentを進める。—


👀 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

コメントする