Migrasi dari VPS + Docker ke CloudAgni: pemetaan praktis
Kalau Anda menjalankan aplikasi di VPS dengan Docker, pindah ke serverless terasa menakutkan karena semua komponen familiar tiba-tiba tidak punya padanan namanya. Padahal pemetaannya sederhana. Ini terjemahan satu per satu, dari docker-compose.yml Anda ke CloudAgni.
Pemetaan komponen
| Di VPS + Docker | Di CloudAgni |
|---|---|
nginx serving static files |
Aset statis: upload lewat dashboard, atau bagian dari template (binding ASSETS) |
| Aplikasi Express/FastAPI/Go di container | Worker JavaScript: handler fetch yang sama, tanpa Dockerfile |
crontab / cron container |
Cron trigger bawaan worker (per jam/menit terjadwal) |
| Redis untuk cache/session | KV: key-value terdistribusi, API tiga fungsi |
| File upload ke volume | R2: object storage, kompatibel S3 API |
| MySQL/PostgreSQL | D1: SQLite terdistribusi di edge (query SQL standar; ini bagian yang butuh penyesuaian) |
| Reverse proxy + sertifikat SSL | Otomatis: tiap worker dapat app.<slug>.cloudagni.id dengan HTTPS |
docker-compose restart jam 3 pagi |
Tidak ada padanannya, karena tidak ada yang perlu di-restart |
Contoh: satu service API
docker-compose.yml Anda mungkin berisi aplikasi Node + Redis + volume. Di CloudAgni, satu worker menampung semuanya:
export default {
async fetch(request, env) {
const cache = await env.CACHE.get("kunci"); // KV menggantikan Redis
if (cache) return new Response(cache);
const data = await env.DB.prepare("SELECT * FROM produk").all(); // D1 menggantikan MySQL
const res = Response.json(data.results);
await env.CACHE.put("kunci", JSON.stringify(data)); // env.CACHE = binding KV
return res;
},
};
Env var dari .env masuk lewat menu Worker → Variabel, termasuk yang terenkripsi (secret). Tidak ada file .env yang menyeberang.
Yang langsung jalan tanpa perubahan
Landing page, API CRUD, webhook pembayaran, bot, scraper terjadwal, dashboard internal, dokumentasi. Semua pola request→respons dengan sedikit akses data adalah wilayah asalnya.
Yang perlu disesuaikan
- Query database: D1 adalah SQLite. Kalau aplikasi Anda bergantung pada fitur khusus Postgres (JSONB operator, extension), ada penyesuaian query.
- Batas CPU per request: paket Starter 10 ms CPU: longgar untuk API dan halaman web, tidak untuk render video atau komputasi berat.
- Proses berjalan panjang: tidak ada “container yang menyala terus”. Pekerjaan lama dipecah (queue + cron) atau tetap di VPS.
Urutan migrasi yang kami rekomendasikan
- Pindahkan yang statis dulu: landing dan aset. Hasilnya terasa langsung: cepat, tanpa maintenance.
- API non-kritis berikutnya: webhook atau internal tool. Bandingkan latensi dan tagihan.
- Aplikasi utama setelah polanya nyaman: biasanya dalam hitungan jam, bukan minggu.
VPS lama bisa dimatikan setelah DNS selesai berpindah. Dari ritual docker build tiap rilis menjadi tidak ada sama sekali, dan tagihannya rupiah, bukan dolar.