2025.04.17 (Kam)

โœจ Ringkasan GPT ใ€€

Hari ketika setup koneksi SSH berhasil, lalu shell script yang pernah ditulis sebelumnya diintegrasikan sehingga setup otomatis lingkungan VPS juga berhasil. Berkat itu, waktu persiapan lingkungan proyek Flutter+Django terpangkas drastis.


๐Ÿ’ญ Diary

Ternyata mengakses server remote lewat koneksi SSH semudah ini? Dengan bantuan GPT, semuanya cepat selesai tanpa macet. Dulu aku sering bingung konsep, lupa ini-itu, dan semuanya jadi berantakanโ€ฆ

Lalu setelah koneksi SSH berhasil, aku tinggal โ€œklikโ€ script otomatisasi yang dulu pernah kubuat, dan semua setup lingkungan langsung berhasil sekali jalan wkwk

Memang benar, hal-hal yang kelihatannya cuma utak-atik tidak berguna pun akhirnya nanti berguna juga seperti ini, kan?


๐Ÿš€ Roadmap

Rencana eksekusi untuk messenger Flutter Web + Django yang aman dan tersamar, ditujukan bagi individu berisiko tinggi dan sangat diawasi di daratan China โ€” khususnya pembelot Korea Utara tanpa dokumen โ€” ketika penyamaran dan perlindungan data menjadi hal mutlak. Aplikasi ini disamarkan sebagai kalkulator online sederhana, sambil menyediakan chat real-time, berbagi file, dan siaran informasi satu arah di baliknya.


โœ… Phase 1 โ€” Perencanaan & Arsitektur

  • ๐Ÿง  Menentukan tujuan proyek dan threat model
    • Audiens: pembelot Korea Utara tanpa dokumen di China
    • Misi: alat messaging aman, tersamar, berbasis browser, dan tanpa instalasi
    • Penyamaran UX: antarmuka bergaya kalkulator
  • ๐Ÿค– Memilih workflow pengembangan berbasis AI
    • Menggunakan GPT-4o + o1 untuk desain, codegen, dan iterasi
    • Mengikuti โ€œVibe Codingโ€ โ†’ pengembangan cepat berbasis bahasa alami lewat AI
  • โš™๏ธ Menetapkan tech stack final
    • Frontend: Flutter Web (Material 3, go_router, Riverpod, http)
    • Backend: Django + Django REST Framework (Django 5.x)
    • Deployment: satu container VPS (static + API), dengan Cloudflare proxy opsional
  • ๐ŸŒ Mendapatkan domain
    • Domain: ___.net
    • Biaya: โ‚ฉ18,000/tahun lewat registrar Korea
    • Tujuan: kamuflase visual sebagai kalkulator online

โœ… Phase 2 โ€” Setup VPS & Deployment Dasar

  • ๐Ÿ’ณ Membuat akun Vultr dan membayar $10.

  • ๐Ÿ›’ Membuat instance VPS
    • Region: Singapore (performa GFW terbaik di Vultr)
    • OS: Ubuntu 22.04 x64
    • Plan: 1vCPU / RAM 1GB ($5/bulan)
    • Setup SSH key atau akses password
  • ๐Ÿ”‘ Menyederhanakan login SSH Mac โ†” server
    • Membuat key ed25519 di MacBook dan memuatnya ke agent

      ssh-keygen -t ed25519 -C "___-remote"
      ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<IP>
      
    • Mulai sekarang: ssh root@<IP> โ†’ prompt passphrase โ†’ login instan

  • ๐Ÿš Bootstrap lingkungan shell di VPS
    • Clone repo dotfiles pribadi dan jalankan 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 menginstal / memeriksa zsh, Ohโ€‘Myโ€‘Zsh, Powerlevel10k, menautkan .zshrc, .vimrc, .gitconfig, dan menetapkan zsh sebagai shell default.
    • Juga memastikan tool CLI penting seperti less dan git terinstal
  • ๐Ÿ” Mengakses dan menginisialisasi VPS
    • Login dan instal package penting (jika belum ditangani oleh 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
      
  • ๐Ÿ“ Menyiapkan direktori proyek dan virtualenv

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

Catatan: Cloudflare proxy direkomendasikan untuk menyembunyikan IP VPS dan menyerap DDoS.


โœ… Phase 3 โ€” Inisialisasi Proyek (Django + Flutter)

๐Ÿ”ง Setup Django

  • django-admin startproject stealthcore .
    • Membuat folder stealthcore/ dan manage.py di dalam /srv/___.
  • python manage.py startapp api
    • Membuat folder api/ untuk logika khususmu (penanganan pesan, upload file, broadcast notice, dll.).
  • Menambahkan 'api', 'rest_framework' ke INSTALLED_APPS
    • Di stealthcore/stealthcore/settings.py, misalnya:

      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'rest_framework',  # Tambahkan
          'api',            # Tambahkan
      ]
      
  • python manage.py migrate
    • Membuat tabel database awal (SQLite secara default).
  • python manage.py createsuperuser
    • Memungkinkan akses ke panel admin Django (opsional tetapi direkomendasikan).

