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

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.

  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 provision → hapus proxy lalu provision lagi.

  3. Settings → Reverse proxy (Traefik) → provision (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).

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.

Operasi

AksiEfek
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 → 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 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 berjalanProvision di Settings dulu.
Toggle HTTPS nonaktifPROXY_ACME_EMAIL kosong saat provision. Isi, hapus proxy, provision 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
Cek DNS berkala/otomatis; sertifikat wildcard (DNS-01); redirect www ↔ apex; path/prefix routing; basic auth per domain. Sertifikat yang gagal terbit kini dilaporkan lewat notifikasi.

Langkah berikutnya

Ada yang keliru? Edit halaman ini di GitLab ↗