Lewati ke konten utama
๐Ÿš€ nusa.id cloud server linux indonesialihat paket

Cara Install Caddy di Ubuntu 26.04

ยท 11 menit membaca
Aidil Putra
Maintainer

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 sudo atau akses root.
  • Port 80 dan 443 tidak sedang dipakai layanan lain. Caddy memakai port tersebut untuk HTTP dan HTTPS.
  • Package curl dan ca-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.7 dari 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โ€‹

  1. Update indeks package dan pasang alat untuk mengunduh file serta memvalidasi koneksi HTTPS:

    sudo apt update
    sudo apt install -y curl ca-certificates
  2. Unduh arsip binary dan manifest checksum ke /tmp:

    cd /tmp
    curl -fsSLO https://github.com/caddyserver/caddy/releases/download/v2.11.7/caddy_2.11.7_linux_amd64.tar.gz
    curl -fsSLO https://github.com/caddyserver/caddy/releases/download/v2.11.7/caddy_2.11.7_checksums.txt

    Opsi -f membuat curl gagal pada error HTTP dan -S menampilkan pesan error. Opsi -L mengikuti pengalihan unduhan ke release-assets.githubusercontent.com; -O menyimpan file memakai nama dari URL. Kedua file tersimpan di direktori kerja /tmp.

  3. 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. grep memilih satu baris untuk arsip Linux amd64, lalu sha512sum -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: OK

    Jika checksum tidak cocok, unduhan belum lengkap atau berubah. Unduh ulang kedua file dan ulangi pemeriksaan sebelum melanjutkan.

  4. Ekstrak binary, lalu pasang ke direktori pada PATH:

    tar -xzf caddy_2.11.7_linux_amd64.tar.gz caddy

    Arsip juga memuat LICENSE dan README.md; argumen caddy pada perintah tar hanya mengekstrak binary tersebut.

    Berbahaya

    Perintah install berikut mengganti file /usr/local/bin/caddy jika 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/caddy

    Karena dijalankan dengan sudo, binary dipasang dengan owner root:root dan mode 0755.

Siapkan User dan Direktoriโ€‹

  1. Buat group dan user sistem untuk service:

    sudo groupadd --system caddy
    sudo useradd --system --gid caddy --create-home --home-dir /var/lib/caddy --shell /usr/sbin/nologin --comment "Caddy web server" caddy

    Service berjalan sebagai user non-root caddy. Home directory /var/lib/caddy menjadi lokasi data Caddy, sedangkan shell /usr/sbin/nologin mencegah login interaktif menggunakan akun service.

  2. Buat direktori konfigurasi:

    sudo mkdir -p /etc/caddy

Pasang Unit systemd dan Caddyfile Awalโ€‹

  1. Tulis unit systemd ke /etc/systemd/system/caddy.service:

    Berbahaya

    Heredoc ini mengganti unit di /etc/systemd/system/caddy.service jika 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=Caddy
    Documentation=https://caddyserver.com/docs/
    After=network.target network-online.target
    Requires=network-online.target

    [Service]
    Type=notify
    User=caddy
    Group=caddy
    ExecStart=/usr/local/bin/caddy run --environ --config /etc/caddy/Caddyfile
    ExecReload=/usr/local/bin/caddy reload --config /etc/caddy/Caddyfile --force
    TimeoutStopSec=5s
    LimitNOFILE=1048576
    PrivateTmp=true
    ProtectSystem=full
    AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE

    [Install]
    WantedBy=multi-user.target
    EOF

    Type=notify membuat systemd menunggu notifikasi kesiapan dari Caddy. CAP_NET_BIND_SERVICE memungkinkan service non-root mengikat port istimewa di bawah 1024, termasuk 80 dan 443. CAP_NET_ADMIN tetap dipertahankan seperti pada unit upstream. Saat Anda menjalankan systemctl reload caddy, systemd memanggil perintah pada ExecReload.

  2. Buat Caddyfile awal agar service memiliki konfigurasi saat pertama kali dijalankan:

    Berbahaya

    Heredoc ini mengganti /etc/caddy/Caddyfile jika 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
    }
    EOF

    Block ini menjawab request pada port 80 dengan status HTTP 200. Caddyfile minimal ini hanya dipakai untuk memulai service dan akan diganti dengan konfigurasi situs pada bagian ## Konfigurasi Dasar.

  3. Muat unit baru, lalu aktifkan dan jalankan service:

    sudo systemctl daemon-reload
    sudo systemctl enable --now caddy

