Search by

    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

    1. Buat akun AWS kemudian login

    Akun AWS membutuhkan informasi kartu kredit/debit

    1. Navigasi ke halaman AWS Lightsail kemudian klik button Get started with Lightsail for free

    Halaman utama:

    aws lightsail homepage

    Terdapat beberapa menu, namun kita hanya akan menggunakan menu Instance

    1. Klik Create Instance

    2. Pada halaman Create Instance pilih opsi sebagai berikut:

    aws create instance 1

    Untuk instance plan pilih yang berlabel first month free.

    Dan nama instance dinotes-app-1.

    aws create instance 2

    Kemudah klik button Create instance untuk mulai membuat instance

    Instance berhasil dibuat:

    aws create instance success

    1. Untuk login ke server kita bisa gunakan feature ssh via browser yang sudah disediakan

    aws connect using ssh browser

    Tampilan terminal di browser:

    aws connect using ssh browser 2

    1. Setelah login ke server buat sebuah folder dengan nama apps
    1$ mkdir apps
    2$ cd apps
    1. 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
    1. Install masing-masing dependency

    API

    1$ cd dinotes-api
    2$ yarn install

    Client

    1$ cd dinotes-client
    2$ yarn install
    1. 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

    aws env file

    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:

    aws add dotenv

    • 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.

    aws forever list

    Update repository

    Jika ingin update repository dari dinotes-api pastikan untuk memasukan .env ke dalam .gitignore sebelum commit.

    1. 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$ cd
    2$ echo 'export PATH="$PATH:$(yarn global bin)"' >> .bashrc
    3$ 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.

    aws public ip address

    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 build
    2$ serve -s build

    aplikasi dinotes-client akan aktif di port 5000.

    1. 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.

    aws update firewall

    Ulangi untuk port 3001.

    1. 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.