Terakhir diperbaharui: Oct 24, 2020
Deploy ke AWS Lightsail
Pada bagian ini kita akan deploy aplikasi DinoTes di AWS Lightsail.
AWS Lightsail adalah Virtual Private Server (VPS) milik Amazon dan termasuk dalam kategori IaaS (Infrastructure as a Service).
Kita bisa mencoba AWS Lightsail secara gratis untuk 1 bulan pertama.
Kenapa VPS?
Scalability dari sebuah aplikasi menjadi prioritas utama ketika aplikasi tersebut semakin berkembang.
Dengan menggunakan heroku, masalah scalability dapat ditangani secara horizontal dengan cara menambah dynos dan secara vertical dengan cara upgrade kapasitas dynos.
Sehingga meningkatkan scalability aplikasi pada heroku bisa dibilang cukup simple dan mudah.
Sedangkan pada VPS meningkatkan scalability dari aplikasi bisa dibilang lebih sulit, karena kita harus mengelola banyak hal secara manual seperti Server instance, Networking, Storage, Database dan Backup.
Dan seringkali mengelola VPS membutuhkan tenaga khusus seperti DevOps engineer.
Yang menjadi keunggulan dari VPS/IaaS adalah flexibility.
Karena VPS pada dasarnya adalah sebuah server, maka pilihan stack atau teknologi yang akan digunakan di server tersebut jumlahnya tidak terbatas.
Dan jika setup dilakukan dengan sangat hati-hati dan penuh perhitungan bukan tidak mungkin cost dari VPS bisa lebih murah dari heroku.
Step by step
- Buat akun AWS kemudian login
Akun AWS membutuhkan informasi kartu kredit/debit
- Navigasi ke halaman AWS Lightsail kemudian klik button Get started with Lightsail for free
Halaman utama:
Terdapat beberapa menu, namun kita hanya akan menggunakan menu Instance
Klik Create Instance
Pada halaman Create Instance pilih opsi sebagai berikut:
Untuk instance plan pilih yang berlabel first month free.
Dan nama instance dinotes-app-1.
Kemudah klik button Create instance untuk mulai membuat instance
Instance berhasil dibuat:
- Untuk login ke server kita bisa gunakan feature ssh via browser yang sudah disediakan
Tampilan terminal di browser:
- Setelah login ke server buat sebuah folder dengan nama apps
1$ mkdir apps2$ cd apps
- Clone repository aplikasi DinoTes dari GitHub
Alamat GitHub repository bisa berbeda-beda.
API
1$ git clone https://github.com/devsaurus-class/dinotes-api
Client
1$ git clone https://github.com/devsaurus-class/dinotes-client
- Install masing-masing dependency
API
1$ cd dinotes-api2$ yarn install
Client
1$ cd dinotes-client2$ yarn install
- Run dinotes-api
Install package forever menggunakan yarn/npm
1$ yarn global add forever
forever adalah package yang dapat digunakan untuk memonitor sebuah aplikasi node.js.
forever mirip dengan nodemon, forever akan merestart aplikasi node.js jika terjadi crash.
Selain forever ada package pm2, pm2 memiliki banyak sekali fitur yang dapat dimanfaatkan untuk menjalankan sebuah aplikasi node di production environment.
Tapi kita akan menggunakan forever karena forever termasuk aplikasi monitoring yang cukup simple dan mudah digunakan.
Sampai disini aplikasi belum bisa dijalankan sebagaimana mestinya.
Hal ini karena informasi port dan koneksi database disimpan di luar source code.
Pada dasarnya AWS Lightsail hanya sebuah server, sehingga tidak ada tempat khusus untuk menambahkan environment variable sebagaimana config vars yang ada di heroku.
Kita perlu melakukan sedikit modifikasi dengan menambahkan file bernama .env di root folder.
Semua value di dalam file tersebut akan dipanggil oleh package bernama dotenv.
- Buat sebuah file bernama .env di dalam folder dinotes-api
Kita bisa gunakan aplikasi editor sederhana bernama nano yang sudah terinstall di server untuk melakukan file editing.
1$ nano .env
- Simpan informasi PORT dan koneksi database di dalam file .env
Alamat cluster dari MongoDB Atlas dapat berbeda-beda, ganti <password>
dengan password yang sudah ditentukan sebelumnya.
Untuk keluar dari nano gunakan Ctrl+X kemudian pilih Yes untuk menyimpan.
- Tambahkan package dotenv
1$ yarn add dotenv
- Update server.js menggunakan nano, tambahkan baris code berikut:
- Jalankan perintah untuk run dinotes-api
1$ forever start server.js
atau tambahkan unique id ke proses dinotes-api
1$ forever start --uid dinotes-api server.js
Kita bisa melihat kondisi dari dinotes-api dengan perintah forever list
.
Update repository
Jika ingin update repository dari dinotes-api pastikan untuk memasukan .env ke dalam .gitignore sebelum commit.
- Run dinotes-client
Sesuai rekomendasi dari Create React App, kita akan menggunakan package bernama serve untuk menjalankan aplikasi dinotes-client.
- Tambahkan package serve
1$ yarn global add serve
- Kemudian jalankan perintah berikut agar serve bisa dipanggil dari terminal
1$ cd2$ echo 'export PATH="$PATH:$(yarn global bin)"' >> .bashrc3$ source .bashrc
- Simpan informasi url dari api di dalam file .env
url dari api adalah ip public dari AWS lightsail instance.
Informasi ip public dapat dilihat di menu Networking.
Pada tutorial ini public IP address tidak ditunjukan / blurred untuk alasan keamanan
1echo 'REACT_APP_API_URL=alamat_ip_public' > .env
- Dari dalam folder dinotes-client, jalankan perintah berikut:
1$ yarn build2$ serve -s build
aplikasi dinotes-client akan aktif di port 5000.
- Setup Networking
Agar aplikasi dinotes dapat diakses oleh user kita perlu membuka port yang digunakan oleh dinotes-client & dinotes-api di firewall.
- Pada halaman utama AWS lightsail, pilih menu Networking -> Firewall
Tambahkan port 5000 kemudian klik Create.
Ulangi untuk port 3001.
- Akses aplikasi DinoTes menggunakan ip public
Sekarang kita bisa akses aplikasi dinotes dengan menggunakan public ip address yang bisa ditemukan di menu Networking.
http://<public-ip-address>:5000
Bisakah kita menambahkan domain di AWS lightsail?
Jawabannya tentu bisa, tapi kita fokus pada pilihan deploy yang bersifat gratis dan tanpa mengeluarkan biaya apapun.
Sehingga tutorial menambahkan domain di lightsail tidak dibahas disini.