Skip to content

Instantly share code, notes, and snippets.

@dhanifudin
Last active May 12, 2024 22:55
Show Gist options
  • Save dhanifudin/753e40ab5027c89c24383defdc327161 to your computer and use it in GitHub Desktop.
Save dhanifudin/753e40ab5027c89c24383defdc327161 to your computer and use it in GitHub Desktop.
Cheatsheet

Cheatsheet Submission 2

Konfigurasi VPS

Instalasi Node.js

  • 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

Instalasi Postgres

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>

Instalasi Nginx

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

Instalasi Let's Encrypt

  • 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

Konfigurasi CI

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 }}

Konfigurasi CD

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

    sudo apt install git
  • Setup project dan atur konfigurasi .env sesuai dengan credentials di server

    cd ~/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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment