[๐ ] Log Pengembangan Secret Messenger #4: Setup SSH, Integrasi Bootstrap Script
โจ 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
-
Domain:
โ 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
lessdangitterinstal
-
-
๐ 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/danmanage.pydi dalam/srv/___.
- Membuat folder
-
python manage.py startapp api- Membuat folder
api/untuk logika khususmu (penanganan pesan, upload file, broadcast notice, dll.).
- Membuat folder
-
Menambahkan
'api','rest_framework'keINSTALLED_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/.
- Mengompilasi app Flutter ke
-
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.pydan mendaftarkan routefrom 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
- Jika
-
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://___.netseharusnya menyajikan kalkulator tersamar.
- Menginstal sertifikat Letโs Encrypt untuk
Gunicorn & systemd
Untuk production, jalankan Django dengan Gunicorn di belakang Nginx:
gunicorn stealthcore.wsgi:application --bind 127.0.0.1:8000Buat
/etc/systemd/system/gunicorn.serviceagar 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"}
-
Mengunjungi
-
๐ 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