Setup dengan Docker

Cara termudah untuk men-deploy NxGate adalah menggunakan Docker Compose. Setup ini menjalankan MySQL, backend API, frontend, dan Caddy (reverse proxy dengan SSL otomatis) dalam satu perintah.

1. Persiapan Environment

1# Salin template environment
2cp .env.docker.example .env
3
4# Edit dengan text editor favorit Anda
5nano .env

Pastikan BACKEND_FQDN dan FRONTEND_FQDN cocok persis dengan subdomain yang sudah diarahkan ke IP server Anda. Caddy akan otomatis mengurus SSL certificate via Let's Encrypt.

2. Buat Docker Network

Caddy membutuhkan network eksternal bernama caddy. Perintah ini hanya perlu dijalankan sekali:

1# Buat network caddy (hanya sekali, saat pertama install)
2docker network create caddy

3. Build dan Jalankan

1# Build image dan jalankan semua service di background
2docker compose up -d --build
3
4# Pantau log (Ctrl+C untuk keluar dari log, service tetap berjalan)
5docker compose logs -f
6
7# Lihat status semua service
8docker compose ps

API service menunggu 30 detik sebelum start untuk memastikan MySQL sudah ready. Ini adalah perilaku yang disengaja via sleep 30 di command startup.

Akses Dashboard

Setelah semua service berjalan, buka browser ke https://yourdomain.com dan daftar akun pertama. Akun pertama yang dibuat secara otomatis memiliki akses penuh ke semua fitur.

Setelah membuat akun pertama (admin), disarankan untuk mengatur PUBLIC_DISABLE_SIGN_UP=true di .env lalu restart service web untuk menonaktifkan pendaftaran publik.

Alternatif: Nginx sebagai Reverse Proxy

Jika sudah menggunakan Nginx di server, Anda bisa skip service Caddy dan expose port API dan frontend langsung ke localhost:

docker-compose.override.yml
1# Jika menggunakan Nginx sebagai reverse proxy eksternal,
2# expose port di docker-compose.yml dengan menambahkan:
3services:
4 api:
5 ports:
6 - "127.0.0.1:3000:3000" # API backend
7 web:
8 ports:
9 - "127.0.0.1:5000:5000" # Frontend

Kemudian konfigurasi Nginx seperti berikut:

/etc/nginx/sites-available/nxgate-*
1# /etc/nginx/sites-available/nxgate-api
2server {
3 listen 443 ssl http2;
4 server_name api.nxgate.example.com;
5
6 ssl_certificate /etc/letsencrypt/live/api.nxgate.example.com/fullchain.pem;
7 ssl_certificate_key /etc/letsencrypt/live/api.nxgate.example.com/privkey.pem;
8
9 location / {
10 proxy_pass http://127.0.0.1:3000;
11 proxy_http_version 1.1;
12 proxy_set_header Host $host;
13 proxy_set_header X-Real-IP $remote_addr;
14 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
15 proxy_set_header X-Forwarded-Proto $scheme;
16 }
17}
18
19# /etc/nginx/sites-available/nxgate-frontend
20server {
21 listen 443 ssl http2;
22 server_name nxgate.example.com;
23
24 ssl_certificate /etc/letsencrypt/live/nxgate.example.com/fullchain.pem;
25 ssl_certificate_key /etc/letsencrypt/live/nxgate.example.com/privkey.pem;
26
27 location / {
28 proxy_pass http://127.0.0.1:5000;
29 proxy_http_version 1.1;
30 proxy_set_header Host $host;
31 proxy_set_header X-Real-IP $remote_addr;
32 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
33 proxy_set_header X-Forwarded-Proto $scheme;
34 }
35}

Troubleshooting

1# Cek log service tertentu
2docker compose logs api
3docker compose logs db
4
5# Restart service tertentu
6docker compose restart api
7
8# Masuk ke container (untuk debugging)
9docker compose exec api sh
10
11# Hard reset (WARNING: menghapus semua data)
12docker compose down -v
13docker compose up -d --build