DocsInfrastruktur
Registry
Registry lokal tempat image hasil build disimpan (prasyarat deploy), registry eksternal, dan pemeliharaan disk.
- Registry lokal
- Wajib — tempat image hasil build
- Registry eksternal
- Kredensial untuk registry lain
- Pemeliharaan
- Retensi per aplikasi + cleanup malam
Peran registry dalam deploy
- 01buildimage dibuat oleh daemon Docker
- 02push → localhost:5000/<project>/<app>:<id>
- 03runcontainer dibuat dari image itu
- 04rollbackimage lama ditarik lagi dari registry
Setiap deploy mem-push image ke registry lokal dan rollback menariknya kembali dari sana. Karena itu registry harus diaktifkan sebelum deploy pertama — tanpa itu deploy gagal dengan pesan No self-hosted registry. Aplikasi di server remote tidak memakai registry (image tetap di daemon server).
Registry lokal
Menu Registry → tab Registry lokal → Aktifkan registry (owner)
aoox menjalankan
registry:3sebagai containeraoox-registrydengan autentikasi htpasswd, data di volumeaoox_registry_data, dan penghapusan tag diaktifkan. Kartu menampilkan status Registry siap, container, dan URL.Sebelum diaktifkan, pilih tempat penyimpanan image: Lokal (disk VPS, default) atau salah satu tujuan S3 yang sudah ditambahkan di Backup instance. Tidak bisa diganti setelahnya tanpa hapus lalu aktifkan ulang.
Simpan kredensialnya
Username
aooxdan password acak ditampilkan saat registry diaktifkan — klik Sudah saya simpan setelah mencatatnya. Deploy dari dashboard tidak membutuhkannya; kredensial ini untuk push manual dari mesin lain. Kalau terlupa, owner dan admin bisa menampilkannya lagi, dan owner bisa meresetnya tanpa kehilangan image.
docker login localhost:5000 -u aoox
docker tag myimage:latest localhost:5000/tools/myimage:1.0
docker push localhost:5000/tools/myimage:1.0| Env (.env.dist) | Default | Keterangan |
|---|---|---|
REGISTRY_PORT | 5000 | Port host registry. |
REGISTRY_PUBLISH_ADDRESS | kosong (127.0.0.1) | Antarmuka jaringan yang didengarkan port host. Default-nya membuat registry hanya bisa dijangkau dari server ini; isi 0.0.0.0 agar mesin lain bisa push lewat IP (lihat di bawah). |
REGISTRY_PUBLIC_HOST | localhost | Host yang dipakai docker push saat tanpa domain kustom (lihat di bawah). localhost dikecualikan dari aturan insecure-registry Docker; host lain butuh TLS (reverse proxy) atau entri insecure-registries di daemon.json setiap daemon yang mem-push. |
Siapa yang bisa menjangkau port 5000
Mulai 0.1.0-alpha.13 port host registry di-bind ke 127.0.0.1 secara default, jadi hanya server ini yang bisa push ke localhost:5000 (deploy, docker push dari host sendiri, dan panel tidak terpengaruh: API menjangkau registry lewat jaringan internal aoox). Sebelumnya port itu mendengarkan di semua antarmuka, sehingga registry berpassword terbuka ke internet lewat HTTP biasa. Kartu menampilkan hanya server ini di samping alamat selama itu berlaku. Untuk push dari mesin lain, pilih salah satu:
- Beri domain kustom (disarankan, di bawah): HTTPS lewat proxy, tidak ada port lain yang perlu dibuka.
- Buka port lewat IP: isi
REGISTRY_PUBLISH_ADDRESS=0.0.0.0di.env.dist, restart stack (docker compose ... up -d), lalu buat ulang container registry (aktifkan ulang, atau terapkan/hapus domain kustom). Kartu lalu menampilkan alamat yang dipakai mesin lain (REGISTRY_PUBLIC_HOSTatau IP publik server ini). Ini HTTP biasa, jadi mesin-mesin itu perlu mencantumkan alamatnya diinsecure-registries, dan password adalah satu-satunya penghalang antara registry dan internet — lebih baik pakai domain.
IP:5000 dari laptop atau CI, itu berhenti bekerja setelahnya kecuali port dibuka seperti di atas atau beralih ke domain.Domain kustom
Alternatif dari REGISTRY_PUBLIC_HOST + insecure-registries manual: arahkan registry lewat reverse proxy bawaan (Traefik) dengan sertifikat Let's Encrypt asli — docker push/login langsung percaya tanpa konfigurasi tambahan di daemon mana pun, termasuk node lain di Swarm.
- Butuh proxy sudah diaktifkan (lihat Proxy & domain) dengan
PROXY_ACME_EMAILterisi. - Isi field Domain kustom di kartu Registry lokal (owner/admin) lalu Terapkan — container di-recreate dengan label Traefik (router
aoox-registry), data & kredensial tidak berubah. Bisa juga lewat CLI:
aoox registry domain --set registry.example.comSetelah domain aktif, docker login registry.example.com (tanpa port — HTTPS standar). Port host tetap di-bind sesuai pengaturan di atas (loopback secara default). Hapus domain dengan aoox registry domain --clear atau tombol Hapus domain di dashboard.
Menampilkan atau mereset password
- Tampilkan password (ikon mata di kartu Registry lokal, owner dan admin) membaca lagi password yang tersimpan; tersembunyi sendiri setelah semenit dan setiap penampilan tercatat di audit log.
- Reset password (owner) membuat password baru, menulis ulang file login registry, dan me-restart container sebentar. Image tidak disentuh. Setiap klien dan job CI yang memakai password lama harus menjalankan
docker loginlagi. Kalau ada yang gagal di tengah jalan, password lama tetap berlaku. - Lewat CLI:
aoox registry password --showatauaoox registry password --reset --yes.
Melihat & membersihkan isi
- Tab Registry lokal menampilkan repository → tag beserta digest dan ukuran. Nama repository =
<project-slug>/<app-slug>. - Hapus tag = hapus manifest. Tag lain yang menunjuk digest sama ikut hilang — UI memperingatkan.
- Garbage collect (owner) mengembalikan ruang disk setelah tag dihapus — dijalankan di dalam container registry yang sedang berjalan; ada mode dry run untuk melihat apa yang akan dihapus.
- Hapus image (tombol di header tiap repository) membuang repository itu sepenuhnya, bukan cuma satu tag: semua tag & manifest-nya, foldernya di storage, lalu garbage collect otomatis — beda dari hapus tag satu-satu, dan ini yang dibutuhkan kalau sebuah repository menunjukkan “0 tag” tapi tidak mau hilang dari daftar walau garbage collect sudah dijalankan berkali-kali (garbage collect hanya membuang blob yang tidak terpakai, tidak pernah folder repository itu sendiri). Dialog konfirmasinya menampilkan aplikasi mana saja yang “current image”-nya tampak berasal dari repository ini — rollback atau redeploy tanpa build ke image itu akan gagal setelah dihapus.
- Menghapus tag yang masih dipakai container berjalan tidak menghentikannya, tapi rollback ke versi itu tidak lagi bisa.
- Hapus registry (owner) menghentikan container; volume data ditanyakan. Deploy tidak bisa dilakukan sampai diaktifkan lagi.
Pemeliharaan disk
Supaya disk tidak penuh oleh image lama, aoox punya cleanup otomatis yang berjalan tiap malam pukul 04:30 (zona waktu server, UTC kecuali kamu mengisi TZ) dan bisa dipicu manual.
| Yang dibersihkan | Aturan |
|---|---|
| Deployment lama per aplikasi | Field Riwayat deployment di Pengaturan aplikasi (default 10): deployment sukses di luar jumlah ini dipangkas, image-nya dihapus lokal dan dari registry. Image yang sedang dipakai tidak pernah disentuh. |
| Deployment gagal/queued | Baris (log saja) lebih tua dari 30 hari dihapus. |
| Dangling image & build cache | Dihapus di daemon lokal — tidak menyentuh image aplikasi. |
| Registry | Garbage collect dijalankan setelah pemangkasan. |
Docker → strip disk dan Detail
Strip di atas halaman Docker (host dipilih) menampilkan total pemakaian dan yang bisa dibebaskan; Detail menampilkan pemakaian image, container, volume, build cache, berapa yang bisa direklamasi, jumlah deployment yang bisa dipangkas, dan laporan cleanup terakhir.
Bersihkan sekarang (owner)
Menjalankan siklus yang sama secara on-demand. Laporan: deployment dipangkas, image dihapus, byte direklamasi, status GC registry, dan error bila ada.
Registry eksternal
Tab Registry eksternal → Tambah registry (owner/admin): daftarkan kredensial Docker Hub, GHCR, GitLab, dsb.
| Field | Contoh |
|---|---|
| Nama | GHCR perusahaan |
| URL | ghcr.io |
| Username / Password / token | Token dengan akses baca (dan tulis bila perlu); disimpan terenkripsi |
| Image prefix | Opsional, mis. myorg → image dirujuk sebagai <url>/<prefix>/<app> |
Jebakan umum
| Gejala | Penyebab & solusi |
|---|---|
| Deploy gagal: No self-hosted registry | Aktifkan registry lokal dulu. |
| Push manual: http: server gave HTTP response to HTTPS client | REGISTRY_PUBLIC_HOST bukan localhost tanpa TLS. Tambahkan ke insecure-registries atau pasang reverse proxy TLS. |
| Disk tetap penuh setelah hapus tag | Jalankan Garbage collect, atau Bersihkan sekarang di strip disk di atas halaman Docker. |
| Repository “0 tag” tidak hilang walau sudah Garbage collect | Garbage collect tidak pernah menghapus repository itu sendiri, hanya blob yang tidak terpakai. Pakai tombol Hapus image di header repository tersebut. |
| Rollback gagal: image not found | Tag sudah dipangkas oleh retensi atau dihapus manual. Deploy ulang commit tersebut. |
| Kartu Registry: Docker tidak terjangkau | DOCKER_GID salah atau socket tidak di-mount — lihat Troubleshooting. |
Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitHub ↗