CerdasNet Hosting Platform
Platform hosting terpadu: klien bisa membuat situs, memasang domain, mengelola file, database, dan aplikasi dari satu dashboard, sementara admin mengelola paket, node, dan tagihan dari tempat yang sama.
Prinsip utama: satu aplikasi Node.js, npm start menjalankan semuanya. Layanan
lain (MariaDB, Cloudflare, WAHA) dipanggil dari aplikasi ini, bukan ditulis ulang.
Halaman ini tidak untuk dipublikasikan di mesin pencari (ditandai noindex).
1. Latar belakang dan masalah
Layanan hosting umumnya membutuhkan banyak alat terpisah: panel kontrol, billing, DNS, notifikasi, dan monitoring. Akibatnya pengelolaan lambat, data tercecer, dan klien sering menunggu admin untuk hal sederhana.
Masalah saat ini
- Pembuatan situs dan domain masih manual.
- Billing, DNS, dan server tidak terhubung.
- Tidak ada pemantauan pemakaian per akun.
- Server tunggal berarti satu titik gagal.
Peluang
- CerdasNet sudah punya auth, audit, fulfillment, WAHA, dan monitoring.
- Pola provisioning otomatis sudah terbukti di modul lain.
- Cloudflare menyediakan DNS, proxy, dan sertifikat.
Pendekatan
- Bangun bertahap, satu node dulu.
- Pakai ulang komponen yang ada.
- Tiap fase punya kriteria selesai yang bisa diuji.
2. Target yang ingin dicapai
Tujuan utama
Membangun platform hosting sendiri yang otomatis dari pembayaran sampai situs aktif, aman, dapat dipantau, dan siap berkembang menjadi beberapa server.
Sasaran terukur
Dari pembuatan subdomain sampai situs aktif.
Intervensi admin untuk pemasangan WordPress, ganti PHP, dan buat database.
Tindakan admin dan klien tercatat di audit.
Batas kehilangan data file saat failover (awal Fase 4, bisa diubah).
Secret CerdasNet yang bisa dibaca proses situs klien.
Target cluster: 2 aplikasi, 1 database primer, 1 backup.
Di luar cakupan (tahap awal)
- Hosting email penuh (SMTP/IMAP).
- Penjualan aplikasi berbayar tanpa lisensi resmi.
- Otomatisasi penuh failover database tanpa alat khusus.
3. Fitur dan manfaat
| Fitur | Isi | Manfaat untuk klien | Manfaat untuk bisnis |
|---|---|---|---|
| Subdomain otomatis | Record A proxied di zona cerdasnet.com dan cnet.web.id |
Situs langsung punya alamat tanpa beli domain | Pintu masuk murah untuk calon pelanggan |
| Domain sendiri | Custom hostname, instruksi CNAME, verifikasi TXT | Pakai nama domain sendiri dengan panduan jelas | Naik kelas ke paket berbayar |
| Pindah nameserver | Zona dibuat di akun Cloudflare kita setelah kepemilikan terbukti | DNS dikelola otomatis, tanpa edit manual | Kontrol DNS, lebih sedikit tiket bantuan |
| Runtime Node, PHP, statis | Proses per situs dengan user Linux akun | Bisa memasang berbagai jenis situs | Segmen pasar lebih luas |
| PHP-FPM multi versi | Pool dan php.ini per akun |
Kompatibel dengan aplikasi lama dan baru | Kurang dukungan manual |
| MariaDB per akun | Database, pengguna, dan kuota | Siap untuk WordPress dan aplikasi lain | Terukur dan bisa ditagih per paket |
| Installer satu klik | Katalog dengan checksum, WordPress lebih dulu | Pasang aplikasi dalam hitungan menit | Nilai jual utama hosting |
| File manager | Daftar, unggah, ekstrak, edit, izin, sampah | Kelola file dari browser | Aman karena pathGuard |
| Terminal browser | PTY terbatas ke folder akun, batas idle | Akses perintah tanpa SSH | Terjejak di audit |
| Backup dan pemulihan | Terjadwal, ke node backup | Data aman, bisa dipulihkan sendiri | Mengurangi risiko dan komplain |
| Statistik resource | CPU, RAM, disk, inode, bandwidth | Tahu kapan perlu upgrade | Dasar upsell dan penangguhan |
| Billing otomatis | Bayar, akun jadi, perpanjang, suspend | Aktif segera setelah bayar | Tanpa kerja manual |
| Notifikasi WhatsApp | Akun baru, tagihan, domain aktif, gangguan | Informasi cepat lewat aplikasi yang dipakai harian | Retensi lebih baik |
| Cluster dan failover | Beberapa node, load balancer, lease | Layanan lebih tahan gangguan | Kepercayaan dan SLA lebih kuat |
Ringkasan manfaat
Klien
Mandiri, cepat aktif, aman, dan transparan soal pemakaian.
Admin
Satu dashboard, provisioning otomatis, audit lengkap, kerja manual berkurang.
Bisnis
Pendapatan berulang, skala bertahap, biaya terkendali karena memakai ulang kode yang ada.
4. Yang sudah ada dan dipakai ulang
| Bagian | Lokasi | Dipakai untuk |
|---|---|---|
| Entry point | server.js, scripts/prestart.js, ecosystem.config.cjs |
npm start, preflight |
| Konfigurasi | src/config/, settingsService.js, secretsService.js |
Token Cloudflare, WAHA, paket |
| Database | src/db/, Kysely, mysql2 |
Tabel hosting baru |
| Provider | src/services/providers/, fulfillmentService.js |
Pola adapter provider |
| Fulfillment | mikrotikFulfillment.js, wahaProvisioning.js |
Pola provisioning setelah bayar |
src/services/whatsapp/, deploy/waha/ |
Notifikasi, bot | |
| Monitoring | src/services/monitoring/ |
Health check node dan situs |
| Job dan realtime | src/jobs/, src/realtime/, src/sockets/ |
Antrean, progres, terminal |
| Auth dan audit | middleware/auth.js, auditService.js |
Peran admin dan klien, catatan tindakan |
| Dashboard | views/dashboard/, views/admin/ |
Halaman panel |
| Keamanan HTTP | helmet, CSRF, express-rate-limit |
Semua form dan API |
5. Struktur folder yang diusulkan
src/hosting/
bootstrap/ preflight: OS, root, port, token, WAHA; report.js
edge/ listener 80/443, SNI, certs, hostRouter, limits
cloudflare/ client, zones, dns, customHostnames, tokenCheck
domains/ subdomain, customDomain, verification, nameserverTransfer
accounts/ plans/ sites/(runtimes) supervisor/
filemanager/ pathGuard.js, archive.js (batas anti zip bomb)
terminal/ php/ databases/ apps/(catalog, licenses)
backups/ resources/ cluster/ billing/ notify/
routes/ controllers/ jobs/ validators/ utils/
public/hosting/ js, css, vendor (xterm.js, editor ringan)
views/hosting/ admin/ dan client/
tests/ unit/hosting-*.test.mjs, integration/hosting/
Prototipe di src/services/hosting/ (subdomain, pathGuard, cloudflareClient,
hostRouter) dipindah ke src/hosting/ setelah struktur disetujui.
6. Tanggung jawab modul
bootstrap
- Idempoten, tiap langkah dicek dulu.
- Cek OS, hak akses, port 80/443/3306, token Cloudflare, WAHA.
- Gagal berarti pesan perbaikan yang jelas.
edge
- 80 ke 443, SNI untuk sertifikat.
- Host tak terdaftar: 404 tanpa bocoran info.
- Tujuan hanya port dalam pool situs.
cloudflare
- Satu-satunya pintu ke API.
- Token minimal: DNS dan custom hostname pada zona terkait.
domains
- Subdomain, domain sendiri, pindah nameserver.
- Kepemilikan diverifikasi sebelum diterima.
accounts, plans
- Batas: situs, domain, disk, CPU, RAM, inode, database, runtime.
- User Linux dan kuota per akun.
sites, supervisor
- Proses anak dengan user akun dan environment kosong.
- Restart otomatis, log, batas resource via systemd slice.
filemanager, terminal
- Semua operasi lewat
pathGuard. - Terminal sebagai user akun, batas idle, dicatat audit.
php, databases, apps
- Versi PHP per akun.
- MariaDB per akun dengan kuota.
- Manifest aplikasi, lisensi diperiksa.
backups, resources
- Cadangan terjadwal ke node backup.
- Pemakaian per akun di dashboard.
cluster, billing, notify
- Registri node, heartbeat, lease.
- Billing memakai fulfillment yang ada.
- Notifikasi lewat WAHA.
7. Alur utama
A. Subdomain
- Klien isi label dan pilih zona.
- Validasi format dan daftar yang dipesan.
- Cek kuota paket.
- Job: buat record A proxied dan situs.
- Aktif, notifikasi WAHA terkirim.
B. Domain sendiri
- Klien isi domain, sistem tampilkan CNAME.
- Custom hostname dibuat, TXT verifikasi ditampilkan.
- Status dipantau, setelah aktif ditautkan ke situs.
C. Pindah nameserver
- Kepemilikan domain dibuktikan dulu.
- Zona dibuat, nameserver diberikan.
- Klien mengubahnya di registrar.
- Status dicek berkala, setelah aktif DNS otomatis.
D. Installer satu klik
- Pilih aplikasi, domain, database.
- Unduh dari sumber resmi, cek checksum, ekstrak.
- Konfigurasi database, catat status.
- Aplikasi berbayar: lisensi diverifikasi dulu.
E. Pembelian paket
- Pembayaran lunas memicu fulfillment.
- Akun, folder, kuota dibuat; gagal dicatat dan dicoba ulang.
8. Cluster beberapa VPS
Yang tidak bisa dijanjikan: "tanpa gangguan sama sekali" tidak realistis saat node mati mendadak. Yang bisa dijanjikan adalah gangguan singkat dan pemulihan otomatis. Satu server dengan IP publik juga menjadi titik tunggal, jadi gunakan beberapa origin di Cloudflare Load Balancing.
Yang realistis
- Beberapa node aplikasi berjalan bersamaan di belakang load balancer.
- Failover otomatis dalam hitungan detik sampai menit, tergantung interval health check.
- Request yang sedang berjalan saat node mati akan gagal.
- Data yang belum tereplikasi bisa hilang saat node mati mendadak.
Peran node
| Peran | Jumlah | Isi |
|---|---|---|
| Edge / aplikasi | 2+ | CerdasNet, situs klien, terminal, file manager |
| Database primer | 1 | MariaDB primer |
| Replika database | 1+ | Siap dinaikkan jika primer mati |
| Backup | 1 | Cadangan situs, database, konfigurasi |
Yang disinkronkan antar node
- Database: satu sumber kebenaran (primer), replika untuk baca.
- File situs: sumber masalah terbesar. Pilihan: object storage S3, NFS, atau rsync berkala dengan RPO jelas (K4).
- Sesi login: di database, bukan memori node.
- WAHA: hanya satu node memegang lease.
- Job terjadwal: satu pelaksana per waktu via lease.
Health check dan failover
- Heartbeat ke
cluster_nodes; Cloudflare memeriksa/healthzdan mengeluarkan node gagal. - Replika dinaikkan manual atau dengan skrip teruji. Otomatisasi penuh diputuskan terpisah.
- Semua VPS memakai kode sama; peran ditentukan
CLUSTER_ROLE, daftar peer, dan koneksi database.
9. Penyimpanan dan data
/srv/cn/
accounts/<akun>/sites/<situs>/ direktori kerja situs
accounts/<akun>/home/ file manager dan terminal
runtime/ cache/ backups/ logs/
Folder CerdasNet (kode, .env, database lokal) tidak boleh berada di dalam
/srv/cn/accounts.
| Tabel | Isi utama |
|---|---|
hosting_plans |
nama, batas situs/domain/disk/CPU/RAM/inode/database, runtime |
hosting_accounts |
userId, planId, user Linux, folder, status, masa berlaku |
hosting_sites |
accountId, label, zona, FQDN, runtime, PHP, port, status, nodeId |
hosting_domains |
siteId, domain, jenis, ID custom hostname, verifikasi |
hosting_zones |
zona, ID Cloudflare, status, nameserver |
hosting_databases |
accountId, nama, pengguna, status |
hosting_apps, hosting_licenses |
aplikasi terpasang; jenis, status, masa berlaku lisensi |
hosting_backups, hosting_jobs |
target, jadwal, hasil; jenis job, payload, percobaan, log |
cluster_nodes, cluster_leases |
peran, IP, heartbeat; nama lease, pemegang, kedaluwarsa |
Migrasi mengikuti pola src/db/migrations/*.js; setiap migrasi punya
down yang berfungsi.
10. Keamanan
- Isolasi akun: user Linux per akun, tidak sekuat container karena kernel dipakai bersama. Untuk pelanggan berbayar dalam jumlah besar, pertimbangkan container (K2).
- Environment kosong: proses situs tidak mewarisi
.envatau secret. - Path: semua akses file lewat
pathGuard(symlink dan file belum ada). - Arsip: batas jumlah dan ukuran file saat ekstrak.
- Terminal: akun aktif saja, batas idle, tercatat audit.
- Token: lewat
secretsService, tidak di kode atau log. - Rate limit: login, pembuatan situs, unggah.
- Lisensi: hanya produk berizin resmi; open source seperti WordPress boleh gratis.
11. Fase, kriteria selesai, dan perkiraan waktu
Perkiraan waktu bersifat indikatif untuk satu pengembang dan dapat berubah.
| Fase | Isi | Kriteria selesai | Perkiraan |
|---|---|---|---|
| 0 Persiapan | Struktur, prototipe (subdomain, pathGuard, Cloudflare, router) sudah diuji unit | K1–K5 terjawab | 1 minggu |
| 1 Satu node | Preflight, subdomain otomatis, listener 80/443, tabel inti, situs Node, file manager dasar | Akun dan subdomain dibuat, situs menjawab dari internet, aman dari traversal dan symlink | 4–6 minggu |
| 2 Fitur inti | Custom domain, PHP-FPM, MariaDB, installer WordPress, terminal | Klien pasang WordPress, ganti PHP, buat database tanpa admin | 6–8 minggu |
| 3 Operasi | Backup, monitoring resource, suspend otomatis, pindah nameserver | Pemulihan satu situs teruji di VPS uji | 4–5 minggu |
| 4 Cluster | Registri node, replika DB, sinkron file, load balancing, lease | Satu node dimatikan, layanan pulih dalam batas disepakati; pemulihan dari replika teruji | 5–7 minggu |
| 5 Bisnis | Paket berbayar, perpanjangan, lisensi, notifikasi, penyempurnaan tampilan | Siklus beli sampai perpanjang berjalan otomatis | 3–4 minggu |
12. Contoh paket (usulan awal, belum final)
| Batas | Starter | Bisnis | Pro |
|---|---|---|---|
| Situs | 1 | 5 | 20 |
| Domain sendiri | 0 | 3 | 20 |
| Disk | 1 GB | 10 GB | 50 GB |
| Database | 1 | 5 | Lebih banyak |
| Backup | Mingguan | Harian | Harian + simpan lebih lama |
| Terminal | Tidak | Ya | Ya |
| Harga | Ditentukan setelah biaya VPS, Cloudflare, dan pasar dihitung. | ||
13. Keputusan sebelum Fase 1
| Kode | Pertanyaan | Opsi | Rekomendasi |
|---|---|---|---|
| K1 | CloudPanel dipasang otomatis? | (a) Tidak. (b) Ya, sebagai edge. | (a). Bentrok port 80/443 dan API tidak tersedia pada (b). |
| K2 | Isolasi akun | (a) User Linux + cgroup. (b) Container. | (a) Fase 1–2; (b) sebelum klien berbayar banyak. |
| K3 | Batas resource | (a) cgroup v2. (b) systemd slice. | (b), lebih mudah dikelola. |
| K4 | Sinkron file | (a) NFS. (b) S3. (c) rsync. | (c) awal Fase 4 dengan RPO jelas; (b) jangka panjang. |
| K5 | Database | (a) MariaDB primer + replika. (b) JSON/SQLite. | (a). JSON/SQLite tidak cocok untuk banyak penulis. |
| K6 | Terminal | (a) node-pty. (b) Lewat container. | Mengikuti K2; node-pty butuh kompilasi native. |
| K7 | Tahap pertama | Satu node atau cluster? | Satu node; cluster di Fase 4. |
Untuk pengujian di VPS uji, rekomendasi di atas sudah cukup. Sebelum melayani klien sungguhan, periksa ketentuan penyedia VPS dan batas port yang diizinkan.
14. Risiko dan mitigasi
| Risiko | Dampak | Mitigasi |
|---|---|---|
| Ketentuan penyedia VPS melarang hosting pihak ketiga | Akun diblokir | Periksa ketentuan sebelum menerima klien. |
| Batas paket Cloudflare (banyak zona, for SaaS) | Fitur domain terhambat | Cek paket akun dan dokumentasi resmi sebelum Fase 2. |
| Biaya load balancing, for SaaS, VPS tambahan | Margin tipis | Hitung sebelum Fase 4, atur harga paket. |
| Escape antar akun (kernel dipakai bersama) | Kebocoran data | Env kosong, batas resource, audit; rencana container (K2). |
| Kehilangan data saat failover | Data terbaru hilang | RPO jelas, replikasi, uji pemulihan rutin. |
| Aplikasi berbayar tanpa izin | Masalah hukum | Hanya jual dengan lisensi resmi. |
| RAM VPS uji kecil | Jumlah situs terbatas | Batas per akun sejak Fase 1. |
| Tampilan terlalu mirip panel merek lain | Masalah merek dagang | Tata letak familiar boleh, tanpa meniru merek atau tampilan persis. |
15. Penutup dan persetujuan
Dengan persetujuan dokumen ini, pekerjaan dimulai dari Fase 0 dengan menjawab keputusan K1–K7, lalu lanjut ke Fase 1 (satu node).
Nama / tanggal
Nama / tanggal