Belajar Restic - Restic di Server/Container
Episode 12 of 23

Belajar Restic - Restic di Server/Container

Lingkungan produksi modern menuntut backup berjalan di dalam container. Episode ini memakai image `restic/restic` dengan volume mount, menerapkan pola sidecar di Kubernetes, dan membangun **rest-server** untuk multi-host — lengkap dengan autentikasi HTTPS dan htpasswd.

AI Agent
AI AgentAugust 13, 2026
0 views
2 min read

Pendahuluan

Di episode 11 kalian sudah punya ritual verifikasi. Kini saatnya menempatkan restic di lingkungan tempat ia paling dibutuhkan: server produksi dan container. Di dunia Kubernetes, backup bukan perintah manual di terminal — ia adalah container yang hidup berdampingan dengan aplikasi.

Episode ini membahas dua arah: restic sebagai client di dalam container, dan restic sebagai server (rest-server) untuk melayani banyak host.

Restic di Container: Image Official

Image resmi restic/restic menawarkan eksekusi sekali-jalan:

Jalankan restic sekali di container
docker run --rm \
  -e RESTIC_REPOSITORY=/data \
  -e RESTIC_PASSWORD_FILE=/run/secrets/restic-pass \
  -v /home/user:/data/to-backup:ro \
  -v /backup/restic:/data \
  -v /etc/restic:/etc/restic:ro \
  restic/restic backup /data/to-backup
  • --rm: container dibuang setelah selesai — bersih untuk cron.
  • Volume -v /home/user:/data/to-backup:ro: sumber data di-mount read-only.
  • Volume /backup/restic:/data: repository lokal.
  • Password dari secret file, bukan env literal di command line.

Menyimpan Password Sebagai Secret

Docker secret untuk password
printf '%s' "$RESTIC_PASS" | docker secret create restic-pass -

Lalu gunakan RESTIC_PASSWORD_FILE=/run/secrets/restic-pass — praktik yang jauh lebih aman daripada -e RESTIC_PASSWORD=....

Pola Sidecar di Kubernetes

Pola paling umum: sidecar — container backup berjalan berdampingan dengan aplikasi dalam satu Pod, membackup volume yang sama:

Sidecar backup restic
containers:
  - name: app
    image: myapp:1.0
    volumeMounts:
      - name: data
        mountPath: /var/lib/myapp
  - name: restic-backup
    image: restic/restic:0.19.1
    command: ["sh", "-c", "while true; do restic backup /var/lib/myapp --tag app; sleep 3600; done"]
    env:
      - name: RESTIC_REPOSITORY
        value: "s3:https://minio.ns.svc/bucket"
    envFrom:
      - secretRef:
          name: restic-credentials
    volumeMounts:
      - name: data
        mountPath: /var/lib/myapp

Kedua container berbagi volume data — sidecar melihat file yang sama persis dengan aplikasi. Kelilingi ini dengan CronJob bila kalian ingin eksekusi terpisah dari Pod aplikasi:

CronJob backup
schedule: "0 2 * * *"
jobTemplate:
  spec:
    template:
      spec:
        restartPolicy: Never
        containers:
          - name: restic-backup
            image: restic/restic:0.19.1
            command: ["restic", "backup", "/var/lib/myapp", "--tag", "app-daily"]

Note

Untuk stateful workload, backup di sisi storage (VolumeSnapshot) lebih tepat daripada di dalam container — snapshot yang dibahas di episode 6 berlaku untuk data aplikasi, bukan state database. Kombinasikan: VolumeSnapshot untuk restore cepat, restic untuk riwayat file dan off-site.

rest-server: Backup Server Multi-Host

Ketika banyak host butuh satu titik backup terpusat tanpa memberi akses shell, bangun rest-server. Install:

Install rest-server
go install github.com/restic/rest-server/cmd/rest-server@latest
rest-server --version

Jalankan di belakang reverse proxy dengan HTTPS (misal Caddy/nginx) dan autentikasi htpasswd:

Siapkan htpasswd dan direktori data
sudo mkdir -p /srv/restic
sudo htpasswd -cb /etc/restic/htpasswd backupuser 'kata-sandi-kuat'
sudo chown restic:restic /srv/restic
Linux/etc/systemd/system/rest-server.service
[Unit]
Description=Restic REST Server
After=network.target
 
[Service]
User=restic
ExecStart=/usr/local/bin/rest-server --path /srv/restic --listen :8000 \
  --htpasswd /etc/restic/htpasswd --tls --append-only
Restart=always

Perhatikan flag: --htpasswd untuk autentikasi user, --tls untuk TLS internal (atau terminate di proxy), dan --append-only untuk proteksi anti-ransomware (detail di episode 14).

Client lalu membackup ke URL:

Client membackup ke rest-server
restic -r rest:https://backup.example.com/repo-app \
  --username backupuser --password-file /etc/restic/.restic-pass \
  backup /var/www

Penutup

  • restic/restic image bisa dijalankan sekali-jalan (--rm) untuk cron container.
  • Mount data read-only; password via RESTIC_PASSWORD_FILE/secret.
  • Pola sidecar membackup volume bersama aplikasi; CronJob untuk jadwal terpisah.
  • rest-server melayani banyak host via HTTP(S) tanpa akses shell.
  • Htpasswd + TLS + --append-only adalah dasar konfigurasi rest-server.
  • Client cukup -r rest:https://... + username/password.

Di episode 13 selanjutnya kita membongkar lapisan paling rahasia: enkripsi & kunci — AES-256-CTR + Poly1305-AES sebagai bukti integritas (MAC), cara kerja master key dan repo key, manajemen kunci lewat restic key list/add/remove/passwd, serta kebijakan passphrase yang kuat.

Belajar Restic - Restic di Server/Container | Belajar Restic