Deploy malam ini akhirnya bersih setelah cache lama dibuang
Rabu, 01 Jul 2026
Deploy malam ini sempat bikin halaman journal kebaca aneh karena cache object lama masih ikut terangkat.
Begitu cache runtime dibersihkan total dan worker PHP direstart, route publik langsung balik normal, lalu Consulting Funnel Structure ikut stabil lagi di jalur publik.
Catatan seperti ini lebih cocok duduk di journal daripada dipaksa jadi artikel panjang.
Views: 183Format: Journal ringan tanpa hero berat dan TOC.Code-drivenCatatan Sistem
Cerita personal sekaligus studi kasus teknis tentang proses migrasi database SQLite n8n berukuran hampir 2GB dari VM Google Cloud ke VPS AlmaLinux menggunakan Docker dan aaPanel. Prosesnya mencakup pemindahan encryption key, pemulihan Docker volume, perbaikan konfigurasi Docker Compose, hingga pengaturan DNS, SSL, dan Reverse Proxy tanpa kehilangan workflow maupun credential.
Ada dua hal yang paling malesin pas ngurus server: migrasi database gede dan benerin Docker Compose yang error.
Kali ini gw dapet dua-duanya sekaligus wkwkw.
Awalnya semua ini gara-gara masa trial Google Cloud yang gw pake hampir habis. Sekitar tiga bulan sebelumnya, gw bikin VM di Google Cloud buat jalanin n8n. Waktu pertama dipasang, isinya masih sedikit. Cuma beberapa workflow eksperimen, bot Telegram, dan automation kecil yang masih gw utak-atik.
Karena terus dipake, lama-lama workflow-nya makin banyak. Mulai ada sistem omnichannel, workflow Instagram, Gen AI Builder, berbagai credential API, webhook, community node, sampai ribuan history execution.
delete vps lama hahaa
Tanpa kerasa, database SQLite-nya udah bengkak hampirĀ 2GB.
Masalahnya, masa trial Google Cloud tetap berjalan. Mau workflow gw masih banyak atau credential belum dibackup, Google Cloud tentu tidak ikut memikirkan nasib bot Telegram gw wkwkw.
Sebelum kredit trial-nya habis dan VM lama dihapus, gw harus mindahin seluruh instance n8n ke VPS baru yang menggunakan AlmaLinux dan aaPanel.
Targetnya bukan cuma bikin halaman login n8n muncul lagi. Semua workflow, credential, user login, webhook, community node, binary data, dan history execution harus tetap ada.
Jadi kali ini gw mau bahas sedikit tentang how to migrate n8n safely, khususnya dari server GCP lama ke server AlmaLinux baru menggunakan Docker dan aaPanel.
Securing Database SQLite 2GB
Pernah ga lo mindahin server production yang database SQLite-nya udah bengkak sampai hampir 2GB?
Nah, gw baru aja ngerjain ini buat flow.bisnisgo.id.
Secara sederhana, ada tiga komponen utama yang harus dipindahkan:
File .env yang menyimpan encryption key dan konfigurasi n8n.
Database SQLite beserta data di Docker volume.
File docker-compose.yml untuk menjalankan n8n di server baru.
Bagian paling pentingnya justru ada di .env.
Credential n8n disimpan di database dalam kondisi terenkripsi. Jadi supaya password, token, dan API key lama bisa dibaca di server baru, n8n membutuhkan encryption key yang sama.
Kurang lebih bentuknya seperti ini:
N8N_ENCRYPTION_KEY=KUNCI_ENKRIPSI_LAMA
Kalau database 2GB berhasil dipindahkan tapi encryption key-nya ketinggalan, credential lo bisa muncul di dashboard, tetapi isinya ga bakal terbaca dengan benar.
Sebelum backup, gw hentikan container lama dulu supaya SQLite tidak sedang ditulis oleh workflow yang masih aktif.
docker stop NAMA_CONTAINER
Setelah itu seluruh data n8n gw kompres menjadi satu file backup:
tar -czf /root/n8n-backup-lengkap.tar.gz \ -C /var/lib/docker/volumes/n8n_data/_data .
Database aslinya hampir 2GB, tetapi setelah dikompres ukuran arsipnya jadi sekitar 935MB.
Proses download-nya hampir dua jam karena kecepatannya cuma sekitar 100 sampai 137KB per detik. Benar-benar waktu yang tepat bagi koneksi internet untuk kembali ke masa lalu.
Setelah file selesai dipindahkan ke VPS AlmaLinux, backup tersebut gw ekstrak ke Docker volume yang baru:
tar -xzf n8n-backup-lengkap.tar.gz \ -C /var/lib/docker/volumes/n8n_data/_data
Gw juga memastikan file database.sqlite, folder community node, binary data, dan konfigurasi lainnya benar-benar ikut masuk.
Setelah database dan .env aman, gw pikir bagian paling sulitnya udah selesai.
Ternyata belum.
Sisa sisa OpenClaw di Docker Compose
Setelah semua file berhasil dipindahkan, gw langsung menjalankan command sakti:
docker compose up -d
Ekspektasinya tentu image ditarik, network dibuat, lalu container berubah jadi Started.
Realitanya malah muncul error:
invalid spec
Setelah gw cek, ternyata file docker-compose.yml dari server lama masih menyimpan sisa konfigurasi service eksperimen bernama OpenClaw.
invalid spec docker
Service itu sebenarnya udah ga dipake. Image dan beberapa referensinya juga udah ga tersedia di server baru. Tapi karena blok konfigurasinya masih ada, Docker Compose tetap mencoba membacanya.
Bisa di-run?
SANGAT... SANGAT GA BISA wkwkwk.
Akhirnya gw bersihin file Compose lama dan bikin ulang konfigurasi yang cuma fokus menjalankan n8n.
Sebelum dijalankan lagi, gw cek dulu hasil konfigurasi akhirnya:
docker compose config
Command ini berguna buat memastikan file YAML valid, .env terbaca, volume-nya benar, dan ga ada service lama yang masih numpang hidup.
Setelah Compose bersih, baru gw jalankan lagi:
docker compose up -d
Kali ini container berhasil hidup dan n8n bisa diakses dari port lokalĀ ****
Ā
.
Tapi pekerjaannya belum selesai. Container udah hidup, domain production-nya belum.
Masalah DNS dan SSL di aaPanel
Domain utama yang gw pake adalah:
flow.bisnisgo.id
Karena n8n dijalankan di balik Nginx Reverse Proxy aaPanel, gw harus mengatur DNS, SSL, dan proxy ke port internal n8n.
Masalahnya, SSL Letās Encrypt baru bisa diterbitkan kalau domain sudah mengarah ke IP AlmaLinux yang baru.
Tapi kalau DNS dipindahkan terlalu cepat sementara container n8n belum siap, request webhook dari Telegram atau service lain bakal masuk ke server yang belum bisa melayaninya.
Makanya sebelum mindahin DNS, gw pastikan dulu n8n sudah merespons dari localhost:
curl -I http://127.0.0.1:****
Setelah container stabil, baru record DNS di Cloudflare gw arahkan ke IP server AlmaLinux.
Di aaPanel, gw bikin website tipe Pure Static untuk flow.bisnisgo.id, pasang SSL Letās Encrypt, matiin cache, lalu aktifkan Reverse Proxy dengan target:
Setelah itu container dijalankan ulang supaya konfigurasi barunya terbaca.
docker compose down docker compose up -d
The Result?
Yuk kita tes.
Gw akses flow.bisnisgo.id dari browser, lalu halaman login n8n muncul.
Gw masuk menggunakan username dan password lama.
BISA LOGIN! HAHAHA
Sumber gambar: katonfajar.com
Ā
Semua workflow masih ada. Insta System, Gen AI Builder, bot Telegram, community node, sampai history execution yang sukses maupun gagal tetap utuh.
Credential juga masih bisa digunakan karena database dan encryption key berhasil dipindahkan bersama.
Setelah itu workflow gw aktifkan satu per satu sambil memantau execution dan log. Gw ga langsung mengaktifkan semuanya karena kalau ada error, bakal lebih gampang mencari workflow mana yang bermasalah.
THATāS WHY I PREFER DOCKER FOR N8N MIGRATION INSTEAD OF NATIVE INSTALL.
Dalam kasus migrasi server, pemisahan antara image, konfigurasi, dan persistent volume bikin prosesnya jauh lebih terkontrol.
Kalau instalasi native pake NPM, urusan versi Node.js, dependency, permission, dan process manager bisa lebih panjang lagi.
Dari proses ini gw juga sadar kalau jasa migrasi n8n sebenarnya punya nilai yang lumayan tinggi.
Yang dijual bukan cuma kemampuan bikin container berubah jadi Started. Yang dijual adalah memastikan database tidak rusak, credential tetap terbaca, webhook kembali aktif, dan automation klien tetap berjalan setelah pindah server.
Catatan Terakhir
Sekarang domain flow.bisnisgo.id udah ga aktif lagi karena gw juga udah ga gabung di company tersebut.
Waktu ngerjain itu lumayan banyak trial and error, tapi justru di situ serunya. Dari satu kasus ini gw jadi lebih ngerti cara kerja Docker volume, encryption key n8n, struktur database SQLite, deployment di aaPanel, dan risiko kecil yang bisa bikin satu sistem automation mati total.
Walaupun server dan domainnya udah ga dipake, pengalamannya tetap relevan. Buat gw, ini bukan sekadar cerita mindahin n8n, tapi salah satu tantangan server yang bikin kemampuan troubleshooting gw naik cukup jauh.
Dan jujur aja, kasus kayak gini lebih seru daripada cuma install n8n dari nol terus lihat halaman login muncul. Yang susah itu bukan bikin sistem hidup, tapi bikin sistem lama pindah tanpa kehilangan ingatan.
Akhir pekan lalu, beberapa teman sekantor mengajak jogging malam sepulang kerja di kawasan GBK. Sudah cukup lama saya tidak berolahraga, rasanya sudah waktunya menggerakkan badan lagi setelah lebih sering menghabiskan waktu di depan laptop.
Sebelum mulai berlari, saya mencoba menitipkan tas di PaxelBox yang tersedia di area GBK. Ini pertama kalinya saya menggunakannya. Prosesnya ternyata cukup mudah. Tinggal pilih loker, bayar menggunakan QRIS, lalu tas bisa ditinggal dengan aman selama berolahraga. Praktis juga, jadi saya bisa berlari tanpa membawa beban di punggung.
Karena sudah lama tidak jogging, saya tidak memasang target apa pun. Niatnya hanya ingin menikmati suasana malam di GBK yang selalu ramai oleh orang-orang dengan tujuan yang berbeda. Ada yang berlari serius, ada yang jalan santai, ada juga yang sekadar duduk menikmati malam Jakarta.
Saya sempat berpikir kondisi fisik saya masih cukup oke. Ternyata tidak juga. Baru empat putaran, napas sudah mulai berat dan kaki terasa minta istirahat. Wkwkwk. Akhirnya saya memutuskan berhenti di situ daripada memaksakan diri.
Sumber gambar: katonfajar.com
Setelah selesai jogging, kami menutup malam dengan makan sate taichan bersama. Rasanya sederhana, tetapi justru momen seperti ini yang membuat capeknya terasa terbayar. Duduk santai, mengobrol, sambil menikmati makanan hangat setelah berolahraga.
Di tengah suasana tersebut, saya kembali menyadari betapa bersyukurnya saya bisa dipertemukan dengan teman-teman kantor yang baik dan suportif. Mereka bukan hanya menyenangkan untuk diajak bekerja atau menghabiskan waktu bersama, tetapi juga benar-benar peduli ketika salah satu dari kami sedang menghadapi masalah.
Saya pernah mengalami suatu persoalan, dan mereka dengan sabar menunggu, menemani, serta membantu saya sampai semuanya terasa lebih terkendali. Mungkin bagi mereka hal tersebut terlihat sederhana, tetapi bagi saya, perhatian seperti itu sangat berarti.
Tidak semua orang beruntung mendapatkan lingkungan kerja dengan teman-teman yang mau saling menjaga. Karena itu, saya sangat bersyukur bisa mengenal dan bekerja bersama mereka.
Sebelum pulang, saya juga menyempatkan diri berfoto di depan billboard besar bergambar Lionel Messi yang terpampang di kawasan Plaza Senayan. Rasanya lucu juga. Walaupun hanya āfoto barengā versi billboard, tetap layak untuk diabadikan. š
Foto bareng Bang Messi
Ā
Malam itu mengingatkan saya bahwa akhir pekan tidak selalu harus diisi dengan sesuatu yang besar. Kadang cukup dengan berolahraga, menghabiskan waktu bersama teman-teman yang baik, menikmati makan malam sederhana, lalu pulang dengan badan lelah tetapi pikiran terasa jauh lebih ringan.
Malam itu juga mengingatkan saya bahwa di tengah rutinitas pekerjaan yang melelahkan, kehadiran orang-orang yang suportif merupakan sesuatu yang patut disyukuri. Pekerjaan mungkin datang dan pergi, tetapi kebaikan orang-orang yang pernah menemani kita akan selalu meninggalkan kesan.
Semoga ini menjadi awal bagi saya untuk lebih rutin bergerak dan lebih menghargai waktu bersama orang-orang di sekitar. Ketika nanti saya membaca tulisan ini kembali beberapa bulan ke depan, semoga saya sudah tidak lagi menyerah di empat putaran.
Dan semoga saya tetap dikelilingi oleh orang-orang baik seperti mereka.