Bagaimana cara menerapkan aplikasi ke Heroku?
Tutorial ini membahas proses penerapan aplikasi berbasis Python ke Heroku. Dengan membaca artikel ini, Anda dapat memahami fungsi inti Heroku, proses penerapan aplikasi Heroku, dan cara menerapkan aplikasi ke Heroku.
Selain itu, ini memberikan instruksi tentang cara menggunakan aplikasi yang sama ke Back4app Containers – alternatif gratis yang bagus untuk Heroku.
Contents
- 1 Tujuan
- 2 Apa itu Heroku?
- 3 Pengaturan Proyek
- 4 Bagaimana cara menerapkan aplikasi ke Heroku?
- 5 Bagaimana cara menerapkan aplikasi ke Back4app Containers?
- 6 Kesimpulan
- 7 PERTANYAAN YANG SERING DIAJUKAN
- 8 Apa itu Heroku?
- 9 Bagaimana cara melakukan deployment aplikasi ke Heroku?
- 10 Apa itu Back4app Containers?
- 11 Bagaimana cara melakukan deployment aplikasi ke Back4app Containers?
Tujuan
Pada akhir tutorial ini, Anda akan dapat melakukannya:
- Memahami Heroku & fungsinya
- Menerapkan aplikasi Anda ke Heroku
- Pahami Wadah Back4app & fitur-fiturnya
- Menyebarkan aplikasi Anda ke Back4app Containers
- Tentukan layanan mana yang akan digunakan untuk aplikasi Anda
Apa itu Heroku?
Heroku, didirikan pada tahun 2007, adalah salah satu platform Platform sebagai Layanan (PaaS) yang paling andal. Platform cloud ini memungkinkan Anda untuk membangun, mengelola, menerapkan, dan menskalakan aplikasi dengan mudah.
Secara native mendukung Ruby, Python, Java, Clojure, Node, Scala, Go, dan PHP. Namun demikian, ini memungkinkan Anda untuk menggunakan bahasa pemrograman dan kerangka kerja lain melalui Docker.
Keunggulan utama Heroku meliputi kemudahan penggunaan, kemampuan penskalaan, fitur keamanan, add-on, Heroku CLI, dan berpusat pada pengembang.
Di sisi lain, Heroku sering dikritik karena harganya yang mahal, dukungan regional yang kurang memadai, dan ketinggalan dengan tren pengembangan terbaru.
Salah satu alasan utama mengapa Heroku sangat populer adalah karena menawarkan layanan gratis di masa lalu. Hingga November 2022, Anda dapat menggunakan Heroku untuk meng-host aplikasi dan bahkan basis data Anda secara gratis.
Sayangnya, mereka memutuskan untuk membatalkan layanan gratis ini untuk memerangi penipuan dan penyalahgunaan tingkat gratis. Terlepas dari perubahan baru-baru ini, Heroku tetap menjadi salah satu platform hosting yang paling populer. Teruslah membaca untuk mempelajari cara menggunakan Heroku.
Untuk mempelajari lebih lanjut tentang Heroku, lihat artikel kami yang berjudul Apa itu Heroku?
Pengaturan Proyek
Untuk mendemonstrasikan cara men-deploy aplikasi ke Heroku dan Back4app Containers, saya telah menyiapkan aplikasi web sederhana untuk menginstruksikan Anda cara men-deploy aplikasi Python ke Heroku. Aplikasi web ini menggunakan kerangka kerja FastAPI dan berfungsi sebagai layanan pemendek URL sederhana. Aplikasi ini dilengkapi dengan dua titik akhir:
/shorten
menetapkanalias
kelong_url
/<alias>
mengarahkan pengguna kelong_url
yang sesuai
Jangan ragu untuk menguji pemahaman Anda dengan mengikuti proyek Anda sendiri.
Prasyarat
- Pemahaman dasar tentang Python dan Git
- Python 3.9+ terinstal di mesin lokal Anda
- Git Bash dan Docker Desktop terinstal dan terkonfigurasi
- Akun GitHub pribadi
Kloning & Jalankan
Penerapan Heroku dimulai dengan melakukan forking repositori ini di GitHub dan kemudian mengkloning fork ke mesin lokal Anda:
$ git clone <fork_remote_git_url>
$ cd back4app-heroku-deploy
Jika Anda tidak ingin melakukan fork, Anda dapat membuat repositori dan mendorong kode sumber ke sana.
Buat lingkungan virtual dan aktifkan:
$ python -m venv env && source env/bin/activate
Selanjutnya, instal persyaratan proyek:
(env)$ pip install -r requirements.txt
Terakhir, mulai server pengembangan:
(env)$ python -m uvicorn main:app --reload
INFO: Will watch for changes in these directories: [...]
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [1488] using WatchFiles
INFO: Started server process [2316]
INFO: Application startup complete.
Buka browser web favorit Anda dan buka http://localhost:8000/docs. Gunakan dokumentasi interaktif untuk menguji aplikasi web. Jika Anda memerlukan bantuan untuk memformat permintaan, lihat file test_main.http.
Bagaimana cara menerapkan aplikasi ke Heroku?
Pada bagian ini, kita akan menerapkan aplikasi ke Heroku.
Langkah-langkah berikut ini akan membutuhkan akun Heroku. Jika Anda belum memilikinya, silakan mendaftar. Selain itu, pastikan untuk menambahkan informasi pembayaran ke akun Heroku Anda.
Jika Anda menghapus aplikasi Anda segera setelah tutorial, Anda tidak akan dikenakan biaya apa pun.
Beralih ke cabang baru bernama heroku
:
$ git checkout -b heroku
Tujuan
- Instal Heroku CLI.
- Membuat aplikasi Heroku.
- Tentukan waktu proses melalui runtime.txt.
- Tentukan proses aplikasi melalui Procfile.
- Dorong kode sumber ke Heroku.
Heroku CLI
Ada beberapa cara untuk berinteraksi dengan Heroku. Anda dapat menggunakan dasbor, CLI Heroku, atau API Heroku.
Saya lebih suka Heroku CLI karena ini adalah alat yang hebat yang memungkinkan Anda menyelesaikan pekerjaan dengan cepat. Kita akan menggunakannya di sepanjang tutorial ini.
Pertama, instal Heroku CLI dengan mengikuti petunjuk instalasi resmi.
Setelah itu, pastikan instalasi berhasil dengan memeriksa versi CLI:
$ heroku --version
heroku/8.4.2 win32-x64 node-v16.19.0
Selanjutnya, periksa pembaruan CLI dan autentikasi menggunakan akun Heroku Anda:
$ heroku update
$ heroku login
Saat menjalankan perintah kedua, jendela browser akan terbuka. Untuk mengautentikasi diri Anda, klik “Masuk” dan tutup jendela browser.
Buat Aplikasi Heroku
Untuk menerapkan ke Heroku, Anda harus terlebih dahulu membuat aplikasi Heroku.
Buka terminal sekali lagi, navigasikan ke proyek lokal Anda (misalnya, folder back4app-heroku-deploy ), dan jalankan perintah berikut:
$ heroku create -a <app_name>
Creating ⬢ <app_name>... !
https://<app_name>-31a6fd70e769.herokuapp.com/ |
https://git.heroku.com/<app_name>.git
Pastikan untuk mengganti <app_name> dengan nama aplikasi yang diinginkan.
Selanjutnya, periksa apakah aplikasi berhasil dibuat dengan membuat daftar aplikasi:
$ heroku apps
=== <email_address> Apps
<app_name>
Kemudian periksa detail aplikasi:
$ heroku apps:info <app_name>
=== <app_name>
Auto Cert Mgmt: false
Dynos:
Git URL: https://git.heroku.com/<app_name>.git
Owner: <email_address>
Region: us
Repo Size: 0 B
Slug Size: 0 B
Stack: heroku-22
Web URL: https://<app_name>-21de155883d3.herokuapp.com/
Seperti yang Anda ketahui, Heroku terintegrasi erat dengan Git. Saat Anda membuat aplikasi Heroku, repositori Git jarak jauh akan dibuat dan Anda dapat mendorong kode sumber Anda untuk menerapkannya. Dalam kasus kami, URL Git jarak jauh adalah:
https://git.heroku.com/<app_name>.git
Heroku CLI secara otomatis mendaftarkan remote Git ketika Anda membuat aplikasi. Coba daftarkan remote:
$ git remote -v
heroku https://git.heroku.com/back4app-url-shortener.git (fetch)
heroku https://git.heroku.com/back4app-url-shortener.git (push)
origin [email protected]:duplxey/back4app-heroku-deploy.git (fetch)
origin [email protected]:duplxey/back4app-heroku-deploy.git (push)
Kita akan menggunakan remote heroku
di bagian selanjutnya untuk menyebarkan kode sumber kita.
runtime.txt
File runtime.txt memungkinkan Anda untuk menentukan versi Python yang tepat yang Anda inginkan untuk digunakan oleh Heroku. Ini penting jika proyek Anda membutuhkan versi Python tertentu untuk bekerja. Pada saat penulisan ini, standarnya adalah python-3.11.5
.
Untuk menentukan runtime, buat file runtime.txt yang berisi versi runtime. Contoh:
python-3.11.5
Untuk daftar runtime Python yang didukung, lihat Dukungan Python Heroku.
Procfile
Procfile memungkinkan Anda untuk mendefinisikan perintah yang harus dijalankan untuk memulai proses aplikasi. Kita akan menggunakan Procfile untuk memulai server web Uvicorn.
Buat Procfile di root proyek dengan proses web
:
web: gunicorn -w 1 -k uvicorn.workers.UvicornWorker main:app
Pada aplikasi produksi, Anda mungkin ingin memunculkan beberapa pekerja, bukan hanya satu. Karena database tidak mendukung aplikasi kita (menggunakan data dalam memori), kita tidak dapat menyinkronkan data di antara beberapa proses pekerja. Oleh karena itu, kita harus menggunakan satu pekerja.
Dorong perubahan ke repositori GitHub Anda:
$ git add .
$ git commit -m "configured app for heroku"
$ git push origin heroku
Menerapkan Aplikasi Heroku
Heroku menggunakan apa yang disebut buildpack untuk mengubah aplikasi menjadi unit yang dapat dieksekusi di atas dinamo. Buildpack hanyalah sekumpulan skrip khusus untuk bahasa pemrograman tertentu.
Saat Anda mendorong kode Anda ke Heroku, Heroku secara otomatis mendeteksi bahasa pemrograman proyek Anda dan buildpack yang diperlukan untuk membangunnya. Dalam kasus Python, Heroku akan memeriksa apakah ada file requirements.txt.
Untuk menerapkan aplikasi Anda, yang harus Anda lakukan adalah mendorong kode ke remote heroku
:
$ git push heroku heroku:main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 318 bytes | 318.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Updated five paths from 30a4ffb
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-22 stack
remote: -----> Using buildpack: heroku/python
remote: -----> Python app detected
remote: -----> Requirements file has been changed, clearing cached dependencies
remote: -----> Installing python-3.11.5
remote: -----> Installing pip 23.2.1, setuptools 68.0.0 and wheel 0.41.0
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 30.6M
remote: -----> Launching...
remote: Released v5
remote: https://<app_name>-31a6fd70e769.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
Heroku secara otomatis memilih buildscript yang sesuai, menginstal persyaratan, dan menerapkan aplikasi ke dyno.
Jika penerapan Anda gagal, gunakan CLI Heroku untuk melihat log:
$ heroku logs --tail
Selanjutnya, periksa status aplikasi Anda:
$ heroku apps:info <app_name>
=== <app_name>
Auto Cert Mgmt: false
Dynos: web: 1
Git URL: https://git.heroku.com/<app_name>.git
Owner: <your_email>
Region: us
Repo Size: 9 KB
Slug Size: 31 MB
Stack: heroku-22
Web URL: https://<app_name>-31a6fd70e769.herokuapp.com/
Coba kunjungi aplikasi Anda di browser dengan menavigasi ke “URL Web”.
Itu saja untuk bagian Heroku. Bagian berikut ini akan membahas penerapan aplikasi yang sama ke Back4app Containers.
Bagaimana cara menerapkan aplikasi ke Back4app Containers?
Pada bagian ini, kita akan menerapkan aplikasi ke Back4app Containers.
Apa yang dimaksud dengan Back4app Containers?
Back4app Containers adalah platform Containers as a Service (CaaS) yang hebat. Platform ini memungkinkan Anda untuk menerapkan, mengelola, dan menskalakan aplikasi pada kontainer yang didistribusikan secara global.
Platform ini terintegrasi erat dengan GitHub dan menyediakan sistem CI/CD bawaan. Fitur-fiturnya yang lain termasuk penerapan tanpa waktu henti, penautan domain kustom, pencatatan, pemantauan, dan banyak lagi.
Yang terbaik dari semuanya, platform ini menyediakan tingkat gratis yang murah hati. Dengan lebih dari 600 jam kontainer bulanan gratis, Anda bisa dengan mudah membuat prototipe dan menghosting proyek-proyek pet Anda. Seiring dengan meningkatnya skala aplikasi Anda, Anda bisa meningkatkan ke tingkat premium dengan harga yang dapat diprediksi.
Untuk mempelajari lebih lanjut tentang Containers as a Service, lihat Apa itu CaaS – Containers as a Service?
Beralih ke cabang baru bernama back4app
berdasarkan cabang utama
:
$ git checkout master && git checkout -b back4app
Tujuan
- Dockerize aplikasi.
- Hubungkan GitHub Anda dengan akun Back4app Anda.
- Impor repositori GitHub yang diinginkan.
- Menyebarkan!
Dockerize
Untuk menerapkan aplikasi ke Back4app Containers, Anda harus terlebih dahulu melakukan dockerisasi.
Dockerisasi adalah proses membangun, men-deploy, dan menjalankan aplikasi dalam kontainer Docker. Cara termudah untuk mendokumentasi aplikasi adalah melalui Dockerfile.
Dockerfile
Dockerfile adalah skrip yang berisi instruksi untuk membuat citra kontainer Docker. Anda dapat menggunakan berkas ini untuk mendefinisikan lingkungan, ketergantungan, dan perintah lain yang diperlukan untuk membangun dan menjalankan aplikasi.
Ini memiliki sintaks berikut:
COMMAND <arg_1> <arg_2> ... <arg_n>
Buat berkas Docker di root proyek dengan konten berikut:
FROM python:3.9.6-alpine
# Set the working directory
WORKDIR /app
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Copy over the requirements file and install the dependencies
COPY ./requirements.txt .
RUN pip install --no-cache-dir --upgrade -r ./requirements.txt
# Copy over the source code
COPY . .
# Expose the port
EXPOSE 80
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
Dockerfile ini didasarkan pada citra python:3.9.6-alpine
. Pertama-tama, ia menetapkan direktori kerja, variabel lingkungan, dan kemudian menangani persyaratan. Setelah itu, menyalin kode sumber, membuka porta 80
, dan memulai server Uvicorn pada porta tersebut.
Untuk menggunakan bahasa pemrograman dan kerangka kerja lain, silakan ambil Dockerfiles dari dokumen Kontainer Back4app.
Jika Anda membutuhkan penjelasan tentang cara kerja perintah Dockerfile, lihat referensi Dockerfile.
.dockerignore
Kita dapat menggunakan berkas .dockerignore untuk mengurangi ukuran citra Docker. Berkas ini bekerja mirip dengan berkas .gitignore. Anda harus mendefinisikan berkas dan direktori yang ingin Anda kecualikan dari citra.
Dalam kasus kami, itu adalah lingkungan virtual, file IDE, dan folder .git.
Buat file .dockerignore seperti ini:
.git/
.idea/
venv/
Jangan ragu untuk mengadaptasi file .dockerignore sesuai dengan kebutuhan proyek Anda.
Dorong perubahan ke repositori GitHub Anda:
$ git add .
$ git commit -m "configured app for back4app"
$ git push origin back4app
Membangun, Menjalankan & Menguji
Sebelum mendorong kode Anda ke cloud, ada baiknya Anda mengujinya secara lokal.
Pertama, buatlah gambar dan tandai gambar tersebut:
$ docker build -t back4app-url-shortener:1.0 .
Berikutnya, buat daftar gambar:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
back4app-url-shortener 1.0 1cbe348a04ad 1 minute ago 68.7MB
Jalankan kontainer menggunakan citra yang baru saja dibuat:
$ docker run -p 80:80 --name back4app-url-shortener back4app-url-shortener:1.0
Penjelasan argumen:
-p 80:80
mengikat port80
mesin host ke port80
kontainer--name back4app-url-shortener
memberi nama instance kontainer
Anda dapat menggunakan
-d
untuk menjalankan kontainer dalam mode terpisah (tanpa menempati terminal).
Periksa apakah kontainer sedang berjalan:
$ docker ps
CONTAINER ID IMAGE CREATED STATUS PORTS
b3b82313ab65 back4app-url-shortener:1.0 3s ago 1s 0.0.0.0:80->80/tcp
Buka browser web favorit Anda dan buka http://localhost/docs. Anda seharusnya dapat melihat layanan pemendek URL.
Menyebarkan Aplikasi
Langkah-langkah berikut ini akan membutuhkan akun Back4app. Jika Anda belum memilikinya, daftarlah untuk mendapatkan akun gratis. Semua yang kita lakukan dalam tutorial ini akan berada dalam tingkatan gratis.
Saat Anda masuk ke akun Back4app Anda, Anda akan dihadapkan pada daftar aplikasi. Klik “Buat aplikasi baru” untuk memulai proses pembuatan aplikasi.
Back4app menyediakan dua solusi:
- Backend sebagai Layanan (BaaS) – solusi backend yang tidak biasa
- Containers as a Service (CaaS) – platform penerapan kontainer yang didukung Docker
Karena kita akan menerapkan aplikasi Python khusus, kita akan menggunakan CaaS. Pilih “Containers as a Service” di sisi kanan layar.
Anda akan diminta untuk menautkan akun GitHub Anda jika ini adalah pertama kalinya Anda bekerja dengan Back4app. Selain itu, pastikan untuk mengimpor semua repositori yang ingin Anda gunakan.
Selanjutnya, “Pilih” repo GitHub yang ingin Anda gunakan:
Karena kita menggunakan aplikasi sederhana, kita tidak perlu banyak mengonfigurasi lingkungan. Yang harus Anda lakukan hanyalah mengatur:
- Nama Aplikasi: back4app-url-shortener (Anda bisa memilih nama lain)
- Cabang: back4app (cabang GitHub Anda)
Kemudian klik “Terapkan”.
Back4app Containers menawarkan banyak opsi konfigurasi, termasuk penerapan otomatis, pengaturan port, variabel lingkungan, dan pemeriksaan kesehatan.
Kontainer Back4app akan membutuhkan waktu beberapa saat untuk membangun dan men-deploy citra Docker Anda. Setelah aplikasi Anda siap, status aplikasi akan berubah menjadi “Tersedia”. Untuk mengunjungi aplikasi Anda, klik tautan di bawah status seperti yang digambarkan pada gambar.
Kerja bagus! Anda telah berhasil menerapkan aplikasi web ke Back4app Containers.
Kesimpulan
Tutorial ini mengajarkan Anda cara men-deploy aplikasi web sederhana ke Heroku dan Back4app Container. Kedua platform tersebut memiliki kelebihan dan kekurangan yang harus Anda pertimbangkan saat men-deploy aplikasi.
Sebagai aturan praktis, saya akan memilih Back4app Containers untuk aplikasi yang tidak memerlukan basis data. Back4app Containers akan membantu Anda menghemat uang, dan tingkat gratisnya lebih dari cukup untuk proyek-proyek kecil Anda.
Heroku mungkin lebih baik jika aplikasi Anda bergantung pada basis data atau add-on yang mewah.
Saya sudah merangkum beberapa perbedaan platform utama dalam tabel di bawah ini:
Heroku | Wadah Back4app | |
---|---|---|
Model awan | Platform sebagai Layanan (PaaS) | Kontainer sebagai Layanan (CaaS) |
Membangun & menerapkan | Buildpacks | Docker |
Bahasa yang didukung | 9 bahasa pemrograman | Bahasa atau kerangka kerja apa pun |
HTTPS/SSL gratis | ✔️ | ✔️ |
Domain khusus | ✔️ | ✔️ |
Tingkat gratis | ❌ | ✔️ |
Risiko penguncian vendor | ✔️ | ❌ |
Basis data yang dikelola | ✔️ | ❌ |
Ramah pemula | Ya (membutuhkan beberapa keterampilan DevOps) | Ya (membutuhkan beberapa keterampilan Docker) |
Jangan ragu untuk mengambil kode sumber akhir dari repositori GitHub.
PERTANYAAN YANG SERING DIAJUKAN
Apa itu Heroku?
Heroku, didirikan pada tahun 2007, adalah salah satu platform Platform as a Service (PaaS) perintis. Platform ini memungkinkan Anda untuk melakukan deployment menggunakan sembilan bahasa pemrograman, termasuk Java, PHP, Python, dan Ruby. Selain itu, Heroku menyediakan database yang dikelola, add-ons, pencatatan log lanjutan, pemantauan, dan banyak lagi.
Bagaimana cara melakukan deployment aplikasi ke Heroku?
1. Daftar akun Heroku.
2. Instal dan konfigurasikan Heroku CLI.
3. Buat aplikasi Heroku.
4. Tentukan runtime melalui runtime.txt.
5. Tentukan proses aplikasi melalui Procfile.
6. Dorong kode sumber Anda ke Heroku.
Apa itu Back4app Containers?
Containers adalah platform Containers as a Service (CaaS) yang sangat baik. Platform ini memungkinkan Anda dengan cepat melakukan deployment, mengelola, dan melakukan scaling pada aplikasi Docker di container yang didistribusikan secara global. Ia memiliki sistem CI/CD bawaan, mendukung deployment tanpa downtime, domain kustom, dan masih banyak lagi!
Bagaimana cara melakukan deployment aplikasi ke Back4app Containers?
1. Daftar akun gratis di Back4app.
2. Dockerize aplikasi Anda.
3. Dorong kode sumber Anda ke GitHub.
4. Hubungkan GitHub Anda dengan akun Back4app Anda.
5. Impor repositori yang diinginkan & lakukan deployment!