Bye bye, Heroku!
Seperti yang telah kita ketahui bersama, free tier dari Heroku Dynos, Postgres dan Data for Redis sudah tidak ada lagi setelah 28 November 2022. Tentunya hal ini mengecewakan kita semua sebagai pemakai Heroku yang setia untuk segala tugas kuliah. 🥹
Sudah dilakukan pencarian, penelitian, dan percobaan selama beberapa bulan belakangan oleh tim asisten dosen Pemrograman Berbasis Platform dan … susah sekali gais ternyata nyari PaaS yang nggak self-host dan bisa menyediakan kemampuan yang sama seperti free tier Heroku. 💔
Salah satu solusi yang “mendingan” adalah Railway. Kenapa “mendingan” (pakai tanda kutip)? Berikut adalah kelebihan dan kekurangan dari Railway.
- Plus
- Nggak butuh kartu kredit 🤩
- Mendukung migrasi dari Heroku secara out-of-the-box 😍
- Dukungan basis data (termasuk PostgreSQL)
- Menyediakan hosting secara gratis (tentunya dengan domain khusus)
- Aplikasi nyala terus (nggak kayak Heroku yang sengaja mematikan aplikasi jika tidak dipakai dalam kurun waktu tertentu) 🥳
- Minus
-
Per bulan cuma dikasih jatah USD 5 dan 500 jam running time; aplikasi akan dimatikan deployment-nya saat salah satu dari keduanya habis duluan.
Kalau diestimasi, aplikasi bisa nyala secara terus-menerus selama 20 harian per bulan.
Kalau udah mati, gimana? Harus restart ulang aplikasi secara manual, gais.
-
Yakin mau lanjut migrasi ke rel kereta api? Oke lanjut~
Konfigurasi Proyek
Diasumsikan proyek Django kamu bernama project_django
.
-
Buka file
Procfile
dan ubah isi file menjadi seperti berikut.web: python manage.py migrate && gunicorn project_django.wsgi
-
Jika kamu menggunakan templat https://github.com/laymonage/django-template-heroku, buka file
settings.py
yang ada pada folderproject_django/
perhatikan bagian berikut.ALLOWED_HOSTS = [f'{HEROKU_APP_NAME}.herokuapp.com']
Ubahlah menjadi seperti berikut ini.
ALLOWED_HOSTS = [f'{HEROKU_APP_NAME}.up.railway.app']
Jika kamu menggunakan templat dari PBP Ganjil 2022/2023 (https://github.com/pbp-fasilkom-ui/django-pbp-template), kamu tidak perlu melakukan langkah ini.
-
Hapus file workflow yang ada pada folder
.github/workflows/
(atau kalau mau, hapus saja foldernya sekalian). -
Jangan lupa untuk
add
-commit
-push
ke GitHub.
Registrasi Akun dan Impor Repositori
-
Buka situs web Railway dan klik tombol
New Project
. -
Klik pilihan
Deploy from GitHub repo
. -
Klik tombol
Login With GitHub
dan masuklah ke dalam akun GitHub kamu. -
Kamu akan kembali ke halaman pembuatan proyek baru. Klik pilihan
Deploy from GitHub repo
dan klikConfigure GitHub App
. -
Pilihlah organisasi kelompok kamu dan klik
Install & Authorize
. -
Kamu akan kembali ke halaman pembuatan proyek baru. Klik pilihan
Deploy from GitHub repo
dan pilih repositori proyek tengah semester kelompok kamu. -
Klik
Deploy Now
.
Impor Variabel Heroku
Jika kamu tidak memiliki environment variables pada proyek Heroku kamu, kamu dapat melewati langkah ini.
-
Buka servis web, klik
Variables
, tekan Control + K atau Command + K, dan pilih menuImport Variables From Heroku
. -
Klik
Connect
dan sesuaikan pengaturan sesuai akun dan proyek yang telah dibuat sebelumnya. -
Kamu akan kembali ke halaman utama. Tekan Control + K atau Command + K dan pilih menu
Import Variables From Heroku
. -
Pilih nama proyek tengah semester kamu yang kamu pakai di Heroku.
-
Hapus variabel
DATABASE_URL
karena kita akan memakai servis PostgreSQL dari Railway.
Ekspor Basis Data dari Heroku
Pastikan kamu telah menginstal PostgreSQL di komputer lokalmu.
-
Buka situs web Heroku dan buka proyek tengah semester kamu.
-
Buka menu
Resources
dan klikHeroku Postgres
. -
Buka menu
Settings
dan klikView Credentials…
. Simpanlah informasi mengenai basis data Heroku di suatu tempat (contohnya Notepad). -
Buka Terminal atau Command Prompt dan jalankan perintah berikut.
pg_dump -U <USERNAME> -h <HEROKU_DATABASE_HOST> -p <HEROKU_PORT> -W -F t <DATABASE_NAME> > heroku_dump
Membuat dan Mengimpor Basis Data di Railway
Pastikan kamu telah menginstal PostgreSQL di komputer lokalmu.
-
Bukalah halaman utama proyek di Railway dan tekan Control + K atau Command + K.
-
Pilih
New Service -> Database -> Add PostgreSQL
. -
Buka servis PostgreSQL dan buka menu
Variables
. Simpanlah informasi mengenai basis data Railway di suatu tempat (contohnya Notepad). -
Buka Terminal atau Command Prompt dan jalankan perintah berikut.
pg_restore --no-privileges --no-owner -U postgres -h <RAILWAY_DATABASE_HOST> -p <RAILWAY_PORT> -W -F t -d railway heroku_dump
Konfigurasi Tambahan: URL
-
Buka servis
web
dan buka menuSettings
. -
Perhatikan bagian
Domains
dan ubahlah URL sesuai dengan URL sebelumnya yang dipakai di Heroku.
Dah, kelar.
Troubleshooting
-
“500 Internal Server Error, kak 😭”
Buka
settings.py
dari main project dan perhatikan bagian berikut.STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Ubah menjadi seperti berikut.
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
Buka
Procfile
kamu dan ubahlah isinya menjadi seperti berikut.web: python manage.py migrate && python manage.py collectstatic --no-input && gunicorn <PROJECT_NAME>.wsgi
Jangan lupa untuk
add
-commit
-push
agar perubahan diterapkan kepada aplikasi kamu. -
“CSRF Verification Error, kak 😔”
Buka
settings.py
dari main project dan perhatikan bagian berikut.ALLOWED_HOSTS = ["*"]
Tambahkan bagian berikut di bawahnya.
CSRF_TRUSTED_ORIGINS = [f'https://{APP_NAME}.up.railway.app']
Buka proyek Railway kamu, buka servis web, buka bagian variabel, dan tambahkan variabel baru dengan nama
APP_NAME
dan isi value dengan nama app kamu yang kamu gunakan sebagai URL proyek.Jangan lupa untuk restart atau redeploy aplikasi kamu.
Trivia
Padahal aslinya hari ini (26 November 2022) mau nginep sama Ayah (kebetulan lagi di Jakarta), tapi kerjaan ini belum kelar 😭 yaudahlahya 😔