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

  1. Pindahkan yang statis dulu: landing dan aset. Hasilnya terasa langsung: cepat, tanpa maintenance.
  2. API non-kritis berikutnya: webhook atau internal tool. Bandingkan latensi dan tagihan.
  3. 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.