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-availablekesites-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:
- Buka IPv4 Properties.
- Preferred DNS Server = IP Ubuntu.
- Alternate DNS =
8.8.8.8. - 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.