6.2 KiB
6.2 KiB
✅ Railway Configuration - Verified
🎯 Environment Variables di Railway Anda
Railway Anda sudah menggunakan format yang BENAR dan SUDAH DIDUKUNG oleh backend:
DB_HOST=mysql.railway.internal
DB_NAME=railway
DB_PASSWORD=jIRceppgKCeUdEAjeYtzLaiAdPbBhDPX
DB_PORT=3306
DB_USER=root
MQTT_PORT=1883
NODE_ENV=production
WS_PORT=8883
✅ Backend otomatis detect dan gunakan variables ini!
🔍 Penjelasan Variables
Database Variables (MySQL):
| Variable | Value | Keterangan |
|---|---|---|
DB_HOST |
mysql.railway.internal |
Internal hostname Railway MySQL |
DB_PORT |
3306 |
Port MySQL standard |
DB_USER |
root |
Username MySQL |
DB_PASSWORD |
jIRc...hDPX |
Password MySQL (disembunyikan) |
DB_NAME |
railway |
Nama database |
Server Variables:
| Variable | Value | Keterangan |
|---|---|---|
NODE_ENV |
production |
Environment mode |
MQTT_PORT |
1883 |
Port MQTT broker (tidak digunakan di Railway) |
WS_PORT |
8883 |
Port WebSocket MQTT (tidak digunakan di Railway) |
📝 Catatan Penting
1. mysql.railway.internal
Ini adalah internal hostname Railway untuk MySQL.
- ✅ Hanya bisa diakses dari dalam Railway network
- ✅ Lebih cepat dan aman
- ✅ Tidak perlu expose ke public
2. MQTT_PORT dan WS_PORT
Railway TIDAK SUPPORT custom ports untuk MQTT broker.
- ❌ Port 1883 dan 8883 tidak bisa digunakan di Railway
- ✅ Solusi: Gunakan HiveMQ Cloud (public MQTT broker)
- ✅ ESP32 connect ke
broker.hivemq.com - ✅ Backend hanya handle REST API, tidak host MQTT broker
3. Database Name: railway
Railway otomatis create database dengan nama railway.
- ✅ Backend sudah support ini
- ✅ Tidak perlu ganti nama database
🚀 Cara Kerja Backend di Railway
1. Backend Startup
// Backend baca environment variables
DB_HOST=mysql.railway.internal
DB_PORT=3306
DB_USER=root
DB_PASSWORD=jIRc...
DB_NAME=railway
// Backend connect ke MySQL
📦 Using individual environment variables for connection
🔧 Database Config: {
host: 'mysql.railway.internal',
port: 3306,
user: 'root',
database: 'railway',
password: '***'
}
✅ Database connected successfully
✅ Database tables initialized
2. Backend Create Tables
Backend otomatis create 3 tables di database railway:
sensor_data- Data sensor dari ESP32status_history- Riwayat statuscontrol_commands- Riwayat command
3. Backend Ready
🚀 REST API running on port 3000
📡 MQTT Broker: mqtt://localhost:1883 (DISABLED di Railway)
🌐 WebSocket MQTT: ws://localhost:8883 (DISABLED di Railway)
✅ Server is ready!
🔄 Flow Komunikasi
ESP32 → Backend (via MQTT Public Broker)
ESP32:
├── Connect ke broker.hivemq.com (PUBLIC)
└── Publish data ke topic: novil/pengering/data
Backend di Railway:
├── Connect ke broker.hivemq.com (PUBLIC)
├── Subscribe topic: novil/pengering/data
├── Terima data dari ESP32
└── Simpan ke MySQL (mysql.railway.internal)
Flutter → Backend (via REST API)
Flutter:
└── POST https://web-production-47eb.up.railway.app/api/control
Backend di Railway:
├── Terima REST API request
├── Simpan command ke MySQL
└── Publish command ke broker.hivemq.com
ESP32:
└── Terima command dari broker.hivemq.com
🧪 Test Connection
1. Test Database Connection
curl https://web-production-47eb.up.railway.app/api/database/test
Expected Response:
{
"success": true,
"message": "Database connection successful"
}
2. Initialize Database Tables
curl -X POST https://web-production-47eb.up.railway.app/api/database/init
Expected Response:
{
"success": true,
"message": "Database tables initialized successfully"
}
3. Check Server Status
curl https://web-production-47eb.up.railway.app/
Expected Response:
{
"status": "OK",
"message": "Pengering Ikan Backend Server",
"version": "1.0.0",
"uptime": 123.45,
"timestamp": "2026-05-28T10:30:00.000Z"
}
🛠️ Troubleshooting
Error: "Database connection failed"
Cek Railway Logs:
# Di Railway Dashboard:
# 1. Go to your service
# 2. Click "Deployments"
# 3. Click latest deployment
# 4. View logs
Cari log:
📦 Using individual environment variables for connection
🔧 Database Config: { ... }
❌ Database connection failed: ...
Solusi:
- Pastikan MySQL service running di Railway
- Pastikan environment variables benar
- Pastikan
mysql.railway.internalbisa diakses
Error: "Access denied for user 'root'"
Solusi:
- Cek
DB_PASSWORDbenar - Cek
DB_USERbenar - Restart MySQL service di Railway
Error: "Unknown database 'railway'"
Solusi:
- Database belum dibuat
- Connect ke MySQL via Railway CLI:
railway connect mysql - Create database:
CREATE DATABASE railway;
✅ Checklist Setup
- Environment variables sudah set di Railway
- Backend code sudah support
DB_*variables - Deploy backend ke Railway
- Test
/api/database/test - Initialize tables via
/api/database/init - Test insert data via ESP32
- Test query data via
/api/data/latest
🎯 Next Steps
1. Deploy Backend
cd backend
git add .
git commit -m "Update database config untuk Railway"
git push
2. Wait for Railway Deploy
Railway akan auto-deploy (2-3 menit).
3. Test Endpoints
# Health check
curl https://web-production-47eb.up.railway.app/
# Test database
curl https://web-production-47eb.up.railway.app/api/database/test
# Initialize tables
curl -X POST https://web-production-47eb.up.railway.app/api/database/init
4. Check Logs
Di Railway Dashboard, cek logs untuk:
✅ Database connected successfully
✅ Database tables initialized
✅ Server is ready!
🎉 Done!
Konfigurasi Railway Anda sudah BENAR dan SIAP DIGUNAKAN!
Backend akan otomatis:
- ✅ Connect ke MySQL di
mysql.railway.internal - ✅ Create tables di database
railway - ✅ Handle REST API requests
- ✅ Connect ke MQTT broker public (HiveMQ)
Tinggal deploy dan test! 🚀