Skip to content

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 migrate di 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 โ€‹

  1. Kunjungi railway.app
  2. Klik "Start a New Project"
  3. Login menggunakan akun GitHub (pilihan ini untuk kemudahan integrasi)
  4. Verifikasi email jika diminta

Step 2: Buat Project Baru โ€‹

  1. Di dashboard Railway, klik "New Project"
  2. Pilih "Deploy from GitHub repo"
  3. Cari dan pilih repository simas milikmu
  4. 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 โ€‹

  1. Di dashboard project, klik "+ New"
  2. Pilih "Database" โ†’ "Add MySQL"
  3. Railway akan otomatis membuat database MySQL dan menghubungkannya ke project

Setelah MySQL tersedia, klik pada service MySQL โ†’ tab "Variables" untuk melihat kredensial:

  • MYSQLHOST
  • MYSQLPORT
  • MYSQL_DATABASE
  • MYSQLUSER
  • MYSQL_ROOT_PASSWORD

Step 4: Konfigurasi Environment Variables โ€‹

Klik pada service aplikasi Laravel โ†’ tab "Variables" โ†’ tambahkan variabel berikut:

text
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=database

NOTE

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:

json
{
  "$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=$PORT

Dan jalankan migration via Railway CLI atau melalui deployment script.


Step 7: Push dan Trigger Deploy โ€‹

bash
git add railway.json
git commit -m "chore: add railway deployment config"
git push origin main

Setelah 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:

LogArtinya
Build successfulProses build selesai โœ…
php artisan migrate (tanpa error)Database migration berhasil โœ…
SQLSTATE[HY000]Masalah koneksi database โŒ
No application encryption keyAPP_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

bash
# Jalankan di lokal, copy hasilnya ke Railway Variables
php artisan key:generate --show

Problem: 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:link dijalankan saat startup (sudah ada di startCommand)
  • Cek apakah konfigurasi FILESYSTEM_DISK=public sudah 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.

Program Magang SMK RPL โ€” Rekayasa Perangkat Lunak (2 Bulan)