Verifikasi Instalasiโ€‹

  1. Pastikan shell menemukan binary pada path instalasi:

    command -v caddy
    /usr/local/bin/caddy
  2. Periksa versi binary. Hash build dapat berbeda antar build:

    caddy version
    v2.11.7 h1:<build-hash>
  3. Pastikan service diaktifkan saat boot dan sedang berjalan:

    systemctl is-enabled caddy
    systemctl is-active caddy
    enabled
    active
  4. Validasi Caddyfile awal:

    sudo caddy validate --config /etc/caddy/Caddyfile
    Valid configuration
  5. Secara opsional, pastikan service menjawab request lokal pada port 80:

    curl -sI http://127.0.0.1/

    Periksa status HTTP/1.1 200 OK dan header Server: Caddy. Jika service berstatus failed atau tidak menjawab, baca log dengan sudo journalctl -u caddy --no-pager -n 50 sebelum melanjutkan.

Konfigurasi Dasarโ€‹

Menyiapkan Situs Statisโ€‹

  1. Buat direktori dokumen dan halaman index.html:

    sudo mkdir -p /var/www/tutorial
    Berbahaya

    Perintah berikut mengganti isi /var/www/tutorial/index.html jika 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
  2. Buka /etc/caddy/Caddyfile dengan text editor yang sudah terpasang. Contoh berikut memakai nano atau vim:

    sudo nano /etc/caddy/Caddyfile

    atau:

    sudo vim /etc/caddy/Caddyfile
  3. Ganti seluruh isinya dengan site block berikut. Perubahan ini menghapus site block lain yang ada di file.

    Berbahaya

    Jika Caddyfile sudah berisi konfigurasi lain yang perlu dipertahankan, simpan salinannya di lokasi lain sebelum mengganti isi file.

    :80 {
    root * /var/www/tutorial
    file_server
    }
    • :80 adalah site address. Caddy menerima request HTTP pada port 80 untuk semua hostname.
    • root * /var/www/tutorial menetapkan direktori dokumen untuk semua request.
    • file_server mengaktifkan penyajian file statis. File index.html menjadi halaman default.
  4. Rapikan format dan validasi konfigurasi sebelum reload:

    Berbahaya

    Opsi --overwrite menulis ulang /etc/caddy/Caddyfile dengan format hasil formatter. Simpan salinan konfigurasi jika Anda perlu mengembalikan format sebelumnya.

    sudo caddy fmt --overwrite /etc/caddy/Caddyfile
    sudo caddy validate --config /etc/caddy/Caddyfile
    Valid configuration
  5. Muat ulang konfigurasi:

    sudo systemctl reload caddy

    Reload memakai ExecReload pada 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.

Berbahaya

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โ€‹

  1. Periksa response HTTP dari server:

    curl -sI http://127.0.0.1/

    Pastikan status dan server sesuai:

    HTTP/1.1 200 OK
    Server: Caddy
  2. 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>
  3. 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-ada
    404
  4. 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/tcp
    sudo 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.

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

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

  1. Validasi file untuk melihat detail kesalahan:

    sudo caddy validate --config /etc/caddy/Caddyfile
  2. Rapikan indentasi lalu validasi kembali:

    Berbahaya

    Opsi --overwrite menulis ulang /etc/caddy/Caddyfile dengan format hasil formatter. Simpan salinan konfigurasi jika Anda perlu mengembalikan format sebelumnya.

    sudo caddy fmt --overwrite /etc/caddy/Caddyfile
    sudo caddy validate --config /etc/caddy/Caddyfile

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

  1. Hapus kedua file, unduh ulang, lalu ulangi verifikasi:

    Berbahaya

    Perintah rm di 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.txt

    Jalankan kembali perintah curl untuk dua URL rilis, lalu pastikan sha512sum -c - menghasilkan OK sebelum 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.

  1. Cek status UFW:

    sudo ufw status

    Jika statusnya inactive, UFW tidak memblokir request. Jika active, izinkan port yang digunakan:

    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
  2. Pastikan port 80 dan 443 juga 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โ€‹

  1. Jalankan caddy version dan pastikan hasilnya menunjukkan versi binary rilis GitHub yang dipasang, yaitu v2.11.7 diikuti hash build.
  2. Jalankan systemctl is-active caddy; hasilnya harus active. Periksa sudo journalctl -u caddy --no-pager -n 50 untuk memastikan tidak ada error service.
  3. Jalankan curl -sI http://127.0.0.1/; response yang diharapkan berisi HTTP/1.1 200 OK dan Server: Caddy.
  4. Jalankan sudo caddy validate --config /etc/caddy/Caddyfile sebelum setiap reload; hasil yang diharapkan Valid configuration.
  5. Jika UFW aktif, jalankan sudo ufw status dan pastikan aturan untuk 80/tcp dan 443/tcp berstatus ALLOW.
  6. Uji dari komputer lain dengan curl -sI http://<IP-server>/. Status 200 OK menunjukkan server dapat dijangkau. Jika Anda belum memiliki server, langkah ini dapat dijalankan pada Cloud VPS nusa.id.