TKK_E32231503/backend/DEPLOY_PERBAIKAN.md

6.6 KiB

Deploy Perbaikan Control Commands ke Railway

Perubahan yang Dilakukan

Backend sekarang subscribe ke topic novil/pengering/control
Handler untuk menyimpan pesan control ke database control_commands
Handler untuk update status relay dari ESP32

Cara Deploy ke Railway

1. Commit Perubahan

cd c:\Users\abilh\aplikasi_novil

# Cek status
git status

# Add file yang berubah
git add backend/server.js
git add PERBAIKAN_CONTROL_COMMANDS.md
git add backend/DEPLOY_PERBAIKAN.md

# Commit
git commit -m "Fix: Subscribe to control topic and save to database"

# Push ke repository
git push origin main

2. Railway Auto-Deploy

  • Railway akan otomatis detect perubahan
  • Build dan deploy akan berjalan otomatis
  • Tunggu hingga status "Deployed" (biasanya 2-3 menit)

3. Verifikasi Deployment

# Cek health check
curl https://your-railway-app.up.railway.app/

# Cek stats
curl https://your-railway-app.up.railway.app/api/stats

Opsi 2: Deploy via Railway CLI

1. Install Railway CLI (jika belum)

# Windows (PowerShell)
iwr https://railway.app/install.ps1 | iex

2. Login ke Railway

railway login
cd c:\Users\abilh\aplikasi_novil\backend
railway link

4. Deploy

railway up

5. Cek Logs

railway logs

Opsi 3: Manual Upload via Railway Dashboard

1. Buka Railway Dashboard

2. Buka Service Backend

  • Klik service backend Anda
  • Pilih tab "Deployments"

3. Trigger Redeploy

  • Klik tombol "Deploy" atau "Redeploy"
  • Pilih branch yang benar (main/master)
  • Railway akan pull code terbaru dan deploy

Verifikasi Setelah Deploy

1. Cek Logs Railway

Di Railway Dashboard → Service → Logs, pastikan muncul:

✅ Subscribed to topics:
   - novil/pengering/data
   - novil/pengering/status
   - novil/pengering/button
   - novil/pengering/control  ← HARUS ADA INI

2. Test API Health Check

# Ganti dengan URL Railway Anda
curl https://your-app.up.railway.app/

Response:

{
  "status": "OK",
  "message": "Pengering Ikan Backend Server - MQTT Client Enabled",
  "version": "1.0.1",
  "uptime": 123.45,
  "timestamp": "2026-05-29T10:30:00.000Z"
}

3. Test Stats API

curl https://your-app.up.railway.app/api/stats

Response harus include:

{
  "success": true,
  "stats": {
    "mqttConnected": true,
    "sensorDataCount": 100,
    "statusHistoryCount": 50,
    "controlCommandsCount": 10,   HARUS ADA INI
    ...
  }
}

4. Test Control Command

# Kirim command test
curl -X POST https://your-app.up.railway.app/api/control \
  -H "Content-Type: application/json" \
  -d '{"command":"HEATER_ON"}'

Response:

{
  "success": true,
  "message": "Command sent successfully",
  "command": "HEATER_ON"
}

5. Cek Database Railway

Login ke Railway MySQL:

# Via Railway CLI
railway connect MySQL

Atau via Railway Dashboard → MySQL → Connect → Copy connection string

Query untuk verifikasi:

-- Cek apakah ada data di control_commands
SELECT COUNT(*) as total FROM control_commands;

-- Lihat 10 command terakhir
SELECT * FROM control_commands ORDER BY timestamp DESC LIMIT 10;

-- Lihat status relay terakhir
SELECT * FROM status_history 
WHERE message LIKE 'RELAY:%' 
ORDER BY timestamp DESC LIMIT 10;

Testing dengan ESP32

1. Update Kode ESP32 (jika perlu)

Pastikan ESP32 menggunakan URL Railway yang benar:

// Di file esp32_pengering_ikan_railway.ino
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;

2. Upload ke ESP32

# Via Arduino IDE atau PlatformIO
# Upload esp32_pengering_ikan_v2.ino

3. Monitor Serial ESP32

Buka Serial Monitor (115200 baud), pastikan muncul:

WiFi Connected
MQTT Connected
Heater → ON
Fan → ON
Data sent: {"suhu":28.5,"berat":450,...}

4. Cek Railway Logs Real-time

Di Railway Dashboard → Logs, pastikan muncul:

📨 MQTT Message received:
   Topic: novil/pengering/control
   Message: STATUS:HEATER_ON
🎛️  Control Message: STATUS:HEATER_ON
📊 Relay Status Update: HEATER_ON
✅ Relay status saved to MySQL database

Troubleshooting

Logs tidak muncul "Subscribed to control topic"

Solusi:

  1. Pastikan file server.js sudah ter-commit dan ter-push
  2. Trigger manual redeploy di Railway Dashboard
  3. Cek Railway logs untuk error

Database connection failed

Solusi:

  1. Cek environment variables di Railway Dashboard
  2. Pastikan MySQL plugin sudah ter-install
  3. Verifikasi DATABASE_URL atau MYSQL* variables ada

MQTT not connected

Solusi:

  1. Cek MQTT_BROKER_URL di Railway environment variables
  2. Default: mqtt://broker.hivemq.com:1883
  3. Pastikan Railway tidak block port 1883

Control commands tidak masuk database

Solusi:

  1. Cek Railway logs: railway logs
  2. Pastikan ESP32 kirim ke topic yang benar: novil/pengering/control
  3. Verifikasi database table control_commands sudah ada:
    SHOW TABLES;
    DESCRIBE control_commands;
    

Checklist Deployment

  • Commit perubahan server.js
  • Push ke Git repository
  • Railway auto-deploy selesai (status: Deployed)
  • Cek logs: "Subscribed to control topic" muncul
  • Test API health check berhasil
  • Test API stats menunjukkan controlCommandsCount
  • Test kirim command via API berhasil
  • Database table control_commands ada data
  • ESP32 connect ke MQTT berhasil
  • ESP32 kirim status relay, muncul di Railway logs
  • Database control_commands bertambah saat ESP32 kirim status

URL Penting

Ganti dengan URL Railway Anda:

  • Backend API: https://your-app.up.railway.app
  • Health Check: https://your-app.up.railway.app/
  • Stats: https://your-app.up.railway.app/api/stats
  • Control: https://your-app.up.railway.app/api/control
  • Data History: https://your-app.up.railway.app/api/data/history

Setelah Deploy Berhasil

  1. Update dokumentasi dengan URL Railway yang benar
  2. Test dengan Flutter app (jika ada)
  3. Monitor logs Railway untuk memastikan tidak ada error
  4. Setup monitoring/alerting (optional)
  5. Backup database secara berkala

Kontak & Support

Jika ada masalah:

  1. Cek Railway logs: railway logs
  2. Cek Railway Dashboard → Service → Logs
  3. Cek Railway Dashboard → MySQL → Metrics
  4. Review dokumentasi: PERBAIKAN_CONTROL_COMMANDS.md