DocsInfrastruktur
DNS Cloudflare
Buat record DNS domain aplikasi secara otomatis dan dapatkan sertifikat wildcard lewat DNS-01, memakai API token Cloudflare.
- Hubungkan
- Integrasi → Penyedia DNS (owner/admin)
- Per domain
- Aplikasi → tab Domain: Record DNS, mode sertifikat
- Wildcard
- Infrastruktur → Reverse proxy → Sertifikat DNS-01 (owner)
Apa yang dilakukan
Biasanya Anda membuat record DNS domain sendiri dan aoox hanya memeriksanya. Dengan koneksi Cloudflare ada dua tambahan opsional:
- Record DNS: saat Anda menambah domain ke aplikasi, aoox membuat record A (atau AAAA bila alamat server berupa IPv6) di zona Cloudflare Anda, mengarah ke IP yang sama dengan yang diharapkan cek DNS.
- Sertifikat DNS-01: proxy membuktikan kepemilikan domain lewat API Cloudflare, bukan port 80, sehingga sertifikat wildcard menjadi mungkin (misalnya satu sertifikat untuk semua preview pull request).
Keduanya opsional. Tanpa koneksi, tidak ada yang berubah: DNS dan sertifikat tetap Anda kelola seperti biasa. Untuk saat ini hanya Cloudflare yang didukung.
Membuat API token
Di Cloudflare: My Profile, API Tokens, Create Token
Pilih token kustom dengan dua izin, dibatasi ke zona yang Anda pakai:
Zone:Zone:ReadZone:DNS:Edit
Salin tokennya
Cloudflare hanya menampilkannya sekali. Token milik akun (bukan pengguna) juga membutuhkan ID akun, lihat di bawah.
Menambah koneksi
Integrasi → Penyedia DNS
Owner dan admin melihatnya. Klik tambah; dialognya bernama Koneksi Cloudflare baru.
Isi nama dan token
Beri nama (harus unik), tempel API token, dan isi ID akun (opsional) hanya untuk token milik akun. Token disimpan terenkripsi dan tidak dapat dilihat lagi.
Uji
Tombol uji memverifikasi token dan menampilkan zona yang bisa dilihatnya, misalnya “3 zona”. Token yang dibatasi ke satu sub-zona juga bisa: aoox mencari zona yang paling panjang cocok untuk tiap host.
Menghapus koneksi ditolak (409) selama masih ada domain atau proxy yang memakainya, karena aoox tidak lagi bisa membersihkan record yang pernah dibuatnya. Semua anggota project bisa melihat nama koneksi (untuk memilih pada domain); hanya owner dan admin yang menambah, menguji, atau menghapus.
Record DNS untuk sebuah domain
Di tab Domain aplikasi, form tambah punya pilihan Record DNS: Saya atur DNS sendiri (default) atau Cloudflare: <nama koneksi>. Tiap domain yang sudah ada punya pilihan yang sama di barisnya, dengan lencana status, tombol sinkronkan, dan pesan terakhir. Developer ke atas bisa mengubahnya; viewer hanya melihat.
| Opsi | Arti |
|---|---|
| Proxied (awan oranye) | Mati secara default. Proxy perlu melihat host asli dan menjawab tantangan sertifikat sendiri. Nyalakan hanya bila Anda memang ingin Cloudflare di depan; mode SSL-nya lalu harus Full (strict) (lihat Bagaimana HTTPS bekerja). |
| Ganti record yang sudah ada dengan isi berbeda | Mati secara default. Lihat aturan di bawah. |
Perlakuan aoox terhadap record yang sudah ada
| Situasi | Yang dilakukan aoox |
|---|---|
| Belum ada record untuk nama itu | Membuatnya (TTL otomatis, komentar “Managed by aoox”). |
| Record buatan aoox sebelumnya telah berubah | Memperbaruinya di tempat. |
| Ada record dengan isi lain | Dibiarkan dan dilaporkan sebagai peringatan. Bila Ganti record yang sudah ada… aktif, aoox memperbarui dan mengambil alih record itu. |
| Ada record identik yang bukan buatan aoox | Dibiarkan apa adanya dan tidak dilacak, jadi tidak akan pernah dihapus nanti. |
| Ada CNAME pada nama itu | Tidak membuat apa pun dan memberi peringatan. |
| Tidak ada zona yang cocok dengan host, atau Cloudflare tidak terjangkau | Memberi peringatan; domainnya tetap ditambahkan. |
- DNS tidak pernah menggagalkan permintaan. Domain tetap ditambahkan dan masalahnya muncul sebagai peringatan (“Domain ditambahkan, tetapi DNS perlu diperiksa”) plus lencana Peringatan DNS atau DNS gagal di barisnya. Perbaiki penyebabnya lalu tekan tombol sinkronkan untuk mencoba lagi; DNS ok berarti record sudah ada.
- aoox hanya menghapus record yang dibuatnya sendiri, berdasarkan id yang tersimpan, saat Anda menghapus domain, menghapus aplikasi, atau mengembalikan domain ke Saya atur DNS sendiri. Ia tidak pernah mendaftar atau menghapus hal lain di zona Anda.
- Record ditulis sebelum container dibuat ulang, jadi permintaan sertifikat pertama sudah menemukan namanya.
- Menghapus seluruh project hanya menghapus barisnya: record di Cloudflare tetap ada.
- Ekspor project menyimpan nama koneksi dan flag proxied, tidak pernah token atau id record. Impor tidak membuat record: pakai tombol sinkronkan.
DNS-01 pada proxy
Sertifikat memakai HTTP-01 kecuali Anda mengaktifkan ini. Fitur ini menambah resolver ACME kedua di Traefik yang menjawab tantangan lewat Cloudflare.
Atur email ACME pada proxy dulu
DNS-01 memakai email akun ACME yang sama, jadi proxy harus sudah punya satu (Aktifkan reverse proxy).
Infrastruktur → Reverse proxy → kartu Sertifikat DNS-01
Pilih proxy (Host aoox atau server remote), pilih Koneksi DNS, lalu klik Aktifkan DNS-01. Owner yang bisa mengubahnya; admin bisa melihat.
Konfirmasi pembuatan ulang
Pada proxy yang berjalan muncul dialog Buat ulang proxy?: proxy dibuat ulang, beberapa detik tanpa layanan untuk semua domain di dalamnya. Sertifikat dan rute lain tetap ada. Lanjutkan dengan Buat ulang dan lanjutkan.
Kartu menampilkan status: Aktif, Mati, Belum diterapkan (tersimpan, proxy belum dibuat ulang) atau Proxy tidak berjalan, beserta apa yang bergantung padanya. Tombol Nonaktifkan ditolak (409) selama masih ada domain atau preview yang memakai DNS-01; kembalikan dulu ke otomatis.
docker inspect di mesin itu dapat membacanya, seperti rahasia lain yang aoox berikan ke container. Pakai token yang dibatasi ke zona yang diperlukan.Mode sertifikat
Setelah proxy punya DNS-01, domain HTTPS mendapat pilihan Mode sertifikat di tab Domain (tanpa DNS-01 hanya muncul keterangan bahwa DNS-01 belum diaktifkan pada proxy ini):
| Mode | Sertifikat |
|---|---|
| Otomatis (HTTP-01) | Default: diminta saat host pertama kali diakses, butuh port 80. |
| DNS-01 untuk host ini | Satu sertifikat untuk host itu, dibuktikan lewat DNS. |
Wildcard DNS-01 (*.example.com) | Satu sertifikat untuk domain induk host (app.example.com menjadi *.example.com), dipakai bersama oleh semua host di bawahnya. |
- Hanya untuk domain HTTPS, dan tidak bersama sertifikat yang diunggah (API menjawab 400).
- Bila domain meminta DNS-01 tetapi proxy-nya tidak lagi punya resolver, ia kembali ke HTTP-01 dengan peringatan, bukan gagal.
- Impor project mempertahankan mode DNS-01 hanya bila proxy tujuan punya DNS-01; jika tidak, domain memakai HTTP-01 dan laporan mencatatnya.
Sertifikat wildcard untuk preview
Preview pull request biasanya mendapat sertifikat per host preview. Di tab Webhook aplikasi, kartu preview punya Sertifikat wildcard untuk preview: satu sertifikat DNS-01 untuk *.<domain preview>, bukan satu per pull request. Perlu DNS-01 pada proxy dan domain preview; sakelarnya nonaktif beserta penjelasan sampai keduanya ada.
*.preview.example.com sendiri, seperti pada prasyarat preview.Batasan
- Hanya Cloudflare. Penyedia DNS lain belum didukung.
- Record dibuat hanya untuk domain aplikasi. Domain stack compose dan host UI admin database tetap DNS manual.
- Tidak ada cek DNS ke Cloudflare sendiri; cek DNS biasa tetap membandingkan DNS publik dengan IP yang diharapkan.
- Penerbitan sertifikat DNS-01 yang sebenarnya dan proxy di server remote belum dicoba dengan akun Cloudflare sungguhan; uji dulu dengan ACME staging.
Jebakan umum
| Gejala | Penyebab & solusi |
|---|---|
| Uji menjawab 403 atau tidak ada zona | Token tidak punya Zone:Zone:Read atau Zone:DNS:Edit, atau dibatasi ke zona lain. Buat token baru. |
| Peringatan: tidak ada zona untuk host | Token tidak bisa melihat zona yang memuat host itu. Tambahkan zonanya ke token. |
| Peringatan: record sudah ada | Ada record lain dengan isi berbeda pada nama itu. Ubah sendiri, atau pakai Ganti record yang sudah ada…. |
| Browser menolak sertifikat saat Proxied aktif | Mode SSL Cloudflare harus Full (strict); atau matikan Proxied. |
| Aktifkan DNS-01 meminta email ACME | Proxy belum punya email ACME; atur dulu. |
| Koneksi tidak bisa dihapus atau DNS-01 tidak bisa dinonaktifkan (409) | Masih ada domain, preview, atau proxy yang memakainya. Lepaskan dulu. |
Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitHub ↗