### 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
```bash
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:**
```nginx
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`
```nginx
server {
    listen 8080;
    server_name _;
    root /var/www/sekolah;
    index index.html;
}
```
- Dengan port: `8181`
```nginx
server {
    listen 8181;
    server_name _;
    root /var/www/kasir;
    index index.html;
}
```

**Opsi C — Domain Lokal:**
```nginx
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`.
  ```bash
  sudo ln -s /etc/nginx/sites-available/web /etc/nginx/sites-enabled/
  ```
- Mainline: taruh di `/etc/nginx/conf.d/`.
- Hapus default Ubuntu:
  ```bash
  sudo rm -f /etc/nginx/sites-enabled/default
  ```
- Cek & reload:
  ```bash
  sudo nginx -t
  sudo systemctl reload nginx
  ```

### 4. DNS Lokal dengan CoreDNS
- Matikan DNS bawaan Ubuntu yang memakai port 53:
  ```bash
  sudo nano /etc/systemd/resolved.conf
  # DNSStubListener=no
  sudo systemctl restart systemd-resolved
  ```
- Install CoreDNS:
  ```bash
  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:
  ```text
  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:
  ```bash
  sudo systemctl daemon-reload
  sudo systemctl enable coredns
  sudo systemctl start coredns
  ```

### 5. Firewall & Klien Windows
- UFW:
  ```bash
  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.
  ```bash
  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.