← Semua pembelajaran / Astro Nol β†’ Portal Berita
Fase 9 Β· Migrasi dari CodeIgniter 3

Strangler: CI3 dan Astro berdampingan

Menulis ulang portal berita dalam satu peluncuran adalah taruhan besar dengan trafik dan pendapatanmu. Cloudflare memungkinkan memindahkannya sepotong demi sepotong.

Intisari

  • Origin Rules di Cloudflare mengarahkan jalur tertentu ke origin berbeda β€” tanpa perubahan DNS.
  • Satu domain, satu sertifikat, satu WAF. Pembaca tidak pernah tahu ada dua sistem.
  • Rollback = ubah satu aturan. Berlaku dalam hitungan detik, bukan menit.
  • Urutan yang benar: login dulu (supaya sesi bersama hidup), lalu halaman baca, lalu redaksi.
  • Selama transisi, dua sistem berbagi satu database β€” semua aturan kompatibilitas skema dari Fase 2 berlaku.

Bentuknya

                    β”Œβ”€ /masuk, /daftar, /akun   β†’ Astro   (ECS)
                    β”œβ”€ /berita/*                β†’ Astro
Pembaca β†’ Cloudflare─
                    β”œβ”€ /perusahaan/*            β†’ CI3     (server lama)
                    └─ semua sisanya            β†’ CI3
                              β”‚
                              └─ satu MySQL, dipakai keduanya
Cloudflare β†’ Rules β†’ Origin Rules

Aturan 1:
  Ekspresi : (starts_with(http.request.uri.path, "/berita")
              or starts_with(http.request.uri.path, "/masuk")
              or starts_with(http.request.uri.path, "/daftar")
              or starts_with(http.request.uri.path, "/akun")
              or starts_with(http.request.uri.path, "/_actions")
              or starts_with(http.request.uri.path, "/_server-islands")
              or starts_with(http.request.uri.path, "/_astro"))
  Origin   : astro-origin.portal.contoh.id

(Tanpa aturan yang cocok, trafik menuju origin default: CI3.)

Origin Rules mengubah ke mana request dikirim, bukan URL-nya. Pembaca tetap melihat portal.contoh.id/berita/rupiah-menguat; hanya server yang melayaninya yang berbeda. Tidak ada redirect, tidak ada perubahan URL, tidak ada dampak SEO β€” inilah yang membedakannya dari memindahkan bagian situs ke subdomain.

Urutan pemindahan

TahapYang dipindahRisikoKenapa urutan ini
1Halaman statis: tentang, S&K, kebijakanSangat rendahMembuktikan pipeline deploy bekerja
2Login, daftar, akunSedangSesi bersama harus hidup sebelum yang lain
3Halaman artikelSedangVolume terbesar; di sini keuntungan cache muncul
4Beranda & kategoriSedangSetelah halaman artikel terbukti stabil
5Data perusahaanRendahTrafik lebih kecil
6Langganan & pembayaranTinggiMenyentuh uang; pindahkan setelah semua stabil
7Panel redaksiSedangPenggunanya sedikit dan bisa diberi tahu
8Matikan CI3β€”Setelah beberapa minggu tanpa trafik ke sana

Tahap 2 sebelum tahap 3 itu wajib, bukan preferensi. Kalau halaman artikel pindah lebih dulu sementara login masih di CI3, maka paywall di Astro tidak bisa membaca sesi yang dibuat CI3 β€” dan setiap member yang membayar akan melihat paywall. Pindahkan yang membuat sesi lebih dulu, lalu yang membacanya. Mekanismenya di Fase 5.

Menguji tanpa mempengaruhi pembaca

Aturan uji β€” hanya untuk yang punya cookie khusus:

Ekspresi : (starts_with(http.request.uri.path, "/berita")
            and http.cookie contains "uji-astro=1")
Origin   : astro-origin.portal.contoh.id

Setel cookie itu di peramban tim lewat konsol, dan seluruh tim bisa memakai versi Astro di domain produksi, dengan data produksi, sementara pembaca tetap dilayani CI3. Ini cara termurah menguji dengan kondisi sungguhan.

// Jalankan di konsol peramban
document.cookie = "uji-astro=1; path=/; max-age=86400; secure";

Peluncuran bertahap per persentase

Ekspresi : (starts_with(http.request.uri.path, "/berita")
            and cf.random_seed lt 0.05)
Origin   : astro-origin.portal.contoh.id

Lima persen dulu, pantau semalaman, naikkan ke 25%, 50%, 100%. Yang dipantau di tiap tahap:

MetrikSumberBatal kalau
Tingkat error 5xxCloudflare AnalyticsNaik dibanding CI3
Latensi p95AnalyticsLebih buruk dari CI3
Error perayapanSearch ConsoleNaik sama sekali
Konversi langgananAplikasiTurun
Cache hit ratioAnalyticsTidak naik seperti yang diharapkan

Peringatan tentang cf.random_seed: ia acak per request, bukan per pembaca. Artinya satu pembaca bisa mendapat Astro untuk satu artikel dan CI3 untuk artikel berikutnya. Untuk halaman baca yang tampilannya mirip, itu bisa diterima. Untuk alur yang berkelanjutan β€” pendaftaran, pembayaran β€” tidak: pakai cookie yang disetel sekali, atau jangan pakai peluncuran bertahap sama sekali untuk jalur itu.

Yang harus konsisten di kedua sistem

HalCara menjaganya
SesiTabel sesi bersama (Fase 5)
Bentuk URLAstro memakai pola URL yang sama persis; kalau berubah, redirect (materi berikutnya)
TampilanCSS bersama, atau terima perbedaan kecil selama transisi
AnalitikID properti yang sama, supaya laporannya tidak terpecah
Skema databaseKompatibel dua arah β€” semua aturan Fase 2 berlaku
Slot iklanID unit yang sama, supaya pendapatannya bisa dibandingkan

Header untuk membedakan

// Di middleware Astro
res.headers.set("X-Dilayani", "astro");
// Di CI3
header('X-Dilayani: ci3');
for p in / /berita/uji /perusahaan/BBCA /akun /langganan; do
  printf '%-20s %s\n' "$p" "$(curl -sI "https://portal.contoh.id$p" | grep -i x-dilayani)"
done

Satu perintah memberi peta jelas tentang bagian mana yang sudah pindah. Selama migrasi berbulan-bulan, ini menghapus banyak kebingungan β€” termasuk saat menelusuri bug dan tidak yakin sistem mana yang menghasilkannya.

Rollback

Nonaktifkan Origin Rule β†’ trafik kembali ke CI3 dalam hitungan detik.
Prasyarat rollback yang bekerjaCatatan
CI3 tetap berjalan dan ter-deployJangan matikan sampai berminggu-minggu setelah 100%
Skema database tetap kompatibelMigrasi yang menghapus kolom membuat rollback mustahil
Sesi tetap bisa dibaca keduanyaβ€”
Tidak ada data yang hanya dipahami AstroKolom baru harus opsional bagi CI3

Baris kedua adalah yang paling sering merusak rencana rollback. Setelah dua bulan berjalan dengan Astro, seseorang menjalankan migrasi yang membersihkan kolom lama β€” dan sejak saat itu rollback bukan lagi "ubah satu aturan" melainkan "pulihkan database". Tunda semua migrasi yang merusak kompatibilitas sampai CI3 benar-benar dimatikan.

Latihan: siapkan subdomain astro-origin yang menunjuk ke ALB atau Tunnel-mu (abu-abu, tidak di-proxy), lalu buat Origin Rule berbasis cookie uji-astro=1 untuk satu jalur. Verifikasi dengan header X-Dilayani bahwa kamu mendapat Astro sementara jendela penyamaran mendapat CI3. Lalu latih rollback-nya: matikan aturannya dan ukur berapa detik sampai X-Dilayani berubah.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.