DocsMulai
Domain untuk panel
Melayani dashboard dan API aoox lewat domain sendiri dengan HTTPS dari Let's Encrypt, memakai reverse proxy bawaan.
- Hasil
- https://panel.example.com + https://api.panel.example.com
- Cara
- Override compose + Traefik bawaan
- Butuh
- 2 record DNS, port 80/443, PROXY_ACME_EMAIL
Sebelum & sesudah
| Via IP (default) | Via domain | |
|---|---|---|
| Akses | http://203.0.113.10:3000 | https://panel.example.com |
| API | http://203.0.113.10:3001 | https://api.panel.example.com |
| Cookie sesi | tanpa Secure | Secure (mengikuti WEB_ORIGIN https) |
| Webhook Git | IP:3001 harus publik | URL API yang rapi |
| Port 3000/3001 | satu-satunya jalan | tetap terbuka (akses via IP) |
Dua hostname dibutuhkan karena browser memanggil API secara langsung (Socket.IO untuk terminal & log) — bukan lewat web.
Prasyarat
- aoox sudah berjalan via IP (Instalasi) dan kamu bisa login.
- Port
80dan443di host kosong. - Dua record DNS
Ake IP server:
panel.example.com. A 203.0.113.10
api.panel.example.com. A 203.0.113.10Tunggu sampai dig +short panel.example.com dari luar menjawab IP itu — sertifikat baru bisa terbit setelah DNS benar.
Langkah
Isi variabel domain di .env.dist
.env.distWEB_DOMAIN=panel.example.com API_DOMAIN=api.panel.example.com PROXY_ACME_EMAIL=kamu@example.com PROXY_ACME_STAGING=false # true saat uji coba # ganti keduanya ke https + domain di atas WEB_ORIGIN=https://panel.example.com PUBLIC_API_URL=https://api.panel.example.comVariabel Kenapa WEB_DOMAIN/API_DOMAINHost untuk label Traefik di service web dan api. WEB_ORIGINHarus sama persis dengan URL di browser: cookie sesi mendapat flag Secure mengikutinya, dan gateway terminal/log menolak Origin lain. PUBLIC_API_URLURL API yang dipanggil browser dan provider webhook. PROXY_ACME_EMAILMengaktifkan resolver Let's Encrypt; tanpa ini tidak ada HTTPS dan tidak ada redirect. Jalankan ulang dengan override domain
docker compose -f docker-compose.dist.yml -f docker-compose.domain.yml --env-file .env.dist up -ddocker-compose.domain.ymlmemasang label Traefik ke servicewebdanapi(routeraoox-web/aoox-api+ varian-secure, bentuk yang sama dengan domain aplikasi) dan memasukkannya ke networkaoox. Compose menolak start bilaWEB_DOMAIN/API_DOMAINkosong.Mulai sekarang selalu sertakan kedua file-fpada setiapup/pull. Menjalankan tanpa override akan mencabut label dan domain berhenti dilayani.Provision reverse proxy (bila belum)
Login (masih via IP:3000 bila perlu) → Settings → Reverse proxy (Traefik) → provision (owner). Proxy yang sudah ada tapi di-provision tanpa
PROXY_ACME_EMAILharus dihapus dan di-provision lagi agar resolver ACME aktif.Buka https://panel.example.com
Sertifikat diminta saat host pertama kali diakses (± beberapa detik). Login ulang — sesi lama (cookie tanpa Secure di origin IP) tidak berlaku di origin baru.
Verifikasi
curl -I https://panel.example.com # 200, issuer Let's Encrypt
curl -I http://panel.example.com # 301 → https
curl -s https://api.panel.example.com/auth/setup-status # {"needsSetup":false}- Terminal web bisa dibuka tanpa pesan origin not allowed.
- Log realtime di tab Deploy mengalir (Socket.IO ke
PUBLIC_API_URL). - Webhook URL di tab Webhook aplikasi kini berawalan
https://api.panel.example.com/webhooks/….
Variasi
Uji coba dulu dengan staging
PROXY_ACME_STAGING=true memakai CA staging Let's Encrypt (tanpa rate limit; sertifikat tidak dipercaya browser). Setelah yakin DNS dan port benar, ganti ke false, hapus proxy, provision lagi — volume ACME akan meminta sertifikat produksi.
Di belakang Cloudflare
- Mode SSL Full (strict); Flexible menyebabkan redirect loop.
- Saat pertama menerbitkan sertifikat, set kedua record ke DNS only.
- WebSocket (terminal, log) didukung Cloudflare; pastikan tidak diblokir oleh aturan.
Reverse proxy sendiri (nginx/Caddy di depan)
Tidak perlu docker-compose.domain.yml: arahkan proxy-mu ke :3000 dan :3001, aktifkan WebSocket upgrade, dan tetap set WEB_ORIGIN/PUBLIC_API_URL ke URL publik https. Bila TLS di-terminate di proxy-mu dan ke aoox lewat http, set COOKIE_SECURE=true agar cookie tetap Secure.
Jebakan umum
| Gejala | Penyebab & solusi |
|---|---|
| set WEB_DOMAIN in .env.dist saat up | Variabel kosong; compose menolak start. |
| Domain jalan, lalu hilang setelah update | up -d tanpa -f docker-compose.domain.yml. Selalu sertakan kedua file. |
| Login berhasil tapi langsung logout / 401 | WEB_ORIGIN masih http atau beda host — cookie Secure/origin tidak cocok. Samakan, up -d, login ulang. |
| Terminal: origin not allowed | Sama seperti di atas: WEB_ORIGIN ≠ URL browser. |
| Sertifikat default Traefik | PROXY_ACME_EMAIL kosong saat provision, DNS belum benar, atau port 80 tertutup. Hapus proxy → provision lagi setelah diperbaiki. |
| Log/terminal tidak mengalir, halaman lain normal | PUBLIC_API_URL tidak bisa dijangkau dari browser (WebSocket diblokir oleh proxy di depan). |
Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitLab ↗