Skip to content

Instantly share code, notes, and snippets.

@antheiz
Created February 20, 2024 10:07
Show Gist options
  • Select an option

  • Save antheiz/dbdaf0b15f7e059bfd5634bc396ee70d to your computer and use it in GitHub Desktop.

Select an option

Save antheiz/dbdaf0b15f7e059bfd5634bc396ee70d to your computer and use it in GitHub Desktop.

Catatan Deployment ke Server VPS - FT.UNIPA.AC.ID

Dokumen ini berisi panduan dan catatan mengenai proses setup server untuk website https://ft.unipa.ac.id, termasuk konfigurasi untuk aplikasi Laravel dan React JS yang di-host pada server Ubuntu yang sama, menggunakan Nginx sebagai web server dan PM2 untuk manajemen proses aplikasi.

1. Persiapan Awal Server

  • Melakukan update dan upgrade sistem operasi server.

    sudo apt update
    sudo apt upgrade -y
  • Install Nginx sebagai web server.

    sudo apt install nginx -y
  • Setup firewall untuk mengizinkan lalu lintas HTTP dan HTTPS.

    sudo ufw app list
    sudo ufw allow 2222/tcp
    sudo ufw allow 'Nginx Full'
    sudo ufw enable
    sudo ufw status

2. Konfigurasi Nginx

  • Membuat konfigurasi Nginx untuk aplikasi Laravel, termasuk pengaturan root directory, penanganan file PHP, dan rewrite rules.

    cd ~/
    sudo mkdir /var/www/ft.unipa.ac.id/
    cd /var/www/ft.unipa.ac.id/
    # /etc/nginx/sites-available/laravel
    server {
       listen 8080;
       server_name ft.unipa.ac.id;
       root /var/www/ft.unipa.ac.id/laravel/public;
    
       add_header X-Frame-Options "SAMEORIGIN";
       add_header X-XSS-Protection "1; mode=block";
       add_header X-Content-Type-Options "nosniff";
    
       index index.html index.htm index.php;
    
       charset utf-8;
    
       location / {
           try_files $uri $uri/ /index.php?$query_string;
       }
    
       location = /favicon.ico { access_log off; log_not_found off; }
       location = /robots.txt  { access_log off; log_not_found off; }
    
       error_page 404 /index.php;
    
         location ~ \.php$ {
             fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
             fastcgi_index index.php;
             fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
             include fastcgi_params;
         }
    
         location ~ /\.(?!well-known).* {
             deny all;
         }
     }
  • Menyiapkan reverse proxy dengan Nginx untuk mengarahkan permintaan ke port tertentu, memungkinkan aplikasi Laravel dan React JS diakses melalui port standar (80 untuk HTTP).

    # /etc/nginx/sites-available/ft.unipa.ac.id
    server {
        server_name 85.31.232.86 ft.unipa.ac.id;
    
        location /api {
            proxy_pass http://localhost:8080; # Arahkan ke aplikasi Laravel di port 8080
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    
        location / {
            proxy_pass http://localhost:3000; # Arahkan ke aplikasi ReactJS di port 3000
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    
    
        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/ft.unipa.ac.id/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/ft.unipa.ac.id/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
    }
    server {
        if ($host = ft.unipa.ac.id) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
    
      listen 80;
      listen [::]:80;
    
      server_name 85.31.232.86 ft.unipa.ac.id;
        return 404; # managed by Certbot
    }

3. Deployment Aplikasi Laravel

  • Meng-upload atau clone aplikasi Laravel ke dalam server dan letakan pada document root.

    sudo mv laravel /var/www/ft.unipa.ac.id/
  • Konfigurasi file .env untuk setup database dan variabel lingkungan lainnya.

  • Melakukan migrasi database dan instalasi dependencies melalui Composer.

4. Deployment Aplikasi React JS

  • Meng-upload atau clone aplikasi Laravel ke dalam server dan letakan pada document root.

    cd ~/
    sudo mv reactjs /var/www/ft.unipa.ac.id/
    cd /var/www/ft.unipa.ac.id/reactjs/
  • Build aplikasi React JS menggunakan npm run build.

  • Melayani build aplikasi React JS menggunakan serve yang dijalankan oleh PM2, memudahkan manajemen proses dan restart otomatis aplikasi.

    sudo npm install -g pm2
    sudo npm install -g serve
    pm2 serve build 3000

5. Keamanan dan SSL

  • Mengkonfigurasi Let's Encrypt untuk SSL, memastikan semua lalu lintas dienkripsi dan aman.

    sudo apt install certbot python3-certbot-nginx
    sudo certbot --nginx -d ft.unipa.ac.id

6. Manajemen Proses dengan PM2

  • Menggunakan PM2 untuk menjalankan dan memonitor aplikasi React JS dan Laravel (untuk keperluan non-produksi), termasuk fitur auto-restart, logging, dan load balancing.
  • Selengkapnya tentang PM2

7. Referensi

Berikut adalah beberapa referensi yang digunakan dalam proses deployment:

Dengan mengikuti panduan ini, website https://ft.unipa.ac.id dapat di-setup dan di-deploy dengan konfigurasi yang optimal untuk keamanan dan performa.

dokumen ini akan terus diupdate kedepannya

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment