DocsInfrastruktur
Proxy & domain
Mengaktifkan reverse proxy Traefik, mengarahkan domain ke aplikasi, HTTPS otomatis dari Let's Encrypt, dan memeriksa DNS.
- Proxy
- Traefik v3, container aoox-proxy
- HTTPS
- Let's Encrypt HTTP-01, otomatis per host
- Lingkup
- Host aoox dan tiap server remote
Alur satu request
- 01browserhttps://app.example.com
- 02DNSA record → IP server
- 03Traefik :443router <app>-secure, sertifikat ACME
- 04containernetwork aoox → :<port container>
Traefik memakai docker provider: ia membaca label pada container aplikasi dan hanya mengekspos yang berlabel (exposedbydefault=false). Tidak ada file konfigurasi yang perlu diedit — aoox menulis label saat container dibuat.
Provision reverse proxy
Traefik berjalan per daemon: satu di host aoox, dan opsional satu di tiap server remote dengan port dan email ACME sendiri. Langkah di bawah untuk host.
Pastikan port 80/443 di host kosong
ss -ltnp | grep -E ':80 |:443 ' # harus kosongPort bisa diubah lewat
PROXY_HTTP_PORT/PROXY_HTTPS_PORTdi.env.dist, tapi Let's Encrypt HTTP-01 membutuhkan port 80 dan browser mengharapkan 443.Isi PROXY_ACME_EMAIL (untuk HTTPS)
.env.distPROXY_ACME_EMAIL=kamu@example.com PROXY_ACME_STAGING=false # true saat uji coba, agar tidak kena rate limitTanpa email, Traefik berjalan tanpa resolver ACME: domain hanya dilayani lewat http dan toggle HTTPS di UI nonaktif. Mengubah nilai ini setelah provision → hapus proxy lalu provision lagi.
Settings → Reverse proxy (Traefik) → provision (owner)
Container
aoox-proxydibuat di networkaooxdengan volumeaoox_proxy_acmeuntuk sertifikat. Kartu menampilkan status Running dan apakah ACME aktif.
Menambah domain ke aplikasi
Arahkan DNS
DNSapp.example.com. A 203.0.113.10 # atau app.example.com. CNAME server.example.com.DNS boleh diatur belakangan — aoox tidak memblokir. Tapi sertifikat baru bisa terbit setelah DNS benar.
Halaman aplikasi → tab Domain → tambah
Isi Hostname (
app.example.com, tanpa skema/path) dan nyalakan HTTPS bila proxy punya ACME. Container dibuat ulang dengan label Traefik baru — tanpa build. Satu aplikasi boleh punya beberapa hostname.Kosongkan Port host (disarankan)
Dengan domain, port host tidak diperlukan; mengosongkannya mengaktifkan blue/green dan menutup akses langsung lewat IP:port.
Cek DNS
Tombol cek DNS di baris domain membandingkan hasil resolve dengan IP yang diharapkan —
PUBLIC_IPbila diset, auto-deteksi via ipify (cache 10 menit), atau host server remote:Badge Arti Tindakan okMengarah ke server ini. — salah arahResolve ke IP lain. Perbaiki record A/CNAME; tunggu TTL. belum adaBelum ada record. Buat record di DNS provider. ?IP publik server tidak diketahui. Set PUBLIC_IPdi.env.dist(server di belakang NAT/Cloudflare).
Bagaimana HTTPS bekerja
| Router | Entrypoint | Dibuat bila | Fungsi |
|---|---|---|---|
<app> | web (:80) | Selalu | Melayani http untuk host tanpa HTTPS |
<app>-secure | websecure (:443) | HTTPS aktif | TLS via certresolver le |
<app>-redirect | web (:80) | HTTPS aktif + ACME terpasang | 301 http → https |
- Sertifikat diminta via HTTP-01 saat host pertama kali diakses; Let's Encrypt harus bisa mencapai port 80 server dari internet. Perpanjangan otomatis oleh Traefik.
- Redirect http → https hanya dibuat bila ACME aktif, supaya tanpa
PROXY_ACME_EMAIL(dev) host tetap bisa diakses http, bukan diarahkan ke sertifikat self-signed Traefik. - Container yang menjadi
unhealthyotomatis dilepas dari router (404) — itulah gunanya health check.
Di belakang Cloudflare
- Cek DNS menampilkan salah arah karena hostname resolve ke IP Cloudflare — abaikan bila memang proxied. Saat pertama kali menerbitkan sertifikat, set record ke DNS only dulu agar HTTP-01 mencapai server, lalu aktifkan proxy lagi.
- Mode SSL Cloudflare harus Full (strict) agar origin dilayani lewat HTTPS Traefik; mode Flexible menyebabkan redirect loop dengan router
-redirect.
Operasi
| Aksi | Efek |
|---|---|
| Hapus domain | Container dibuat ulang tanpa label host itu; sertifikat tetap di volume ACME. |
| Toggle HTTPS | Container dibuat ulang; router -secure/-redirect ditambah/dihapus. |
| Hapus proxy (owner) | Semua domain berhenti dilayani; container aplikasi tidak disentuh. Volume ACME ditanyakan. |
| Ganti PROXY_ACME_EMAIL / port | Ubah .env.dist → hapus proxy → provision lagi. |
Catatan
- Aplikasi di server remote memakai proxy milik server itu sendiri: provision dari kartu server (port + email ACME), lalu arahkan DNS ke IP server tersebut — lihat Server remote. Tanpa proxy di sana, pakai port host.
- Stack compose memakai domain per service — lihat Stack compose. File compose juga boleh membawa label
traefik.*sendiri asalkan bergabung ke networkaoox. - Domain untuk panel aoox sendiri diatur lewat env, bukan tab Domain — lihat Domain untuk panel.
- Dev lokal memakai port 8088/8443 (80 sering terpakai); produksi 80/443. Jangan campur nilai antar lingkungan.
Jebakan umum
| Gejala | Penyebab & solusi |
|---|---|
| Tab Domain: Proxy belum berjalan | Provision di Settings dulu. |
| Toggle HTTPS nonaktif | PROXY_ACME_EMAIL kosong saat provision. Isi, hapus proxy, provision lagi. |
| 404 page not found dari Traefik | Container belum healthy, atau domain ditambahkan tapi container belum dibuat ulang (cek log deploy). |
| Sertifikat self-signed / TRAEFIK DEFAULT CERT | ACME gagal: DNS belum benar, port 80 tertutup, atau rate limit. Lihat log container aoox-proxy di terminal; uji dengan PROXY_ACME_STAGING=true. |
| Redirect loop | Cloudflare mode Flexible, atau reverse proxy lain di depan yang men-terminate TLS. Pakai Full (strict) atau matikan HTTPS di aoox. |
| Bekerja via IP:port tapi tidak via domain | Port host masih terisi tidak masalah — cek DNS dan bahwa proxy Running. |
Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitLab ↗