Install Nginx Proxy Manager dengan Docker

Install Nginx Proxy Manager dengan Docker

Install Nginx Proxy Manager dengan Docker

Pendahuluan

Nginx Proxy Manager (NPM) adalah antarmuka berbasis web yang memudahkan pembuatan dan pengelolaan reverse‑proxy, SSL, dan keamanan HTTP. Menggunakan Docker memudahkan instalasi, isolasi, serta pemeliharaan versi. Tutorial ini menguraikan proses instalasi, konfigurasi, serta praktik terbaik untuk produksi.

Prasyarat & Persiapan

Item Keterangan
Server VPS/host dengan minimal 1 GB RAM, CPU 1 core, Ubuntu 20.04+ atau Debian 11+
Docker Versi 20.10+ dan Docker Compose 2.x
Port 80, 443, 81 (UI), 9000 (NPM) – pastikan tidak terblokir
Akun Akun root atau sudoer
Backup Simpan data /docker/nginx-proxy-manager secara rutin
Tools Gunakan ChatGPT Plus (https://tools.jartekindo.com/tool/chatgpt-plus/) untuk membantu debugging, atau Notion AI (https://tools.jartekindo.com/tool/notion-ai/) untuk menulis dokumentasi.

Catatan: Pastikan firewall (ufw, iptables) mengizinkan port 80/443/81.

Langkah‑Demi‑Langkah

1. Instal Docker dan Docker Compose

sudo apt update
sudo apt install -y docker.io docker-compose
sudo systemctl enable --now docker

2. Buat Direktori Proyek

mkdir -p ~/nginx-proxy-manager
cd ~/nginx-proxy-manager

3. Siapkan docker-compose.yml

version: "3.8"

services:
  app:
    image: jc21/nginx-proxy-manager:latest
    container_name: npm
    restart: unless-stopped
    ports:
      - "80:80"      # HTTP
      - "443:443"    # HTTPS
      - "81:81"      # UI
    environment:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm_pass"
      DB_MYSQL_NAME: "npm"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

  db:
    image: mariadb:10.5
    container_name: npm-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: "root_pass"
      MYSQL_DATABASE: "npm"
      MYSQL_USER: "npm"
      MYSQL_PASSWORD: "npm_pass"
    volumes:
      - ./db:/var/lib/mysql

Tip: Ganti npm_pass dan root_pass dengan password kuat. Simpan file ini di folder ~/nginx-proxy-manager.

4. Jalankan Docker Compose

docker compose up -d

Periksa status:

docker compose ps

5. Akses UI

Buka browser ke http://<IP_SERVER>:81. Login default:
- Email: admin@example.com
- Password: changeme

Keamanan: Ubah password default segera.

Tips Optimasi & Keamanan

Praktik Penjelasan
Gunakan HTTPS NPM otomatis mengelola Let’s Encrypt. Pastikan port 80/443 terbuka.
Non‑root User Jalankan Docker sebagai user non‑root (sudo usermod -aG docker <user>).
Backup Database Jadwalkan backup MariaDB (mysqldump) ke bucket cloud.
Firewall ufw allow 80/tcp, ufw allow 443/tcp, ufw allow 81/tcp.
Log Rotation Konfigurasikan logrotate untuk /var/lib/docker/containers.
Update Rutin docker compose pull dan docker compose up -d setiap minggu.
Monitoring Gunakan Prometheus + Grafana atau cAdvisor untuk memantau kontainer.

AI‑Assisted Documentation: Gunakan Jasper (https://tools.jartekindo.com/tool/jasper-ai/) atau Writesonic (https://tools.jartekindo.com/tool/writesonic/) untuk menulis dokumentasi teknis yang konsisten.

Troubleshooting Error Umum

Error Penyebab Solusi
docker compose up gagal karena “permission denied” Folder tidak memiliki hak akses sudo chown -R $USER:$USER ~/nginx-proxy-manager
UI tidak dapat mengakses port 81 Firewall memblokir ufw allow 81/tcp
SSL gagal Port 80 tidak terbuka Pastikan 80:80 di docker-compose.yml dan firewall terbuka
Database tidak terhubung Password salah Periksa variabel DB_MYSQL_PASSWORD dan MYSQL_PASSWORD
docker compose tidak menemukan file Path salah Pastikan berada di direktori yang berisi docker-compose.yml

Debugging: Gunakan docker logs npm untuk melihat log aplikasi.

Kesimpulan

Dengan Docker, instalasi Nginx Proxy Manager menjadi proses satu‑baris yang dapat diulang di setiap server. Konfigurasi di atas menyiapkan reverse‑proxy, UI, dan database dalam satu stack yang terisolasi. Terapkan praktik keamanan dan backup untuk menjaga kestabilan produksi. Selamat mencoba!

🏷️ Topik Terkait: