Day 27 โ Deploy ke Railway: Aplikasi Laravel Pertamamu Online! โ
Fase: 3 โ Deployment | Minggu: 6 | Hari: Selasa
๐ฏ Tujuan Hari Ini โ
- Mendaftar dan memahami platform Railway.app sebagai PaaS (Platform as a Service).
- Menghubungkan repository GitHub ke Railway dan melakukan deploy pertama.
- Mengkonfigurasi environment variables (
.env) di dashboard Railway. - Menjalankan
php artisan migratedi environment production. - Memiliki URL publik aplikasi SIMAS yang dapat diakses dari mana saja.
๐ Penjelasan: Apa itu Railway? โ
Railway.app adalah platform cloud modern yang memungkinkan developer men-deploy aplikasi web hanya dengan menghubungkan repository GitHub โ tanpa perlu mengkonfigurasi server secara manual. Railway akan otomatis mendeteksi bahwa proyekmu adalah aplikasi PHP/Laravel.
Keunggulan Railway untuk pembelajaran:
- ๐ Tier gratis tersedia (500 jam/bulan โ lebih dari cukup untuk demo)
- ๐ Deploy otomatis setiap kali kamu push ke GitHub
- ๐๏ธ Tersedia MySQL dan PostgreSQL managed database
- ๐ SSL/HTTPS otomatis
- ๐ Dashboard monitoring sederhana
๐ง Step-by-Step Deploy ke Railway โ
Step 1: Daftar Akun Railway โ
- Kunjungi railway.app
- Klik "Start a New Project"
- Login menggunakan akun GitHub (pilihan ini untuk kemudahan integrasi)
- Verifikasi email jika diminta
Step 2: Buat Project Baru โ
- Di dashboard Railway, klik "New Project"
- Pilih "Deploy from GitHub repo"
- Cari dan pilih repository
simasmilikmu - Klik "Deploy Now"
Railway akan mulai proses build. Pada tahap ini kemungkinan akan gagal โ itu normal! Kita belum mengkonfigurasi environment variables.
Step 3: Tambahkan Database MySQL โ
- Di dashboard project, klik "+ New"
- Pilih "Database" โ "Add MySQL"
- Railway akan otomatis membuat database MySQL dan menghubungkannya ke project
Setelah MySQL tersedia, klik pada service MySQL โ tab "Variables" untuk melihat kredensial:
MYSQLHOSTMYSQLPORTMYSQL_DATABASEMYSQLUSERMYSQL_ROOT_PASSWORD
Step 4: Konfigurasi Environment Variables โ
Klik pada service aplikasi Laravel โ tab "Variables" โ tambahkan variabel berikut:
APP_NAME=SIMAS
APP_ENV=production
APP_KEY= โ Generate dengan: php artisan key:generate --show
APP_DEBUG=false
APP_URL=https://URL-yang-diberikan-railway.railway.app
DB_CONNECTION=mysql
DB_HOST=${{MySQL.MYSQLHOST}} โ Railway bisa reference antar service!
DB_PORT=${{MySQL.MYSQLPORT}}
DB_DATABASE=${{MySQL.MYSQL_DATABASE}}
DB_USERNAME=${{MySQL.MYSQLUSER}}
DB_PASSWORD=${{MySQL.MYSQL_ROOT_PASSWORD}}
FILESYSTEM_DISK=public
SESSION_DRIVER=database
CACHE_STORE=databaseNOTE
Railway mendukung reference variables antar service menggunakan sintaks ${{ServiceName.VARIABLE}}. Ini jauh lebih aman karena kamu tidak perlu copy-paste password manual.
Step 5: Tambahkan railway.json untuk Konfigurasi Build โ
Buat file railway.json di root project:
{
"$schema": "https://railway.app/railway.schema.json",
"build": {
"builder": "NIXPACKS"
},
"deploy": {
"startCommand": "php artisan migrate --force && php artisan storage:link && php artisan serve --host=0.0.0.0 --port=$PORT",
"restartPolicyType": "ON_FAILURE",
"restartPolicyMaxRetries": 10
}
}IMPORTANT
--force pada php artisan migrate --force diperlukan karena di production, Laravel secara default meminta konfirmasi interaktif sebelum menjalankan migration. Flag --force melewati konfirmasi tersebut.
Step 6: Tambahkan Procfile (Alternatif) โ
Jika railway.json tidak bekerja, alternatifnya buat file Procfile di root project:
web: php artisan serve --host=0.0.0.0 --port=$PORTDan jalankan migration via Railway CLI atau melalui deployment script.
Step 7: Push dan Trigger Deploy โ
git add railway.json
git commit -m "chore: add railway deployment config"
git push origin mainSetelah push, Railway akan otomatis melakukan redeploy. Monitor log build di dashboard Railway.
๐ Membaca Log Build di Railway โ
Di tab "Deployments" โ klik deployment terbaru โ lihat log. Berikut beberapa pesan umum:
| Log | Artinya |
|---|---|
Build successful | Proses build selesai โ |
php artisan migrate (tanpa error) | Database migration berhasil โ |
SQLSTATE[HY000] | Masalah koneksi database โ |
No application encryption key | APP_KEY belum diset โ |
๐งช Verifikasi Deploy Berhasil โ
- [ ] Railway menampilkan status "Active" dengan warna hijau
- [ ] URL domain tersedia (misal:
https://simas-production.up.railway.app) - [ ] Membuka URL tersebut menampilkan halaman home SIMAS
- [ ] Halaman login/register berfungsi
- [ ] Data tidak ada dulu (karena database baru) โ ini normal
๐ Troubleshooting Umum โ
Problem: APP_KEY error
# Jalankan di lokal, copy hasilnya ke Railway Variables
php artisan key:generate --showProblem: Database connection refused
- Pastikan semua variabel DB sudah terisi dengan benar
- Periksa apakah service MySQL sudah berjalan (hijau) di dashboard
Problem: Storage permission error
- Pastikan
storage:linkdijalankan saat startup (sudah ada distartCommand) - Cek apakah konfigurasi
FILESYSTEM_DISK=publicsudah diset
TIP
Jika Railway tidak cocok atau ada kendala, alternatif gratis lainnya adalah Render.com dengan setup yang hampir sama. Dokumentasi resmi tersedia di render.com/docs/deploy-laravel.