Cara Install Caddy di Ubuntu 26.04
Package Caddy di repositori universe Ubuntu 26.04 masih versi 2.6.2, sementara rilis stabil upstream adalah v2.11.7. Untuk memakai versi upstream, install Caddy dari binary resmi pada rilis GitHub v2.11.7, verifikasi checksum SHA-512, lalu jalankan sebagai systemd service.
Requirementsโ
- Server atau VM Ubuntu 26.04 LTS.
- User dengan hak
sudoatau akses root. - Port
80dan443tidak sedang dipakai layanan lain. Caddy memakai port tersebut untuk HTTP dan HTTPS. - Package
curldanca-certificates. - Opsional: domain publik dengan A record yang mengarah ke IP server untuk HTTPS otomatis.
Environmentโ
- OS: Ubuntu 26.04 LTS (Resolute Raccoon) 64-bit, instalasi server minimal.
- Akses: SSH atau konsol lokal sebagai user non-root dengan
sudo. - Versi Caddy:
v2.11.7dari rilis stabil GitHub saat artikel disiapkan. - Binary:
/usr/local/bin/caddy. - Konfigurasi:
/etc/caddy/Caddyfile. - Home service user:
/var/lib/caddy. - Unit systemd:
/etc/systemd/system/caddy.service. - Direktori unduhan:
/tmp.
Cara Install Caddy dari GitHub Releaseโ
Instalasi manual ini mengambil binary Linux amd64 dan manifest checksum dari rilis Caddy. Anda akan menyiapkan user service non-root dan unit systemd agar Caddy berjalan setelah server dinyalakan ulang.
Unduh Binary dan Verifikasi Checksumโ
-
Update indeks package dan pasang alat untuk mengunduh file serta memvalidasi koneksi HTTPS:
sudo apt updatesudo apt install -y curl ca-certificates -
Unduh arsip binary dan manifest checksum ke
/tmp:cd /tmpcurl -fsSLO https://github.com/caddyserver/caddy/releases/download/v2.11.7/caddy_2.11.7_linux_amd64.tar.gzcurl -fsSLO https://github.com/caddyserver/caddy/releases/download/v2.11.7/caddy_2.11.7_checksums.txtOpsi
-fmembuatcurlgagal pada error HTTP dan-Smenampilkan pesan error. Opsi-Lmengikuti pengalihan unduhan kerelease-assets.githubusercontent.com;-Omenyimpan file memakai nama dari URL. Kedua file tersimpan di direktori kerja/tmp. -
Cocokkan checksum arsip dengan baris terkait dalam manifest:
grep 'caddy_2.11.7_linux_amd64.tar.gz$' caddy_2.11.7_checksums.txt | sha512sum -c -Manifest berisi digest SHA-512.
grepmemilih satu baris untuk arsip Linux amd64, lalusha512sum -c -membandingkan digest pada baris itu dengan file yang diunduh di direktori saat ini. Hasil yang diharapkan:caddy_2.11.7_linux_amd64.tar.gz: OKJika checksum tidak cocok, unduhan belum lengkap atau berubah. Unduh ulang kedua file dan ulangi pemeriksaan sebelum melanjutkan.
-
Ekstrak binary, lalu pasang ke direktori pada
PATH:tar -xzf caddy_2.11.7_linux_amd64.tar.gz caddyArsip juga memuat
LICENSEdanREADME.md; argumencaddypada perintahtarhanya mengekstrak binary tersebut.BerbahayaPerintah
installberikut mengganti file/usr/local/bin/caddyjika sudah ada. Simpan binary yang perlu dipertahankan di lokasi lain sebelum menjalankan perintah ini agar dapat dipulihkan.sudo install -m 0755 caddy /usr/local/bin/caddyKarena dijalankan dengan
sudo, binary dipasang dengan ownerroot:rootdan mode0755.
Siapkan User dan Direktoriโ
-
Buat group dan user sistem untuk service:
sudo groupadd --system caddysudo useradd --system --gid caddy --create-home --home-dir /var/lib/caddy --shell /usr/sbin/nologin --comment "Caddy web server" caddyService berjalan sebagai user non-root
caddy. Home directory/var/lib/caddymenjadi lokasi data Caddy, sedangkan shell/usr/sbin/nologinmencegah login interaktif menggunakan akun service. -
Buat direktori konfigurasi:
sudo mkdir -p /etc/caddy
Pasang Unit systemd dan Caddyfile Awalโ
-
Tulis unit systemd ke
/etc/systemd/system/caddy.service:BerbahayaHeredoc ini mengganti unit di
/etc/systemd/system/caddy.servicejika file tersebut sudah ada. Simpan salinan unit yang perlu dipertahankan di lokasi lain agar dapat dipulihkan.sudo tee /etc/systemd/system/caddy.service > /dev/null <<'EOF'[Unit]Description=CaddyDocumentation=https://caddyserver.com/docs/After=network.target network-online.targetRequires=network-online.target[Service]Type=notifyUser=caddyGroup=caddyExecStart=/usr/local/bin/caddy run --environ --config /etc/caddy/CaddyfileExecReload=/usr/local/bin/caddy reload --config /etc/caddy/Caddyfile --forceTimeoutStopSec=5sLimitNOFILE=1048576PrivateTmp=trueProtectSystem=fullAmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE[Install]WantedBy=multi-user.targetEOFType=notifymembuat systemd menunggu notifikasi kesiapan dari Caddy.CAP_NET_BIND_SERVICEmemungkinkan service non-root mengikat port istimewa di bawah 1024, termasuk80dan443.CAP_NET_ADMINtetap dipertahankan seperti pada unit upstream. Saat Anda menjalankansystemctl reload caddy, systemd memanggil perintah padaExecReload. -
Buat Caddyfile awal agar service memiliki konfigurasi saat pertama kali dijalankan:
BerbahayaHeredoc ini mengganti
/etc/caddy/Caddyfilejika file tersebut sudah ada. Simpan salinan konfigurasi yang perlu dipertahankan di lokasi lain agar dapat dipulihkan.sudo tee /etc/caddy/Caddyfile > /dev/null <<'EOF':80 {respond "Caddy berjalan di Ubuntu 26.04" 200}EOFBlock ini menjawab request pada port
80dengan status HTTP200. Caddyfile minimal ini hanya dipakai untuk memulai service dan akan diganti dengan konfigurasi situs pada bagian## Konfigurasi Dasar. -
Muat unit baru, lalu aktifkan dan jalankan service:
sudo systemctl daemon-reloadsudo systemctl enable --now caddy
Verifikasi Instalasiโ
-
Pastikan shell menemukan binary pada path instalasi:
command -v caddy/usr/local/bin/caddy -
Periksa versi binary. Hash build dapat berbeda antar build:
caddy versionv2.11.7 h1:<build-hash> -
Pastikan service diaktifkan saat boot dan sedang berjalan:
systemctl is-enabled caddysystemctl is-active caddyenabledactive -
Validasi Caddyfile awal:
sudo caddy validate --config /etc/caddy/CaddyfileValid configuration -
Secara opsional, pastikan service menjawab request lokal pada port
80:curl -sI http://127.0.0.1/Periksa status
HTTP/1.1 200 OKdan headerServer: Caddy. Jika service berstatusfailedatau tidak menjawab, baca log dengansudo journalctl -u caddy --no-pager -n 50sebelum melanjutkan.
Konfigurasi Dasarโ
Menyiapkan Situs Statisโ
-
Buat direktori dokumen dan halaman
index.html:sudo mkdir -p /var/www/tutorialBerbahayaPerintah berikut mengganti isi
/var/www/tutorial/index.htmljika file itu sudah ada. Simpan salinan file yang perlu dipertahankan di lokasi lain sebelum melanjutkan, lalu pulihkan salinan tersebut jika ingin membatalkan perubahan.sudo tee /var/www/tutorial/index.html > /dev/null <<'EOF'<!doctype html><html lang="en"><head><meta charset="utf-8"><title>Caddy di Ubuntu 26.04</title></head><body><h1>Caddy berjalan di Ubuntu 26.04</h1></body></html>EOF -
Buka
/etc/caddy/Caddyfiledengan text editor yang sudah terpasang. Contoh berikut memakainanoatauvim:sudo nano /etc/caddy/Caddyfileatau:
sudo vim /etc/caddy/Caddyfile -
Ganti seluruh isinya dengan site block berikut. Perubahan ini menghapus site block lain yang ada di file.
BerbahayaJika Caddyfile sudah berisi konfigurasi lain yang perlu dipertahankan, simpan salinannya di lokasi lain sebelum mengganti isi file.
:80 {root * /var/www/tutorialfile_server}:80adalah site address. Caddy menerima request HTTP pada port80untuk semua hostname.root * /var/www/tutorialmenetapkan direktori dokumen untuk semua request.file_servermengaktifkan penyajian file statis. Fileindex.htmlmenjadi halaman default.
-
Rapikan format dan validasi konfigurasi sebelum reload:
BerbahayaOpsi
--overwritemenulis ulang/etc/caddy/Caddyfiledengan format hasil formatter. Simpan salinan konfigurasi jika Anda perlu mengembalikan format sebelumnya.sudo caddy fmt --overwrite /etc/caddy/Caddyfilesudo caddy validate --config /etc/caddy/CaddyfileValid configuration -
Muat ulang konfigurasi:
sudo systemctl reload caddyReload memakai
ExecReloadpada unit dan tidak memutus koneksi yang sedang diproses.
Mengaktifkan HTTPS Otomatis untuk Domainโ
Site block port 80 di atas hanya melayani HTTP. Ganti site address :80 dengan domain Anda, seperti pada contoh berikut:
tutorial.example.com {
root * /var/www/tutorial
file_server
}
Caddy meminta sertifikat melalui ACME saat diperlukan dan memperbaruinya otomatis. A record domain harus mengarah ke IP server, sedangkan port 80 dan 443 harus dapat dijangkau dari internet. Untuk localhost atau alamat tanpa domain publik, Caddy memakai certificate authority internal. Client perlu mempercayai sertifikat tersebut sebelum koneksi HTTPS dianggap tepercaya.
Memperbarui Caddyโ
Untuk memperbarui instalasi binary, unduh arsip versi baru dan manifest checksum ke /tmp. Ganti setiap <versi-baru> dengan nomor rilis yang ingin dipasang sebelum menjalankan perintah. Kedua URL mengikuti nama asset rilis Linux amd64:
cd /tmp
curl -fsSLO "https://github.com/caddyserver/caddy/releases/download/v<versi-baru>/caddy_<versi-baru>_linux_amd64.tar.gz"
curl -fsSLO "https://github.com/caddyserver/caddy/releases/download/v<versi-baru>/caddy_<versi-baru>_checksums.txt"
grep 'caddy_<versi-baru>_linux_amd64.tar.gz$' caddy_<versi-baru>_checksums.txt | sha512sum -c -
tar -xzf caddy_<versi-baru>_linux_amd64.tar.gz caddy
Pastikan pemeriksaan checksum menampilkan OK sebelum memasang binary.
Perintah install berikut mengganti binary di /usr/local/bin/caddy. Simpan binary lama di lokasi lain sebelum melanjutkan jika Anda perlu mengembalikannya.
sudo install -m 0755 caddy /usr/local/bin/caddy
sudo systemctl restart caddy
caddy version
Service yang sedang berjalan tetap memakai binary lama sampai prosesnya dimulai ulang. Reload hanya memuat ulang konfigurasi pada proses lama, jadi restart melalui systemd diperlukan agar service memakai binary baru.
Pengujian Fungsionalโ
-
Periksa response HTTP dari server:
curl -sI http://127.0.0.1/Pastikan status dan server sesuai:
HTTP/1.1 200 OKServer: Caddy -
Periksa beberapa baris pertama halaman yang dikirim:
curl -s http://127.0.0.1/ | head -n 5<!doctype html><html lang="en"><head><meta charset="utf-8"><title>Caddy di Ubuntu 26.04</title> -
Minta path yang tidak tersedia untuk memastikan server mengembalikan
404:curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1/halaman-tidak-ada404 -
Untuk akses dari jaringan lain, gunakan alamat IP server dan pastikan firewall tidak menutup port Caddy. Jika UFW sudah terpasang dan aktif, izinkan HTTP dan HTTPS:
sudo ufw allow 80/tcpsudo ufw allow 443/tcp
Troubleshootingโ
Port sudah digunakanโ
Jika service gagal start dan log menyebut address already in use untuk port 80 atau 443, layanan lain sedang memakai port tersebut.
-
Cari proses yang membuka port
80:sudo ss -tlnp | grep ':80'Periksa nama proses pada output. Pindahkan layanan lain ke port berbeda atau hentikan melalui prosedur operasional server Anda sebelum menjalankan Caddy.
-
Baca log untuk memastikan port yang gagal diikat:
sudo journalctl -u caddy --no-pager -n 50
Caddyfile ditolak atau memuat unrecognized directiveโ
Jika validasi atau reload gagal setelah Caddyfile diedit, periksa nama directive, kurung kurawal, dan nomor baris yang dilaporkan.
-
Validasi file untuk melihat detail kesalahan:
sudo caddy validate --config /etc/caddy/Caddyfile -
Rapikan indentasi lalu validasi kembali:
BerbahayaOpsi
--overwritemenulis ulang/etc/caddy/Caddyfiledengan format hasil formatter. Simpan salinan konfigurasi jika Anda perlu mengembalikan format sebelumnya.sudo caddy fmt --overwrite /etc/caddy/Caddyfilesudo caddy validate --config /etc/caddy/CaddyfilePastikan directive yang digunakan sesuai dengan konfigurasi Caddy sebelum melakukan reload.
Checksum binary tidak cocokโ
Jika sha512sum -c - menampilkan caddy_2.11.7_linux_amd64.tar.gz: FAILED, file unduhan tidak lengkap.
-
Hapus kedua file, unduh ulang, lalu ulangi verifikasi:
BerbahayaPerintah
rmdi bawah menghapus arsip dan manifest checksum dari/tmp. Keduanya dapat diunduh kembali dengan langkah unduhan pada bagian instalasi.rm -f /tmp/caddy_2.11.7_linux_amd64.tar.gz /tmp/caddy_2.11.7_checksums.txtJalankan kembali perintah
curluntuk dua URL rilis, lalu pastikansha512sum -c -menghasilkanOKsebelum mengekstrak arsip.
Situs tidak bisa dibuka dari internetโ
Jika request lokal berhasil tetapi browser dari luar gagal atau mengalami time-out, periksa firewall host, security group cloud, dan DNS.
-
Cek status UFW:
sudo ufw statusJika statusnya
inactive, UFW tidak memblokir request. Jikaactive, izinkan port yang digunakan:sudo ufw allow 80/tcpsudo ufw allow 443/tcp -
Pastikan port
80dan443juga terbuka pada firewall penyedia cloud. Untuk domain, periksa bahwa A record mengarah ke IP publik server.
Sertifikat HTTPS tidak terbit untuk domainโ
Periksa A record, keterjangkauan port 80 dari internet untuk ACME challenge, dan pesan pada log service. Permintaan sertifikat juga dapat terkena rate limit penyedia sertifikat.
sudo journalctl -u caddy --no-pager -n 50
Untuk localhost atau alamat tanpa domain publik, Caddy memakai certificate authority internal, bukan sertifikat yang dipercaya otomatis oleh semua client.
Verifikasiโ
- Jalankan
caddy versiondan pastikan hasilnya menunjukkan versi binary rilis GitHub yang dipasang, yaituv2.11.7diikuti hash build. - Jalankan
systemctl is-active caddy; hasilnya harusactive. Periksasudo journalctl -u caddy --no-pager -n 50untuk memastikan tidak ada error service. - Jalankan
curl -sI http://127.0.0.1/; response yang diharapkan berisiHTTP/1.1 200 OKdanServer: Caddy. - Jalankan
sudo caddy validate --config /etc/caddy/Caddyfilesebelum setiap reload; hasil yang diharapkanValid configuration. - Jika UFW aktif, jalankan
sudo ufw statusdan pastikan aturan untuk80/tcpdan443/tcpberstatusALLOW. - Uji dari komputer lain dengan
curl -sI http://<IP-server>/. Status200 OKmenunjukkan server dapat dijangkau. Jika Anda belum memiliki server, langkah ini dapat dijalankan pada Cloud VPS nusa.id.
