Menjalankan aplikasi Laravel di lingkungan lokal (local development) menggunakan Docker adalah langkah tepat untuk menjaga konsistensi environment. Namun, saat tiba waktunya melakukan deployment ke server produksi, sebagian pengembang sering kali merasa kewalahan jika harus mengonfigurasi VPS Linux secara manual dari nol.
Di sisi lain, shared hosting konvensional umumnya tidak mendukung runtime Docker. Untuk mengatasi dilema ini, Fly.io hadir sebagai solusi Platform as a Service (PaaS) modern. Fly.io memungkinkan kita mengunggah container Docker secara langsung dan mengubahnya menjadi microVM yang cepat serta efisien.
Artikel ini membahas panduan praktis meluncurkan aplikasi Laravel berbasis Docker ke Fly.io, mulai dari persiapan awal hingga eksekusi perintah penting di server.
Mengapa Memilih Fly.io untuk Laravel?
Fly.io menawarkan beberapa keunggulan teknis yang relevan bagi pengembang Laravel:
- Dukungan Docker Native: Aplikasi yang sudah dilengkapi dengan
Dockerfiledapat langsung di-deploy tanpa perlu mengubah arsitektur aplikasi. - Pilihan Region Terdekat: Tersedia pilihan region Singapore (
sin) yang memberikan latensi sangat rendah bagi pengguna di Indonesia. - Konfigurasi Deklaratif: Seluruh instruksi deployment tersimpan dengan rapi di dalam file
fly.toml. - Kemudahan Manajemen Server: Tugas-tugas seperti build image, pembuatan sertifikat SSL/HTTPS, hingga pembuatan release command ditangani secara otomatis oleh platform.
Langkah 1: Persiapan CLI Fly.io
Seluruh interaksi dengan platform Fly.io dilakukan melalui terminal menggunakan alat baris perintah bernama flyctl.
Buka terminal di komputer Anda dan pasang flyctl:
- Windows (PowerShell):
pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex" - Linux / WSL / macOS:
curl -L https://fly.io/install.sh | sh
Setelah instalasi selesai, lakukan autentikasi akun:
fly auth login
Terminal akan membuka jendela peramban untuk mengonfirmasi proses login Anda.
Langkah 2: Inisialisasi Proyek (fly launch)
Navigasikan terminal ke folder utama proyek Laravel Anda, lalu jalankan perintah inisialisasi:
fly launch
Sistem Fly.io akan mendeteksi keberadaan Dockerfile secara otomatis dan mengajukan beberapa pertanyaan di terminal:
- App Name: Tentukan nama aplikasi yang unik (contoh:
my-laravel-app). - Region: Pilih region Singapore (sin) untuk performa optimal.
- Database: Pilih untuk membuat database (seperti Fly Postgres atau MySQL) sesuai kebutuhan aplikasi.
- Deploy now?: Pilih No (
N) terlebih dahulu karena kita perlu menyesuaikan variabel lingkungan (environment variables) sebelum aplikasi benar-benar diluncurkan.
Proses ini akan menghasilkan sebuah berkas konfigurasi baru bernama fly.toml pada akar direktori proyek.
Langkah 3: Menyesuaikan File fly.toml
Buka berkas fly.toml pada editor kode Anda. File ini mengontrol perilaku container di server.
Tambahkan instruksi migrasi otomatis di bawah bagian [deploy], serta pastikan pemetaan port mengarah ke port webserver yang digunakan pada Dockerfile (umumnya port 80 atau 8080):
app = "my-laravel-app"
primary_region = "sin"
[build]
dockerfile = "Dockerfile"
[deploy]
# Menjalankan migrasi database otomatis setiap kali deployment berhasil
release_command = "php artisan migrate --force"
[http_service]
internal_port = 80
force_https = true
auto_stop_machines = true
auto_start_machines = true
min_machines_running = 0
processes = ["app"]
Langkah 4: Mengatur Environment Variables (fly secrets)
Kunci enkripsi (APP_KEY) dan kredensial sensitif lainnya tidak boleh ditulis langsung di dalam file fly.toml demi alasan keamanan. Gunakan fitur secrets untuk menyimpannya secara terenkripsi:
fly secrets set \
APP_KEY="base64:IsiDenganAppKeyLaravelAnda" \
APP_ENV=production \
APP_DEBUG=false \
DB_CONNECTION=mysql \
DB_HOST=nama-db-anda.flycast \
DB_DATABASE=laravel_db \
DB_USERNAME=root \
DB_PASSWORD=password_db_anda
Langkah 5: Proses Deployment (fly deploy)
Setelah seluruh variabel dikonfigurasi, jalankan proses peluncuran utama:
fly deploy
Fly.io akan mengeksekusi langkah-langkah berikut secara otomatis:
- Membaca file
Dockerfiledan membangun image di lingkungan cloud. - Mengunggah image ke registry internal Fly.
- Menjalankan perintah migrasi (
php artisan migrate --force). - Menerbitkan aplikasi ke domain publik berprotokol HTTPS (
https://nama-app.fly.dev).
Manajemen Aplikasi & Perintah Penting
Setelah aplikasi aktif, Anda dapat mengelolanya menggunakan beberapa perintah flyctl berikut:
- Mengecek Status Server:
fly status - Melihat Log Aplikasi Real-time:
fly logs - Masuk ke SSH Console Kontainer:
Jika Anda perlu menjalankan perintahphp artisansecara manual (seperti membersihkan cache atau membuat symlink storage), masuk ke dalam container menggunakan:
Setibanya di dalam shell, Anda dapat menjalankan perintah standar Laravel:fly ssh consolephp artisan config:cache php artisan route:cache php artisan storage:link exit
Kesimpulan
Menggunakan Fly.io memberikan keseimbangan ideal antara kemudahan pengelolaan cloud platform dan fleksibilitas container Docker. Pengembang tidak perlu lagi dipusingkan oleh pemeliharaan infrastruktur VPS, namun tetap mendapatkan kendali penuh atas environment tempat aplikasi Laravel berjalan.
