- Persiapkan requirement untuk menambahkan repository nodesource dengan perintah berikut
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
- Tambahkan gpg key nodesource dengan perintah berikut
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
Note: Perintah di atas dieksekusi dalam satu baris
- Tambahkan repository nodesource dengan perintah berikut
NODE_MAJOR=14
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
Note: Perintah di atas dieksekusi dalam satu baris
- Install nodejs dengan perintah berikut
sudo apt-get update
sudo apt-get install nodejs -y
sudo apt install postgresql
sudo systemctl start postgresql
sudo -u postgres createuser <username>
sudo -u postgres createdb <username>
Note: Ganti dan dengan nama yang diinginkan, dan pastikan nama tersebut sama.
sudo -u postgres psql
psql=# ALTER USER <username> WITH ENCRYPTED PASSWORD '<password>';
psql=# ALTER DATABASE <dbname> OWNER TO <username>;
- Cek login menggunakan psql
psql -U <username> -d <dbname>
sudo apt install nginx
- Modifikasi berkas config default di
/etc/nginx/sites-available/default
dan tambahkan rate limit
limit_req_zone $binary_remote_addr zone=one:10m rate=90r/m;
- Modifasi block server dan tambahkan rate limit dalam location
/threads
server {
listen 80;
server_name your-domain-name.com # Update the value using your domain name
server_tokens off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location /threads {
limit_req zone=one;
proxy_pass http://localhost:5000;
}
location / {
proxy_pass http://localhost:5000;
}
}
- Konfigurasi akhir nginx dapat dilihat sebagai berikut
limit_req_zone $binary_remote_addr zone=one:10m rate=90r/m;
server {
listen 80;
server_name your-domain-name.com # Update the value using your domain name
server_tokens off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location /threads {
limit_req zone=one;
proxy_pass http://localhost:5000;
}
location / {
proxy_pass http://localhost:5000;
}
}
- Test konfigurasi dengan menggunakan perintah berikut, jika ada kesalahan periksa kembali config nginx yang bermasalah.
sudo nginx -t
- Restart service nginx dengan menggunakan perintah berikut
sudo systemctl restart nginx
- Install certbot menggunakan perintah berikut
sudo apt install certbot python3-certbot-nginx
- Jalankan perintah berikut untuk mengkonfigurasi https di nginx, pilih domain yang akan dikonfigurasi. Masukkan nilai angka dari domain yang akan dikonfigurasi dan tunggu sampai proses berhasil.
sudo certbot --nginx
Gunakan referensi konfigurasi modul dicoding dari tautan berikut dan gunakan sebagai referensi config awal.
name: Continuous Integration
on:
pull_request:
# Tambahkan definisi branch main seperti berikut
branches:
- master
- main
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
services:
postgres:
image: postgres
env:
POSTGRES_PASSWORD: ${{ secrets.PGPASSWORD_TEST }}
POSTGRES_DB: ${{ secrets.PGDATABASE_TEST }}
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
- Konfigurasi akhir dapat dilihat sebagai berikut:
name: Continuous Integration
on:
pull_request:
branches:
- master
- main
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
services:
postgres:
image: postgres
env:
POSTGRES_PASSWORD: ${{ secrets.PGPASSWORD_TEST }}
POSTGRES_DB: ${{ secrets.PGDATABASE_TEST }}
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- name: npm install migrate and test
run: |
npm install
npm run migrate up
npm run test
env:
CI: true
PGHOST_TEST: ${{ secrets.PGHOST_TEST }}
PGUSER_TEST: ${{ secrets.PGUSER_TEST }}
PGDATABASE_TEST: ${{ secrets.PGDATABASE_TEST }}
PGPASSWORD_TEST: ${{ secrets.PGPASSWORD_TEST }}
PGPORT_TEST: ${{ secrets.PGPORT_TEST }}
PGHOST: ${{ secrets.PGHOST_TEST }}
PGUSER: ${{ secrets.PGUSER_TEST }}
PGDATABASE: ${{ secrets.PGDATABASE_TEST }}
PGPASSWORD: ${{ secrets.PGPASSWORD_TEST }}
PGPORT: ${{ secrets.PGPORT_TEST }}
ACCESS_TOKEN_KEY: ${{ secrets.ACCESS_TOKEN_KEY }}
REFRESH_TOKEN_KEY: ${{ secrets.REFRESH_TOKEN_KEY }}
-
Persiapan proses deploy, silahkan akses server menggunakan ssh client
-
Clone project menggunakan perintah
git
git clone https://url.repository.from.github project-name
Contoh:
git clone https://github.com/dhanifudin/forum-api forum-api
Note: Jika
git
belum terinstall, silahkan gunakan perintah berikut untuk melakukan instalasisudo apt install git
-
Setup project dan atur konfigurasi
.env
sesuai dengan credentials di servercd ~/forum-api npm install
-
Install pm2
sudo npm install -g pm2
-
Jalankan project menggunakan perintah
pm2
sebagai berikut:cd ~/forum-api pm2 start npm --name "forum" -- start
name: Continuous Deployment
on:
push:
branches:
- master
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: SSH and deploy app
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
# Konfigurasi key dan password bergantung credentials server yang digunakan
# Silahkan sesuaikan dengan config server
# key: ${{ secrets.SSH_KEY }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
# nilai forum bergantung pada penamaan pada saat register ketika menjalankan pm2
script: |
cd ~/forum-api
git pull origin main
npm install
npm run migrate up
pm2 restart forum