$ aoox

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

  1. 01browserhttps://app.example.com
  2. 02DNSA record → IP server
  3. 03Traefik :443router <app>-secure, sertifikat ACME
  4. 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.

  1. Pastikan port 80/443 di host kosong

    ss -ltnp | grep -E ':80 |:443 '   # harus kosong

    Port bisa diubah lewat PROXY_HTTP_PORT / PROXY_HTTPS_PORT di .env.dist, tapi Let's Encrypt HTTP-01 membutuhkan port 80 dan browser mengharapkan 443.

  2. Isi PROXY_ACME_EMAIL (untuk HTTPS)

    .env.dist
    PROXY_ACME_EMAIL=kamu@example.com
    PROXY_ACME_STAGING=false     # true saat uji coba, agar tidak kena rate limit

    Tanpa 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.

  3. Settings → Reverse proxy (Traefik) → aktifkan (owner)

    Container aoox-proxy dibuat di network aoox dengan volume aoox_proxy_acme untuk sertifikat. Kartu menampilkan status Running dan apakah ACME aktif.

Menambah domain ke aplikasi

  1. Arahkan DNS

    DNS
    app.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.

  2. 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.

  3. Kosongkan Port host (disarankan)

    Dengan domain, port host tidak diperlukan; mengosongkannya mengaktifkan blue/green dan menutup akses langsung lewat IP:port.

  4. Cek DNS

    Tombol cek DNS di baris domain membandingkan hasil resolve dengan IP yang diharapkan — PUBLIC_IP bila diset, auto-deteksi via ipify (cache 10 menit), atau host server remote:

    BadgeArtiTindakan
    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_IP di .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

RouterEntrypointDibuat bilaFungsi
<app>web (:80)SelaluMelayani http untuk host tanpa HTTPS
<app>-securewebsecure (:443)HTTPS aktifTLS via certresolver le
<app>-redirectweb (:80)HTTPS aktif + ACME terpasang301 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 unhealthy otomatis 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

AksiEfek
Mode perawatanTampilkan halaman 503 di semua domain aplikasi tanpa menghentikannya — lihat Aplikasi.
Hapus domainContainer dibuat ulang tanpa label host itu; sertifikat tetap di volume ACME.
Toggle HTTPSContainer 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 / portUbah .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 network aoox.
  • 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

GejalaPenyebab & solusi
Tab Domain: Proxy belum berjalanAktifkan di Settings dulu.
Toggle HTTPS nonaktifPROXY_ACME_EMAIL kosong saat diaktifkan. Isi, hapus proxy, aktifkan lagi.
404 page not found dari TraefikContainer belum healthy, atau domain ditambahkan tapi container belum dibuat ulang (cek log deploy).
Sertifikat self-signed / TRAEFIK DEFAULT CERTACME gagal: DNS belum benar, port 80 tertutup, atau rate limit. Lihat log container aoox-proxy di terminal; uji dengan PROXY_ACME_STAGING=true.
Redirect loopCloudflare 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 domainPort host masih terisi tidak masalah — cek DNS dan bahwa proxy Running.
Belum tersedia
Redirect www ↔ apex; path/prefix routing; basic auth per domain. Sertifikat yang gagal terbit kini dilaporkan lewat notifikasi. Sertifikat wildcard (DNS-01) dan record DNS otomatis tersedia dengan koneksi Cloudflare — lihat DNS Cloudflare.

Langkah berikutnya

Ada yang keliru? Edit halaman ini di GitHub ↗