Cara Mencegah Project Supabase Gratis Pause dengan Cloudflare Cron Trigger

Project Supabase paket gratis otomatis di-pause kalau database-nya sepi selama 7 hari. Datanya tidak hilang, tetapi situs atau aplikasi yang memakainya langsung mati sampai project dinyalakan ulang secara manual. Cara paling hemat untuk mencegahnya adalah menjadwalkan permintaan kecil ke database beberapa kali sehari dengan Cloudflare Cron Trigger: gratis, tanpa server sendiri, dan tanpa layanan pihak ketiga.
Kenapa project Supabase bisa pause?
- Batasnya 7 hari. Project di paket Free dianggap tidak aktif jika aktivitas database dari pengguna kurang selama satu minggu. Menurut dokumentasi Supabase, beberapa permintaan ke database setiap hari biasanya sudah cukup.
- Yang dihitung aktivitas adalah panggilan API ke project, permintaan dari aplikasi yang terhubung, atau membuka project di dashboard.
- Data tetap aman. Project yang di-pause menyimpan data dan konfigurasinya, dan bisa dipulihkan lewat tombol Resume project di dashboard. Supabase juga mengirim email peringatan sekitar seminggu sebelumnya.
- Paket berbayar tidak terkena aturan ini. Jadi cara di bawah hanya diperlukan untuk project gratis.
Kenapa memakai Cloudflare Cron Trigger?
Cron Trigger menjalankan Worker secara terjadwal dengan format cron biasa. Paket Workers Free mengizinkan 5 Cron Trigger per akun, cukup untuk beberapa project sekaligus. Dibanding layanan ping pihak ketiga, kunci API tetap tersimpan di akun Cloudflare Anda sendiri. Dibanding GitHub Actions, jadwalnya tidak ikut mati ketika repositori lama tidak ada aktivitas.
Catatan: Cloudflare Pages tidak bisa menjalankan cron. Kalau situs Anda di Pages, buat Worker terpisah seperti di bawah, atau tumpangkan ke Worker lain yang sudah Anda punya.
Langkah 1: Siapkan tabel yang bisa dibaca
Pilih satu tabel kecil yang boleh dibaca publik lewat RLS, misalnya tabel pengaturan situs. Permintaan ping hanya membaca satu baris, jadi tidak membebani database. Catat juga Project URL dan publishable key (atau anon key pada project lama) dari menu Project Settings > API Keys.
Langkah 2: Buat Worker
Buat folder baru berisi dua file berikut. File pertama adalah konfigurasi Wrangler:
# wrangler.toml name = "supabase-keepalive" main = "src/index.js" compatibility_date = "2026-10-01" [triggers] crons = ["0 */6 * * *"] # tiap 6 jam (waktu UTC) [vars] SUPABASE_URL = "https://ID-PROJECT-ANDA.supabase.co" PING_TABLE = "settings"
File kedua adalah kode Worker. Handler scheduled dipanggil oleh jadwal cron, lalu membaca satu baris dari tabel lewat REST API Supabase:
// src/index.js
export default {
async scheduled(controller, env, ctx) {
ctx.waitUntil(ping(env));
}
};
async function ping(env) {
const url = `${env.SUPABASE_URL}/rest/v1/${env.PING_TABLE}?select=*&limit=1`;
const res = await fetch(url, { headers: { apikey: env.SUPABASE_KEY } });
if (!res.ok) {
throw new Error(`Ping gagal: ${res.status} ${await res.text()}`);
}
console.log('Ping Supabase OK', res.status);
}
Langkah 3: Simpan kunci dan deploy
Kunci API disimpan sebagai secret, bukan di wrangler.toml, supaya tidak ikut tersimpan di repositori:
npx wrangler login npx wrangler secret put SUPABASE_KEY # tempel publishable/anon key npx wrangler deploy
Perubahan jadwal cron butuh waktu sampai sekitar 15 menit untuk aktif di seluruh jaringan Cloudflare.
Langkah 4: Uji dan pantau
- Uji lokal: jalankan
npx wrangler dev, lalu bukahttp://localhost:8787/cdn-cgi/local/scheduled. Handlerscheduledakan langsung dijalankan dan hasilconsole.logmuncul di terminal. - Cek di dashboard: buka Workers & Pages, pilih Worker, lalu lihat riwayat eksekusi cron dan log-nya. Status gagal berarti URL, nama tabel, atau kuncinya perlu diperiksa.
- Cek di Supabase: menu Logs akan menampilkan permintaan GET ke tabel ping setiap 6 jam.
Tips tambahan
- Sudah punya Worker lain? Tambahkan saja handler
scheduleddan blok[triggers]ke Worker itu. Satu cron bisa melakukan beberapa tugas sekaligus, jadi kuota 5 Cron Trigger lebih awet. - Beberapa project Supabase? Panggil
ping()beberapa kali dengan URL dan kunci berbeda dalam satu handler. - Jadwal memakai UTC.
0 */6 * * *berjalan pukul 07.00, 13.00, 19.00, dan 01.00 WIB. Sekali sehari pun umumnya cukup, tetapi beberapa kali sehari memberi cadangan jika satu eksekusi gagal. - Gunakan kunci publik saja. Jangan memakai service role atau secret key untuk ping, karena kunci itu melewati RLS.
Cara ini cocok dipadukan dengan migrasi aplikasi dari Google Apps Script, karena setelah pindah ke Supabase project gratis Anda perlu tetap aktif (lihat artikel migrasi Apps Script ke Supabase).
Sumber: Project Pausing, Supabase Docs, Cron Triggers, Cloudflare Workers, dan Limits, Cloudflare Workers.