Web Hosting 16 Oct 2026 3 menit baca 4x 546 kata

Pertemuan 2 — Hosting Multi-Website, DNS Lokal, dan Deploy Aplikasi

1. Konsep 2 Source Code dalam Satu Nginx

Aplikasi berjalan di port internal berbeda: - Next.js → 127.0.0.1:3000 - Python → 127.0.0.1:5000

IP server seperti 192.168.12.12 hanya pintu masuk. Nginx yang membagi lalu lintas.

Metode Contoh URL Cara Kerja
Beda Port 192.168.12.12 dan 192.168.12.12:81 Nginx listen port 80 & 81
Beda Path 192.168.12.12/sekolah dan /kasir Nginx baca path URL
Beda Domain sekolah.local dan kasir.local Nginx baca server_name

2. Menyiapkan Folder Website

sudo mkdir -p /var/www/sekolah
sudo mkdir -p /var/www/kasir
sudo nano /var/www/sekolah/index.html
sudo nano /var/www/kasir/index.html

3. Konfigurasi Nginx untuk Multi-Website

Opsi A — Sub-path:

server {
    listen 80;
    server_name _;

    location /sekolah {
        alias /var/www/sekolah/;
        index index.html;
        try_files $uri $uri/ =404;
    }

    location /kasir {
        alias /var/www/kasir/;
        index index.html;
        try_files $uri $uri/ =404;
    }
}

Opsi B — Port Berbeda:

  • Dengan port: 8080
server {
    listen 8080;
    server_name _;
    root /var/www/sekolah;
    index index.html;
}
  • Dengan port: 8181
server {
    listen 8181;
    server_name _;
    root /var/www/kasir;
    index index.html;
}

Opsi C — Domain Lokal:

server {
    listen 80;
    server_name sekolah.local;
    root /var/www/sekolah;
    index index.html;
}

Aktivasi config:

  • Ubuntu bawaan: symlink dari sites-available ke sites-enabled.
      sudo ln -s /etc/nginx/sites-available/web /etc/nginx/sites-enabled/
    
  • Mainline: taruh di /etc/nginx/conf.d/.
  • Hapus default Ubuntu:
      sudo rm -f /etc/nginx/sites-enabled/default
    
  • Cek & reload:
      sudo nginx -t
      sudo systemctl reload nginx
    

4. DNS Lokal dengan CoreDNS

  • Matikan DNS bawaan Ubuntu yang memakai port 53:
      sudo nano /etc/systemd/resolved.conf
      # DNSStubListener=no
      sudo systemctl restart systemd-resolved
    
  • Install CoreDNS:
      wget https://github.com/coredns/coredns/releases/download/v1.11.1/coredns_1.11.1_linux_amd64.tgz
      tar -zxvf coredns_1.11.1_linux_amd64.tgz
      sudo mv coredns /usr/local/bin/
      sudo mkdir -p /etc/coredns
      sudo nano /etc/coredns/Corefile
    
  • Isi Corefile:
      sekolah.local kasir.local {
          hosts {
              192.168.2.50 sekolah.local kasir.local
              fallthrough
          }
          forward . 8.8.8.8
          log
          errors
      }
    
  • Buat service systemd coredns.service, lalu:
      sudo systemctl daemon-reload
      sudo systemctl enable coredns
      sudo systemctl start coredns
    

5. Firewall & Klien Windows

  • UFW:
      sudo ufw allow 22/tcp
      sudo ufw allow 53
      sudo ufw allow 80/tcp
      sudo ufw allow 8080/tcp
      sudo ufw allow 8181/tcp
      sudo ufw allow from 192.168.200.0/24
      sudo ufw enable
    
  • Windows:
    1. Buka IPv4 Properties.
    2. Preferred DNS Server = IP Ubuntu.
    3. Alternate DNS = 8.8.8.8.
    4. CMD: ipconfig /flushdns.

6. Deploy Aplikasi Dinamis

  • NPM: menjalankan Next.js, tapi terminal terkunci.
  • PM2: menjalankan NPM di background agar tetap hidup.
      pm2 start npm --name "web-sekolah" -- run start
    
  • Python berjalan di port sendiri, misal 5000, lalu diarahkan oleh Nginx.

7. Troubleshooting Umum

Error Penyebab Solusi
DNS request timed out Jaringan VM salah Gunakan Bridged Adapter
DNS_PROBE_POSSIBLE Windows gagal hubungi CoreDNS Cek systemctl status coredns
connection refused Port 53 dibajak systemd-resolved Set DNSStubListener=no
Web 404 URL kurang slash Akses /kasir/
conflicting server name _ Default Nginx belum dihapus Hapus sites-enabled/default

Inti Pertemuan 2: Membangun hosting multi-website di satu server: Nginx sebagai pembagi lalu lintas, CoreDNS sebagai DNS lokal, UFW sebagai pengaman, dan PM2 untuk menjaga aplikasi tetap berjalan.