🚀 Tunnel SaaS v2
Pasang template Tunnel di banyak domain hanya dengan upload 2 file kecil. Semua logika & data terpusat di server Anda. Sempurna untuk bisnis SaaS multi-tenant.
1. Apa itu Tunnel SaaS v2?
Versi 2 dari Tunnel mengubah cara deploy: dari "upload semua file ke setiap domain" menjadi "upload 2 file proxy di client, semua logika di server pusat".
1× Setup Server
Pasang sekali di hosting/VPS Anda, dipakai berkali-kali oleh banyak domain.
2 File per Client
Tiap domain client cuma butuh index.php + .htaccess ringan.
Edit 1×, Semua Update
Ubah template di server, semua client otomatis dapat versi terbaru.
API Key per Client
Tiap client dapat key unik. Bisa di-revoke kapan saja jika perlu.
Jual sebagai Service
Cocok untuk bisnis SaaS: jual akses per client, atur quota & masa aktif.
SEO Tetap Sempurna
Canonical, OG, sitemap — semua otomatis pakai domain client.
💡 SaaS = Software as a Service
Konsep dimana satu sistem central melayani banyak pelanggan. Mirip seperti Shopify, WordPress.com, atau Linktree — Anda jadi penyedia layanan.
2. Beda v1 vs v2
📦 v1 Traditional
- Upload 40+ file ke tiap domain
- Ukuran ~500 KB per domain
- Edit template = touch tiap client
- Tambah brand = edit list.txt di tiap client
- Tiap hosting client butuh GD, cURL, allow_url_fopen
- Skala 100 domain = 100× kerja
🚀 v2 SaaS
- Upload 2 file ke tiap domain
- Ukuran ~4 KB per domain
- Edit template = 1× di server, otomatis sync
- Tambah brand = 1× di server, semua client kena
- Client hosting cukup PHP + cURL (minimal)
- Skala 100 domain = 1× kerja
📊 Tabel Perbandingan
| Aspek | v1 | v2 SaaS |
|---|---|---|
| File di client | 40+ file | 2 file |
| Ukuran upload | ~500 KB | ~4 KB |
| Setup waktu | 30 menit/domain | 5 menit/domain |
| Update template | Manual tiap client | Otomatis sync |
| Hosting client | Full feature | Minimal |
| Skala 50+ domain | Sangat repot | Mudah |
| Monetisasi | Susah | Mudah (per-key) |
⚠️ Kapan TIDAK Pakai v2?
- Cuma 1 domain → v1 lebih sederhana
- Tidak ada VPS / hosting untuk server pusat → harus pakai v1
- Klien mau full kontrol di hosting sendiri → v1
3. Cara Kerja
Tiap request dari pengunjung di client domain akan di-proxy ke server pusat, lalu hasil HTML/gambar dikembalikan ke pengunjung:
2 file PHP
render + data
⚙️ Detail Tiap Komponen
Client Domain (2 file)
index.php— terima request, forward ke server pusat via cURL.htaccess— rewrite semua URL ke index.php
Server Pusat (lengkap)
render.php— terima request dari client, validasi key, route ke templatesaas_config.php— daftar API key + host yang diizinkan- Semua file project Tunnel (index, about, img, dst.) → render HTML
list.txt,config.php→ data sentral untuk semua client
🎨 SEO Otomatis Pakai Domain Client
Saat render, server tahu host client (dari proxy). Maka:
- Canonical URL →
https://situs-client.com/panen138 - Open Graph URL → domain client
- Sitemap → semua URL pakai domain client
- JSON-LD → struktur sesuai client
Google melihat tiap domain sebagai situs terpisah.
4. Pasang Server Pusat (1×)
Server pusat cuma perlu dipasang sekali. Setelah itu bisa melayani banyak client.
📁 Yang Akan Di-Upload
Folder tunnel-saas/server/ berisi:
🚀 Langkah Setup
-
Zip folder server/ di komputer
Klik kanan folder
server/→ "Send to" → "Compressed (zipped) folder". -
Upload ke hosting
Login cPanel → File Manager → upload zip ke folder yang Anda mau. Bisa ke
public_html/api/(subfolder) atau bikin subdomain dulu. -
Extract di server
Klik kanan zip → Extract. Pastikan file
render.phpada langsung di folder, bukan di sub-sub folder. -
Edit
saas_config.phpBuka file via Editor cPanel. Setapi_keysuntuk client Anda (lihat section "Manajemen Key"). -
Test buka endpoint
Akses
https://api.mydomain.com/render.phpdi browser. Harus muncul:Invalid API key. Itu artinya server hidup ✓.
✅ Self-Contained
Folder server/ sudah self-contained — semua file project sudah ada di dalamnya. Tidak perlu point ke folder eksternal.
5. Pasang Client Proxy (Tiap Domain)
Untuk setiap domain client yang mau Anda hubungkan ke server pusat:
📁 Yang Di-Upload (Cuma 2 File)
🚀 Langkah Setup Per Client
-
Generate API key untuk client
Di terminal:
php -r "echo bin2hex(random_bytes(20));"Hasilnya 40 karakter random. Simpan dulu.
-
Tambahkan key ke
saas_config.phpserver'api_keys' => [ 'a1b2c3d4...' => 'situs-client.com', ], -
Owner client upload 2 file
Beri tahu owner client untuk upload
index.php+.htaccessdari folderclient/ke root domain mereka. -
Owner client edit 2 baris
Buka
index.phpdi File Manager mereka:$SERVER_URL = 'https://api.mydomain.com/render.php'; $API_KEY = 'a1b2c3d4...'; // key dari Anda -
Test
Buka
https://situs-client.com/. Halaman langsung tampil dari server pusat, dengan domain client di canonical & OG.
🎉 Selesai dalam 5 Menit
Tidak perlu install database, tidak perlu konfigurasi PHP yang ribet. Cuma 2 file + edit 2 baris.
6. Deploy ke cPanel (Step-by-Step)
Panduan visual untuk pengguna shared hosting (Niagahoster, Hostinger, IDwebhost, dll).
🏢 Bagian A: Server Pusat di Subdomain
-
Buat Subdomain di cPanel
cPanel → Domains → Subdomains
- Subdomain:
api - Domain:
mydomain.com - Document Root:
public_html/api
- Subdomain:
-
Aktifkan Ekstensi PHP
cPanel → Select PHP Version
- Pilih PHP 7.4 atau 8.x
- Centang ekstensi:
gd,curl,mbstring,json - Klik Save
-
Upload Folder Server
cPanel → File Manager →
public_html/api/- Zip folder
server/di komputer dulu - Klik Upload, pilih zip
- Setelah upload, klik kanan zip → Extract
- Hapus file zip-nya
- Zip folder
-
Set Permission Folder cache/
Klik kanan folder
cache→ Permissions → CHMOD755. -
Edit saas_config.php
Klik kanan
saas_config.php→ Edit'api_keys' => [ 'KEY-CLIENT-1' => 'client1.com', 'KEY-CLIENT-2' => 'client2.com', ], -
Test Endpoint
Buka
https://api.mydomain.com/render.php- Kalau muncul "Invalid API key" → ✓ berhasil
- Kalau 500 / blank → cek error_log di cPanel
🌐 Bagian B: Client Domain
-
Login cPanel Client
Buka cPanel hosting domain client (mis.
cpanel.client.com). -
Upload 2 File
File Manager →
public_html/- Upload
index.php - Upload
.htaccess(centang "Show hidden files" kalau tidak terlihat)
- Upload
-
Edit index.php (2 baris)
$SERVER_URL = 'https://api.mydomain.com/render.php'; $API_KEY = 'KEY-DARI-OWNER-SERVER'; -
Cek PHP cURL Aktif
cPanel client → Select PHP Version → centang
curl. -
Test
Buka
https://client.com/di browser. Halaman muncul = ✓.
💡 Bonus: Cron Auto-Update Keyword
Di server pusat, set cron job untuk update keyword tiap 6 jam:
- cPanel → Cron Jobs Common Settings: Once per 6 hours
-
Command:
/usr/bin/php /home/USERNAME/public_html/api/keyword_update.phpGanti
USERNAMEdengan username cPanel Anda.
⚠️ Pastikan AutoSSL Aktif
Di cPanel → SSL/TLS Status, aktifkan AutoSSL untuk subdomain api.mydomain.com. Tanpa SSL, banyak browser akan tolak request dari client domain (HTTPS only).
7. Manajemen API Key
Setiap client domain dapat API key sendiri. Anda yang kontrol siapa boleh akses server.
🔑 Generate Key Baru
Cara 1: Via PHP CLI
php -r "echo bin2hex(random_bytes(20));"
Cara 2: Via Generator Online
Buka randomkeygen.com → ambil "Fort Knox Password" (40+ karakter).
📝 Format di saas_config.php
'api_keys' => [
// Format: 'KEY' => 'host_yang_diizinkan'
'a1b2c3d4e5f6...' => 'client1.com',
'9z8y7x6w5v4u...' => 'client2.com',
// Wildcard '*' = boleh dari host apapun (untuk testing saja)
'test-key-XXX' => '*',
],
🛡️ Skenario Pemakaian Key
| Request dari | Key Valid | Host Match | Status |
|---|---|---|---|
| client1.com | ✓ | ✓ (client1.com) | 200 OK |
| client2.com (pakai key client1) | ✓ | ✗ (mismatch) | 403 Forbidden |
| random.com (key salah) | ✗ | — | 403 Invalid Key |
| Tanpa key | ✗ | — | 403 Invalid Key |
🔄 Cabut Akses Client
Kalau client tidak bayar / mau hentikan layanan:
- Hapus baris key client dari
saas_config.php - Save
- Refresh — domain client langsung dapat 403
🔐 Keamanan Key
- Jangan share key di publik (forum, GitHub, dll)
- Pakai HTTPS antara client ↔ server
- Rotate key periodik (mis. tiap 6 bulan)
- Log akses di
saas_access.log— pantau aktivitas mencurigakan
8. Update Sentral (Edit Sekali, Semua Kena)
Ini adalah keuntungan utama SaaS v2. Setiap perubahan di server pusat otomatis berlaku untuk semua client.
🎯 Apa yang Bisa Diubah Sentral?
Daftar Brand
Edit list.txt → semua client dapat brand baru.
Template HTML/CSS
Edit index.php → tampilan semua client update.
Schema.org
Edit JSON-LD → semua client dapat markup baru.
Geo Cloaking
Edit config.php → policy negara berlaku semua client.
SEO Meta Tags
Tambah meta tag baru → semua client SEO upgrade.
Versi AMP
Edit amp/index.php → AMP template semua client update.
⚙️ Apa yang TIDAK Otomatis Sync?
Yang harus diatur di tiap client (jarang):
- 2 baris di client
index.php(URL server + API key) - Tidak ada yang lain
🚀 Contoh Skenario Update
Misal Anda mau ganti tagline homepage dari "Direktori Unduh APK" jadi "Pusat APK Terlengkap":
- Login cPanel server pusat
- Edit
index.php - Ganti teks
- Save
- Selesai. 100 client domain langsung dapat tagline baru. Tanpa touch file di tiap client.
9. Estimasi Biaya Hosting
🏢 Untuk Server Pusat (1× Bayar)
Shared Hosting
✓ < 50 client
✓ Traffic ringan
✓ Cocok mulai SaaS kecil
VPS 1 GB
✓ 50-200 client
✓ Traffic sedang
✓ Resource stabil
VPS 2 GB + CDN
✓ 200+ client
✓ Traffic tinggi
✓ Cloudflare di depan
🌐 Untuk Tiap Client Domain
Domain Only
✓ Tipe .com / .id
✓ Tanpa hosting sendiri
✓ Pakai hosting murah
Hosting Minimal
✓ PHP + cURL cukup
✓ Tidak perlu DB
✓ Tidak perlu GD
Subdomain
✓ Pakai subdomain Anda
✓ Tidak beli domain baru
✓ Mis. brand1.mydomain.com
💰 Contoh Bisnis Model
- Biaya operasional Anda: Rp 100k/bulan (VPS 1 GB)
- Jual per client: Rp 50k/bulan (akses penuh)
- 50 client = Rp 2.500.000/bulan
- Margin = Rp 2.400.000/bulan
10. System Check (Cek Siap Deploy)
Admin punya halaman 🩺 System Check yang verifikasi semua requirement sebelum live.
📋 Yang Di-cek (20 item)
PHP Version
Minimal 7.4 (recommended 8.x)
Ekstensi PHP
gd, curl, mbstring, json
allow_url_fopen
Untuk geo lookup + keyword fetcher
max_execution_time
Minimal 300s untuk keyword update
Folder Writable
cache/img, cache/geo, data/, clients/
Required Files
render.php, saas_config.php, dll
Endpoint Test
Auto-curl ke render.php, cek respon 403
mod_rewrite
URL bersih
🎯 Cara Pakai
- Login admin Setelah deploy, login ke admin panel.
- Klik menu "🩺 System Check" Halaman otomatis run 20 check.
- Lihat ringkasan di atas ✓ Siap deploy ATAU ⚠ N issue
- Perbaiki yang FAIL Kolom "Fix" kasih panduan tiap item.
- Re-run sampai semua hijau Setelah semua pass, server siap untuk client.
📍 Path Auto-Detection
System Check juga tampilkan path yang terdeteksi:
Admin Dir : /home/user/public_html/manage
Server Dir : /home/user/public_html/api
Data Dir : /home/user/public_html/manage/data
Clients Dir : /home/user/public_html/manage/data/clients
Endpoint URL : https://api.mydomain.com/render.php
🔧 Path Configurable
Default admin/ dan server/ sebagai sibling. Kalau struktur Anda beda, edit saas_config.php:
'admin_data_path' => '/home/user/public_html/manage/data',
✅ Auto-Create Cache
Folder cache/ dan subfolder (img/, geo/) auto-create saat first request — tidak perlu manual buat.
10. Pertanyaan Umum
Apa beda antara folder server/ dan project Tunnel v1?
Folder server/ di v2 sudah berisi semua file project Tunnel v1, plus tambahan render.php dan saas_config.php untuk SaaS endpoint. Jadi v2 server = v1 project + SaaS layer.
Apakah project v1 saya masih bisa dipakai?
Ya. Project v1 di tunnel/ tetap berfungsi sebagai mode tradisional. v2 di tunnel-saas/ adalah cara alternatif untuk multi-tenant. Pilih sesuai kebutuhan.
Bisa pakai shared hosting biasa untuk server pusat?
Bisa, untuk < 50 client. Pastikan hosting punya PHP 7.4+, ekstensi gd + curl, dan allow_url_fopen=On. Hampir semua shared hosting modern (Niagahoster, Hostinger, IDwebhost) memenuhi.
Berapa latency tambahan dari proxy?
Biasanya 100-300ms per request (network hop + render). Untuk traffic tinggi, aktifkan cache di client ($CACHE_ENABLED = true) atau pasang Cloudflare di depan server pusat.
Bagaimana kalau server pusat down?
Semua client domain dapat error 503. Solusi: pasang Cloudflare yang punya fitur "Always Online" untuk serve dari cache, atau pasang server kedua sebagai backup (failover).
Bisa tiap client punya daftar brand berbeda?
Secara default semua client share list.txt yang sama. Untuk per-client list, edit render.php tambahkan switch berdasarkan $vHost untuk load list_{host}.txt berbeda.
Bagaimana cara monitor traffic per client?
File saas_access.log di server pusat mencatat semua request: timestamp, host, path, IP visitor. Bisa di-parse untuk statistik. Cocok untuk billing per traffic.
Bisa pakai Cloudflare untuk SSL?
Sangat recommended. Set Cloudflare DNS untuk subdomain server pusat → dapat SSL gratis + DDoS protection + CDN cache. Mode SSL: "Flexible" atau "Full".
Apakah Google bisa membedakan tiap client?
Ya. Karena canonical URL & meta tag pakai domain client, Google melihat tiap domain sebagai situs terpisah. Tidak ada duplicate content issue (selama konten sedikit beragam — bisa diatur per host kalau perlu).
Cara update dari v1 ke v2 (migrasi)?
1) Upload folder server/ ke server pusat (subdomain). 2) Edit saas_config.php. 3) Di tiap domain client, hapus semua file lama, upload 2 file client/. 4) Edit 2 baris di index.php. Selesai dalam ~15 menit per client.
Apakah aman secara hukum?
Sebagai infrastruktur SaaS: ya, sah. Pastikan konten yang Anda layani tidak melanggar TOS (gambling jurisdiction, copyright, dll). Tambahkan Privacy Policy yang jelas tentang data flow client → server pusat.
🚀 Tunnel SaaS v2 — Multi-Domain Made Easy
Panduan teknis: tunnel-saas/DEPLOY-CPANEL.txt | README.txt