Tiga Bulan Bergelut dengan per-Migrasian Duniawi
Dalam tiga bulan terakhir, saya melakukan beberapa migrasi layanan berbasis web — mulai dari shared hosting ke VPS, VPS ke VPS, hingga dari lingkungan development ke production. Layanannya pun beragam: ada yang berbasis PHP, Python, maupun Node.js.
Setiap migrasi punya tantangan sendiri, tapi di sisi lain memberi banyak pelajaran soal bagaimana menjaga stabilitas, efisiensi biaya, dan konsistensi lingkungan server.
Beberapa klien memiliki alasan yang berbeda dalam melakukan migrasi: ada yang sebelumnya menggunakan shared hosting untuk aplikasi PHP namun biaya bulanannya terasa berat karena sifat aplikasinya musiman (seasonal), sehingga dipindahkan ke VPS dengan sistem Pay-as-You-Go agar hanya membayar saat aktif. Ada juga yang berpindah dari VPS ke NAT VPS untuk menekan biaya operasional, karena uptime-nya masih bisa ditoleransi untuk aplikasi non-kritis. Dari berbagai kasus ini, saya belajar beberapa hal yang akan saya tulis di sini, sebagai pengingat pribadi.
Tahapan Migrasi
biasanya saya membuat checklist dulu sebelum melakukan migrasi , berisi langkah-langkah yagn akan saya lakukan di migrasi saat itu. Saya rasa ini sangat membantu karena kadang kalau sudah masuk ke proses akan lebih fokus ke teknikal dan kadang ada fase stuck 'oke sudah, habis ini ngapain ya?'
Kurang lebih ini checklistnya (disesuaikan dengan project yang sedang dimigrasikan) :
- Clone source code dari repository dan backup data dari layanan lama untuk testing di server baru.
- Siapkan environment, sebisa mungkin sama dengan sistem sebelumnya atau minimal kompatibel. Jika menggunakan docker maka bagian ini akan terasa lebih mudah tapi perlu diingat juga bahwa tidak semua butuh docker, pernah ada satu project yang memaksakan penggunaan docker tapi malah menjadi tidak efisien karena ketika build image membutuhkan storage yang besar tapi setelah container berjalan sebenarnya storage itu tidak diperlukan lagi dan provider vps saat itu tidak menyediakan opsi downsize sehingga biaya storage itu menjadi beban biaya selama server beroperasi. Dengan memilih tidak menggunakan docker maka overhead itu telah dihilangkan
- Jalankan aplikasi dengan mode debug.
- Lakukan testing baik dengan script testing yang sudah disediakan maupun API testing menggunakan aplikasi semacam postman (kadang saya menggunakan cloudflare tunnel untuk testing sementara). Ngga semua klien punya script untuk automation testing jadi sebenarnya ini opsional aja, kadang cukup kasih link sementaranya buat dicek sama klien.
- Lakukan cutover traffic dengan mengubah DNS.
- Buat reverse proxy atau virtualhost, lanjutkan dengan pemasangan sertifikat SSL, seringnya menggunakan certbot.
- Untuk NAT VPS jangan lupa lakukan konfigurasi port/domain forwarding.
- Jika tidak menggunakan docker, pastikan service sudah otomatis dimulai jika server reboot, pakai systemd.
- Siapkan backup otomatis jika diminta oleh klien, fokus ke data aplikasi seperti konten web, log, atau docker volume.
- Dokumentasi, terutama jika migrasinya dari shared hosting ke vps tanpa panel.
Intinya build layanan di server baru —> testing —> alihkan traffic.
Versioning Itu Penting
Pernah ada satu kasus di mana project yang akan di-deploy sudah setahun tidak disentuh dan tidak memiliki versioning di dependency-nya. Saat dijalankan muncul banyak error akibat perbedaan versi library.
Otomasi
Seperti yang sudah saya jelaskan di poin sebelumnya bahwa tidak semua project ideal dengan docker, maka skrip otomasi menjadi jawabannya. Skrip ini bisa ditulis dengan shell scripting tapi saya prefer menggunakan python karena kemudahan bahasanya dan python sendiri sudah otomatis terinstall pada server berbasis ubuntu. Biasanya berisi hal hal yang berkaitan dengan setup environment dan setup service di systemd.
Penutup
Setiap migrasi yang saya lakukan selalu punya ceritanya sendiri, kadang berjalan mulus, kadang penuh kejutan kecil yang memaksa saya berpikir ulang soal pendekatan yang digunakan. Tapi dari semua itu, saya belajar untuk tidak terburu-buru, mencatat setiap langkah, dan selalu menyiapkan 'plan B' jika sesuatu tidak berjalan sesuai rencana.