2.6 KiB
2.6 KiB
<<<<<<< HEAD
TelurKu Railway Scheduler
Worker Node.js untuk menjalankan penjadwalan panen otomatis di Railway.
Fungsi Utama
- Menjalankan cek jadwal setiap menit (timezone default
Asia/Jakarta). - Membaca jadwal aktif dari
kontrol/penjadwalan. - Membaca sensor dari
databerdasarkaninfraPathkandang (kontrol/kandang). - Menyimpan hasil ke:
panen_snapshot/{yyyy-MM-dd}riwayat/recordsriwayat/summary
- Mencegah duplikasi eksekusi dengan lock harian di
scheduler_runs/{yyyy-MM-dd}.
Struktur Folder
worker.js: engine scheduler + health endpointpackage.json: dependency dan start commandDockerfile: container build untuk Railway.dockerignore: optimasi image build.env.example: template environment variablesrailway.json: config deploy Railway
Environment Variables (Railway)
Gunakan nilai ini di Railway Variables:
PORT=3000TZ=Asia/JakartaSCHEDULER_ENABLED=trueFIREBASE_SERVICE_ACCOUNT_JSON=<json-service-account-penuh>(opsi paling mudah)FIREBASE_PROJECT_ID=telurku-fa78cFIREBASE_CLIENT_EMAIL=<service-account-email>FIREBASE_PRIVATE_KEY=<private-key-dengan-escaped-newline>FIREBASE_DATABASE_URL=https://telurku-fa78c-default-rtdb.asia-southeast1.firebasedatabase.app
Catatan untuk FIREBASE_PRIVATE_KEY:
- Gunakan format satu baris dengan
\n(lihat.env.example). - Jangan commit private key ke Git.
Catatan untuk FIREBASE_SERVICE_ACCOUNT_JSON:
- Bisa isi seluruh JSON service account dalam satu variable Railway.
- Tetap jangan taruh nilainya di source code atau file yang di-commit.
Deploy di Railway
- Buat service baru dari repo ini.
- Set Root Directory ke
railway-scheduler. - Railway bisa build via
Dockerfileatau Nixpacks. - Isi semua environment variables.
- Deploy.
- Cek log, pastikan muncul:
[init] Firebase Admin connected[init] Scheduler active
Health Check
- Endpoint:
/health - Response:
{ "ok": true, "service": "telurku-railway-scheduler" }
Local Test
cd railway-scheduler
npm install
cp .env.example .env
# isi env yang benar
npm start
Data Path yang Dipakai
- Read:
kontrol/penjadwalan - Read:
kontrol/kandang - Read:
data - Write:
riwayat/records - Write:
riwayat/summary - Write:
panen_snapshot/{date} - Write lock:
scheduler_runs/{date}
Reset Otomatis Sore
Setelah jadwal sore berhasil dieksekusi, worker akan me-reset:
data/infra1 = 0data/infra2 = 0
Ringkasan harian di riwayat/summary tetap disimpan untuk kebutuhan tampilan Flutter.
lurtelurku_backend
Deployment project for Railway
6d5419d62de4e76250a0a5160a8d0820de478a16