FastAPI merupakan salah satu framework bahasa pemrograman python untuk membuat REST API. Kali ini Saya akan menggunakan FastAPI untuk membuat service backend aplikasi pengumpulan ulasan produk. Untuk kamu yang belum mengetahui apa itu aplikasi pengumpulan ulasan produk bisa mulai dari postingan ini.
Persiapan Alat dan Bahan
Pertama pastikan python versi terbaru sudah terinstall dengan baik pada device yang akan kita gunakan. Untuk cara install python kamu bisa lihat disini kemudian install sesuai sistem operasi masing-masing.
Setelah python terinstall dengan baik, selanjutnya buka terminal atau command line untuk nantinya kita pakai dalam proses menyiapkan environment dan menginstall package-package yang diperlukan. Untuk terminal bebas saja, mau terminal bawaan dari OS ataupun terminal yang ada di Code Editor seperti Visual Studio Code Terminal.
Menyiapkan Virtual Environment
Virtual environment sangat berguna untuk mengelola dan mengisolasi dependensi project agar tidak saling tumpang tindih dan mengganggu dengan project lainnya di machine yang sama. Untuk membuat virtual environment cukup dengan mengetikan perintah berikut.
python -m venv /path/to/new/virtual/environment
Setelah proses pembuatan virtual environment selesai, selanjutnya aktifkan virtual environment tersebut dengan mengetikan perintah berikut.
source venv/bin/activate
Install FastAPI
Setelah virtual environment diaktifkan selanjutnya install FastAPI menggunakan pip dengan mengetikan perintah berikut.
pip install "fastapi[standard]"
Pastikan "fastapi[standard]" menggunakan tanda kutip untuk memastikan perintah dapat berjalan di semua jenis terminal/shell.
apa fungsi [standar] pada perintah instalasi diatas? tujuannya adalah untuk menginstall FastAPI dengan versi lengkap. Jadi ketika kita menggunakan [standar] maka FastAPI yang diinstall adalah versi lengkap termasuk perintah fastapi untuk CLI, email validator, jinja2, uvicorn dan lain-lain. Kamu boleh saja menginstall tanpa [standard] namun beberapa library seperti uvicorn harus diinstall dan diconfig manual.
Membuat API
Selanjutnya mari kita membuat API pertama yang berisi informasi mengenai sevice backend ini. Ikuti langkah-langkah berikut.
- Pada root directory buat folder
appkemudian masuk kedalamnya - Pada folder app buat satu file kosong dengan nama
__init__.py. File ini berfungsi untuk memberitahu kepada python bahwa folder app tersebut adalah sebuah package - Pada folder app buat file
main.pyyang berisi kode sebagai berikut
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {
"name": "Backend Aplikasi Pengumpulan Ulasan Produk",
"version": "0.0.1",
}
Setelah itu mari kita tes API tersebut dengan menjalankan FastAPI dalam mode dev. Karena kita menginstall FastAPI versi lengkap, jadi didalamnya sudah ada fastapi-cli yang dapat kita gunakan untuk menjalankan FastAPI.
FastAPI dapat dijalankan dalam 2 mode yaitu mode development dan mode production.
Untuk menjalan dalam mode development ketikan perintah berikut.
fastapi dev <nama_file>
Untuk menjalankan dalam mode production ketikan perintah berikut.
fastapi run <nama_file>
jalankan perintah fastapi --help untuk melihat penjelasan mengenai fastapi-cli.

Setelah menjalankan fastapi dalam mode yang kalian pilih, selanjutnya cek apakah FastAPI sudah berjalan dengan benar. Caranya kunjungi url tempat dimana FastAPI dijalankan. defaultnya akan berjalan di localhost:8000. Jika web browser kamu mengeluarkan hasil seperti ini maka service backend sudah berjalan dengan baik.
{"name":"Backend Aplikasi Pengumpulan Ulasan Produk","version":"0.0.1"}
Konsep Deployment
Setelah kita selesai memastikan bahwa FastAPI berjalan dengan baik di mode development, selanjutnya kita akan mencoba untuk men-deploy-nya di production.
Kita akan menggunakan bantuan docker swarm untuk memanfaatkan fitur High Availability-nya. Yang dimaksud High Availability disini adalah konsep ketersediaan layanan yang tinggi dimana service yang kita buat selalu siap menerima permintaan dari klien.
Terkait docker swarm dan portainer kamu bisa lihat pada postingan berikut:
Mengenal Containerization: Cara Efektif Deploy Aplikasi untuk Developer
Containerization adalah teknologi yang memungkinkan aplikasi dijalankan beserta semua dependensinya dalam satu paket terisolasi yang disebut container. Hal ini mempermudah pengembangan dan deployment tanpa masalah ketergantungan. Container lebih efisien dan…
Mengelola Aplikasi dengan Docker Swarm dan Portainer
Dalam pengembangan aplikasi modern, containerization dengan Docker menjadi solusi populer untuk mengemas dan menjalankan aplikasi secara efisien. Docker menyediakan lingkungan ringan, sedangkan Docker Swarm mengelola banyak container di berbagai server.…
Dalam implementasinya kita akan menggunakan fitur replica dan auto restart yang ada di docker swarm. Service yang kita buat akan direplica menjadi 3 service. Jadi ketika terjadi error pada salah satu service maka masih ada 2 service yang tersedia untuk melayani permintaan dari klien dan dengan bantuan fitur auto restart, service yang error tersebut akan otomatis melakukan restart agar dapat kembali beroperasi.
Kurang lebih secara sederhana konsep deploymentnya seperti tertera pada gambar dibawah ini.

Docker Swarm akan berfungsi sebagai pengatur lalu lintas permintaan dari klien. Setiap permintaan dari klien akan diarahkan ke node FastAPI yang tersedia. Dengan konsep ini maka beban pemrosesan dapat dibagi dan disebar secara merata sehingga membuat waktu pemrosesan lebih cepat.
Implementasi Deployment
Sebelum kita membuat file konfigurasi untuk docker container dan docker swarm, mari kita membuat file requirements.txt. File ini berfungsi untuk menyimpan semua requirement atau library-library yang diperlukan untuk menjalankan service ini. Untuk mengexport dependency yang telah diinstall kedalam file cukup jalankan perintah berikut.
pip freeze > requirements.txt
Setelah itu buka kembali project aplikasi pengumpulan ulasan produk kemudian buat satu file beranama Dockerfile lalu isikan kode berikut.
# menentukan versi python yang akan digunakan
FROM python:3.11
# menentukan working directory atau tempat ekskusi
WORKDIR /code
# menyalin file requirements.txt ke dalam container
COPY ./requirements.txt /code/requirements.txt
# menginstall semua package yang ada di requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
# menyalin semua file yang ada di folder app ke dalam container
COPY ./app /code/app
# menjalankan fastapi pada port 8080
CMD ["fastapi", "run", "app/main.py", "--port", "8080"]
Setelah membuat Dockerfile selanjutnya kita akan membuild source code service backend kita menjadi sebuah image docker. Ketikan perintah berikut di commandline (jangan lupa masuk terlebih dahulu ke root directory project).
docker build -t <nama_image> <path_project>
Dalam contoh ini Saya membuat docker image dengan perintah berikut.
docker build -t appup-be .
Tanda titik (.) tersebut menunjukan bahwa script atau path project adalah lokasi yang sama dengan yang saat ini saya buka (atkif). Jadi saya menggunakan titik.
Tambahkan --progress=plain jika kamu mau melihat log ketika image dibuild. Tunggu proses build image docker selesai, setelah itu ketikan perintah berikut pada terminal untuk melihat apakah image docker berhasil dibuat.
docker image ls
Kemudian cari nama image yang telah kita buat tadi apakah ada pada daftar tersebut. Kurang lebih seperti ini tampilannya.

Setelah image berhasil dibuat selanjutnya kita akan melakukan deployment di docker swarm menggunakan portainer. Buka kembali portainer yang telah diinstall.
- Buat stack baru
- Kemudian pada Web Editor masukan konfigurasi berikut
# versi docker compose yang dipakai
version: "3.6"
services:
# nama service appup-be
appup-be:
# image docker yang akan digunakan pada container
image: appup-be:latest
# port yang dibuka ke luar container dan di dalam container
ports:
- 81:8080
# konfigurasi deployment
deploy:
# menentukan mode deploy sebagai replikasi
mode: replicated
# menentukan jumlah replika yang dibuat
replicas: 3
# kongirusai terkait aturan restart service
restart_policy:
# set kondisi restart ketika terjadi kesalahan
condition: on-failure
# waktu tunggu sebelum melakukan restart
delay: 5s
# maksimal percobaan restart
max_attempts: 3
# waktu evaluasi untuk menilai apakah restart berhasil
window: 120s
Kurang lebih tampilannya akan seperti pada gambar dibawah ini.

Kemudian klik tombol Deploy the stack untuk mendeploy service backend FastAPI kita. Tunggu sampai proses deployment selesai, jika sudah selesai maka tampilannya akan seperti pada gambar berikut.

Terdapat 1 service dengan keterangan replicated 3/3 menunjukan bahwa service backend kita sudah berjalan dan direplika sebanyak 3 replika. Selanjutnya buka browser kemudian kunjungi alamat tempat service backend dideploy (dalam contoh ini adalah localhost:81).
{"name":"Backend Aplikasi Pengumpulan Ulasan Produk","version":"0.0.1"}
Jika muncul json seperti diatas maka service sudah berjalan dengan baik.
Rangkuman
Kita telah melakukan deployment service backend FastAPI di docker swarm menggunakan portainer. Dimulai dari persiapan awal yaitu memastikan python versi terbaru sudah terinstall dan menyiapkan code editor andalan untuk melakukan coding.
Kemudian kita menyiapkan virtual environment dan melakukan instalasi FastAPI sebagai backend pada virtual environment tersebut. Setelah service backend dibuat, kita melakukan deplotment FastAPI di docker swarm menggunakan portainer.
Sekian tutorial singkat untuk Membuat Service Backend Menggunakan FastAPI dan Docker. Jika ada pertanyaan silahkan tulis di kolom komentar ya.

Leave a comment