Ekspansi mendatang:

  • /api/messages/ untuk chat grup dengan TTL
  • /api/upload/ untuk berbagi file (penghapusan otomatis)
  • /api/notice/ untuk pesan broadcast admin

๐Ÿ› ๏ธ Setup Flutter Web

  • flutter create ___web
    • Menghasilkan proyek Flutter Web dasar.
  • Mengganti UI dengan layout bergaya kalkulator
    • Contoh minimal di main.dart:

      TextField(
        onChanged: (val) {
          // simpan input pengguna
        },
      );
      ElevatedButton(
        onPressed: () {
          // panggil /api/check-trigger/
        },
        child: Text("Send"),
      );
      
    • Secara realistis, implementasikan keypad numerik, aritmetika dasar, dll.

  • Menghubungkan request POST ke /api/check-trigger/
    • Menggunakan http:

      final response = await http.post(
        Uri.parse('/api/check-trigger/'),
        body: {'input': userInput},
      );
      
    • Jika valid, backend menerbitkan token โ†’ Flutter memuat UI messenger tersembunyi.

  • flutter build web
    • Mengompilasi app Flutter ke build/web/.
  • Menyalin file:

    mkdir frontend_static/
    cp -r build/web/* frontend_static/
    
    • Ini bisa disajikan oleh Nginx atau WhiteNoise milik Django.

โœ… Phase 4 โ€” Trigger API & Integrasi Flutter

  • Di 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: simpan trigger asli di os.environ atau 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'})
    
  • Membuat /api/urls.py dan mendaftarkan route

    from django.urls import path
    from .views import check_trigger
    
    urlpatterns = [
        path('check-trigger/', check_trigger, name='check-trigger'),
    ]
    
  • Menghubungkan dari Flutter dengan http.post(...)
    • Jika "success", simpan token di memory (Riverpod) โ†’ tampilkan UI tersembunyi
    • Jika "denied", tetap menjadi kalkulator sederhana
  • Memastikan tidak ada logika sensitif di frontend
    • Semua nilai rahasia (seperti kode trigger) berada di server.

โœ… Phase 5 โ€” Hosting Nginx & HTTPS

  • Membuat konfigurasi 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;
        }
    }
    
  • Mengaktifkan konfigurasi dan restart:

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

    apt install certbot python3-certbot-nginx -y
    certbot --nginx -d ___.net
    
    • Menginstal sertifikat Letโ€™s Encrypt untuk ___.net.
    • Setelah itu, https://___.net seharusnya menyajikan kalkulator tersamar.

Gunicorn & systemd

  • Untuk production, jalankan Django dengan Gunicorn di belakang Nginx:

    gunicorn stealthcore.wsgi:application --bind 127.0.0.1:8000
    
  • Buat /etc/systemd/system/gunicorn.service agar otomatis restart saat reboot.


โœ… Phase 6 โ€” Pengujian Akhir & Hardening Penyamaran

  • ๐Ÿงช Menguji UI & trigger
    • Mengunjungi https://___.net
    • Memasukkan 1004 (atau trigger asli) โ†’ verifikasi {"status":"success"} + token
    • Input tidak valid โ†’ {"status":"denied"}
  • ๐Ÿ”’ Membersihkan frontend
    • Menghapus semua referensi ke โ€œchatโ€ atau โ€œtriggerโ€
    • Tidak ada secret atau token hardcoded
    • Penggunaan localStorage minimal untuk sesi sementara
  • ๐ŸงŠ Polesan akhir penyamaran
    • Branding kalkulator palsu (judul, ikon, dll.)
    • Aritmetika nyata (opsional) agar sepenuhnya masuk akal sebagai kalkulator
    • Alignment UI, theming, dan styling final
  • ๐Ÿง  Membuat deploy.md (dokumen internal)
    • Cara deploy, update, rollback, dan verifikasi
    • Merangkum environment variable (___TRIGGER, SECRET_KEY)
    • Mencakup praktik terbaik keamanan & logging

๐Ÿ”ฎ Fitur Masa Depan

  • ๐Ÿ“ฅ Info Board (pengumuman hanya baca)
  • ๐Ÿ’ฌ Group Chat dengan penghapusan pesan berbasis TTL
  • ๐Ÿ“ Berbagi File (auto-expire demi keamanan)
  • ๐Ÿ”ฅ Penghapusan Otomatis lewat cron/management command untuk data yang kedaluwarsa
  • ๐ŸŒ Cloudflare Proxy untuk menyamarkan IP VPS dan meredam DDoS

Gunakan roadmap ini untuk memandu pengembangan end-to-end ___ โ€” dari setup VPS awal sampai production 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

Tinggalkan komentar