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_passdanroot_passdengan 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 npmuntuk 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!