M Hilmy Haidar
Tugas Seleksi Garuda Cloud Community untuk Divisi Commander
Web aplikasi ini berguna untuk menyimpan catatan agar jadwal-mu lebih terorganisir.
Berikut merupakan ringkasan dari apa saja yang harus dilakukan untuk men-deploy aplikasi ini ke AWS EC2 :
Bagian backend dibuat menggunakan expressJS, knex sebagai query builder, dan morgan sebagai logger.
File utama yang digunakan adalah index.js
. Di dalam folder src/
terdapat beberapa bagian folder di antaranya :
config/
folder tempat konfigurasi knex (knexfile)migrations/
folder tempat log migrasi untuk databaseroutes/
folder tempat register route yang dibuattools/
folder tempat inisiasi instance knex untuk digunakan
Karena lingkup projeknya yang kecil, sehingga model tidak dibutuhkan agar mempermudah pengerjaan dan meningkatkan efektifitas kode program. Setiap request yang masuk akan dijadikan sebuah query dengan knex untuk langsung mengakses database.
Digunakan untuk melihat request yang masuk, package morgan akan membuat file bernama access.log
pada folder src/
untuk menyimpan log request.
Bagian frontend dibuat dengan framework nextJS
yaitu framework untuk library reactJS
, selain itu untuk bagian styling menggunakan tailwindcss
.
File utama berada pada src/pages/_app.js
sebagai root file nya. Karena lingkup nya yang sederhana, hanya terdapat 5 file utama yaitu:
components/
bagian-bagian kecil dari user interface yang digunakan pada pageslayout/
struktur design yang digunakan pada tiap halaman.pages/
halaman utama sesuai dengan endpoint.styles/
tempat file css untuk stylingutils/
folder untuk utilitas tambahan
Tidak banyak yang dikerjakaan karena menggunakan settingan bawaan dari tailwind
.
Pertama-tama, aktifkan/buat instance terlebih dahulu. Setelah mengaktifkan instance (buat di halaman aws console) langkah selanjutnya adalah :
-
konek ke instance aws yang akan digunakan menggunakan ssh
-
update dan upgrade repository jika diperlukan lalu menginstall node dan npm
-
clone repository https://github.com/mhilmyh/my-todos
-
lakukan build pada folder
client/
untuk build file nextJS dengannpm run build
, setelah itu jalankan dengan commandnpm run start
sehingga frontend sudah berjalan pada port 3000 (default)
- kembali ke aws console, pada bagian security group, tambahkan inbound rules untuk custom tcp dengan port 3000
- akses ke ip instance dengan port 3000 untuk uji coba
- setelah berhasil, jangan lupa ganti base url di environtment file ke arah backend (setelah backend selesai)
Mirip seperti yang sebelumnya
- konek ke instance aws yang akan digunakan menggunakan ssh
- update dan upgrade repository jika diperlukan lalu menginstall node dan npm
- clone repository https://github.com/mhilmyh/my-todos
- lakukan migrasi
- jalankan express js dengan environtment produksi dan jangan lupa setting environtment variable nya sesuai dengan database yang digunakan
- set inbound rule tapi kalo ini ke port 8080
Buat instance pada AWS RDS, dan sertakan nama database, dan pilih mysql sebagai database. Pada backend ubah environtment file config database sesuai dengan yang ada di RDS. Lalu dilanjutkan dengan langkah berikut :
- Karena menggunakan free tier, database tidak langsung terbuat sehingga harus dibuat terlebih dahulu.
- Pastikan security inbound pada rds sudah mengijinkan koneksi dari server backend (hanya server backend yg digunakan karena yg berhubungan dengan db hanya backend)
- selanjutnya dari ec2, lakukan koneksi ke rds
- buat database (sesuaikan dengan config .env file)
- lakukan migrasi (dari backend dengan knex migrate)
Menguji koneksi database dan backend
Jalankan semua servis ec2 dengan package pm2
- Karena sulitnya mendeploy nextJs dengan pm2, akhirnya saya menggunakan apache pada frontend. Linknya dapat dilihat di bawah ini.
- Untuk dokumentasi REST API yang digunakan, bisa di cek di backend pada path
/doc
Berikut adalah link-link utama projek :
- Repository Github : https://github.com/mhilmyh/my-todos
- Alamat Frontend(sudah di turn off) : http://13.250.63.243
- Alamat Backend(sudah di turn off) : http://54.169.149.237:8000
- Dokumentasi API(sudah di turn off) : http://54.169.149.237:8000/doc