Install Nginx Proxy Manager: Panduan Lengkap Setup Reverse Proxy Berbasis Docker

🔍 Apa itu Nginx Proxy Manager?
Nginx Proxy Manager (NPM) adalah alat berbasis web yang memungkinkan pengguna untuk mengelola Nginx sebagai reverse proxy dengan antarmuka grafis (GUI) yang intuitif. Tanpa perlu menulis konfigurasi Nginx manual, Anda bisa:
- Mengarahkan domain ke layanan internal (proxy host)
- Mengelola SSL Let’s Encrypt otomatis
- Membuat redirection dan stream host
- Mengatur akses login ke panel admin
Dengan dukungan multi-user, dashboard modern, dan notifikasi log lengkap, NPM menjadi solusi ideal untuk server self-hosted seperti Home Assistant, Nextcloud, atau WordPress.
⚙️ Fitur Utama Nginx Proxy Manager
- ✅ Panel Admin Web (default: port 81)
- ✅ Mendukung HTTP/HTTPS (port 80 dan 443)
- ✅ Otomatisasi SSL Let’s Encrypt
- ✅ Reverse Proxy mudah untuk layanan internal
- ✅ Dukungan untuk SQLite, MariaDB, MySQL, dan Postgres
- ✅ Wildcard SSL dan DNS challenge (Cloudflare)
- ✅ Access control dan logging
- ✅ Backup & Restore manual (data dan sertifikat)
🚀 Cara Install Nginx Proxy Manager Menggunakan Docker
1. Buat File docker-compose.yml
Contoh konfigurasi default dengan SQLite:
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # HTTP
- '443:443' # HTTPS
- '81:81' # Admin Panel
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Jalankan dengan:
docker compose up -d
2. Akses Dashboard NPM
Buka browser dan akses:
http://<ip-server>:81
Login Default:
- Email:
admin@example.com
- Password:
changeme
Setelah login, Anda akan diminta mengubah password dan email.
🧱 Struktur Direktori Penting
./data
→ Menyimpan data pengguna, pengaturan host, logs./letsencrypt
→ Sertifikat SSL./mysql
atau./postgres
→ Data database jika digunakan
🧩 Opsi: Menggunakan MySQL atau MariaDB
Jika Anda membutuhkan performa lebih baik dari SQLite, gunakan MySQL/MariaDB:
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '81:81'
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db
db:
image: 'jc21/mariadb-aria:latest'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./mysql:/var/lib/mysql
🔔 Penting: Variabel DB_MYSQL_*
akan menggantikan penggunaan SQLite secara otomatis.
🗃️ Opsi: Menggunakan PostgreSQL
Untuk pengguna PostgreSQL:
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '81:81'
environment:
DB_POSTGRES_HOST: 'db'
DB_POSTGRES_PORT: '5432'
DB_POSTGRES_USER: 'npm'
DB_POSTGRES_PASSWORD: 'npmpass'
DB_POSTGRES_NAME: 'npm'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_USER: 'npm'
POSTGRES_PASSWORD: 'npmpass'
POSTGRES_DB: 'npm'
volumes:
- ./postgres:/var/lib/postgresql/data
🔔 Skema custom di PostgreSQL tidak didukung, hanya skema default public
.
🍓 Menjalankan di Raspberry Pi / Arsitektur ARM
Image Docker jc21/nginx-proxy-manager:latest
sudah mendukung berbagai arsitektur, termasuk:
amd64
arm64
(seperti Raspberry Pi 4 64-bit)armv7
(seperti Raspberry Pi 3)
Tidak diperlukan konfigurasi tambahan untuk menjalankannya di perangkat ARM.
Namun, jika Anda mengalami masalah dengan image database bawaan jc21/mariadb-aria:latest
, disarankan menggunakan alternatif berikut yang lebih kompatibel di ARM:
yobasystems/alpine-mariadb:latest
🧱 Struktur Direktori Penting
./data
→ Menyimpan pengaturan, data user, config host./letsencrypt
→ Menyimpan sertifikat SSL./mysql
,./postgres
→ Menyimpan data database jika menggunakan MySQL/Postgres
🔐 Tips Keamanan dan Personalisasi
- Ubah email dan password default segera setelah login
- Gunakan environment:
environment:
INITIAL_ADMIN_EMAIL: admin@domain.com
INITIAL_ADMIN_PASSWORD: passku123
- Pastikan port 80 dan 443 tidak digunakan oleh aplikasi lain
- Gunakan DNS yang sudah mengarah ke IP server untuk sukses validasi SSL
📦 Backup & Restore
Backup:
./data
dan./letsencrypt
→ Copy atau rsync ke storage lain- Database volume
./mysql
atau./postgres
Restore:
- Deploy ulang menggunakan
docker-compose up -d
- Pastikan struktur folder sama dan volume sudah restore
📊 Contoh Penggunaan Umum
- Reverse Proxy Home Assistant
- Domain:
ha.domain.com
- Forward ke
http://192.168.1.5:8123
atau bisa juga menggunakan nama container sepertihttp://home-assistant:8123
- Enable SSL + Force HTTPS
- Domain:
- Subdomain Multisite
blog1.domain.com
,blog2.domain.com
- Redirect ke kontainer berbeda dengan format
http://nama-container:port
- Stream Host for FTP/SSH
- Anda bisa meneruskan koneksi TCP ke port tertentu seperti FTP (21) atau SSH (22) ke container atau IP tertentu di jaringan internal.
- Contoh:
- Domain:
ssh.domain.com
- Port:
22
- Forward Hostname/nama container/IP:
192.168.1.10
- Forward Port:
22
- Protokol:
TCP
- Domain:
- Pastikan Anda mengatur Stream Host di menu NPM (bukan Proxy Host) untuk jenis koneksi TCP selain HTTP/HTTPS.
📌 Catatan: Saat mengisi kolom “Forward Hostname / IP” di NPM, Anda bisa menggunakan:
- IP lokal dari container (misalnya:
192.168.1.x
) - Nama container yang sama seperti yang didefinisikan di
docker-compose.yml
Selama container berada dalam jaringan Docker yang sama (bridge
atau custom network
), penamaan antar container dapat digunakan.
🌐 Kapan Harus Gunakan NPM?
Gunakan Nginx Proxy Manager jika Anda:
- Mengelola banyak aplikasi dengan subdomain berbeda
- Ingin SSL otomatis tanpa sertifikat manual
- Membutuhkan dashboard user-friendly
- Tidak ingin ribet konfigurasi Nginx CLI
🌟 Kesimpulan
Dengan Nginx Proxy Manager, mengelola reverse proxy dan SSL menjadi mudah, cepat, dan aman. Baik untuk server rumah, bisnis kecil, atau proyek self-hosted, NPM menyediakan antarmuka yang powerful dengan setup berbasis Docker. Anda dapat menyesuaikan database, skema jaringan, serta keamanannya sesuai kebutuhan.