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, atau sertifikat sendiri
- 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.
Aktifkan 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 aktif → hapus proxy lalu aktifkan lagi.
Settings → Reverse proxy (Traefik) → aktifkan (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).
Bila domain sudah dipakai container lain
Jika container lain di daemon yang sama sudah merutekan host itu (biasanya sisa project yang dihapus di versi lama, atau stack lain), dua router menjawab untuk host tersebut dan request terbagi di antaranya. Tab Domain menampilkan peringatan pada domain itu dengan nama container-nya, dan menambah domain mengembalikan informasi yang sama. Tidak ada yang diblokir. Bila container itu sisa, peringatan menunjuk ke halaman Docker (Detail), tempat owner bisa menghapusnya. Log deployment juga mencatatnya.
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.
Tidak mau Let's Encrypt? Unggah sertifikat sendiri (CA perusahaan, wildcard, Cloudflare Origin CA) dan pilih per domain di tab Domain — lihat Sertifikat SSL kustom. Berlaku untuk domain aplikasi; domain panel tetap memakai ACME.
Perlu basic auth, header keamanan, rate limit, allowlist IP, atau redirect www untuk sebuah domain? Tulis middleware Traefik sendiri (atau pakai preset) dan pasang per domain di tab Domain — lihat Konfigurasi proxy.
Operasi
| Aksi | Efek |
|---|---|
| Mode perawatan | Tampilkan halaman 503 di semua domain aplikasi tanpa menghentikannya — lihat Aplikasi. |
| 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 → aktifkan lagi. |
Catatan
- Aplikasi di server remote memakai proxy milik server itu sendiri: aktifkan 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 | Aktifkan di Settings dulu. |
| Toggle HTTPS nonaktif | PROXY_ACME_EMAIL kosong saat diaktifkan. Isi, hapus proxy, aktifkan 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 GitHub ↗