Herkos

Server Blossom Anda sendiri

Terakhir diperbarui: 27 Oktober 2026

Herkos Drive memotong setiap file menjadi blok-blok terenkripsi dan menyimpannya di beberapa server Blossom: tiga salinan, di sedikitnya dua jenis server, dan satu di server milik Anda. Server publik menyimpan blok secara gratis, tetapi tidak menjanjikan apa pun: server itu dapat menghapusnya, menjadi penuh, atau tutup.

Server Blossom milik Anda sendiri menyimpan salinan Anda selama yang Anda tentukan dan hanya menerima blok dari Drive Anda. Halaman ini menjelaskan cara menyiapkannya dalam tiga langkah, ditambah pencadangan setiap malam. Server ini cocok dipasangkan dengan relay kotak surat Anda sendiri, dan prosesnya memakan waktu sekitar lima belas menit jika Anda sudah memiliki server.

Server mana yang digunakan

blossom-server buatan hzrd149, versi 6.4.1 (6 Oktober 2026, lisensi MIT). Kami menjalankannya pada 27 Oktober 2026 dengan konfigurasi di bawah dan kode unggah milik Drive sendiri, lalu memeriksa apa yang dibutuhkan Drive, bukan apa yang diiklankan server:

Yang dilakukan Drive Hasil
Mengunggah blok terenkripsi 8 MiB (application/octet-stream) Diterima
Bertanya sebelum mengunggah (BUD-06) Menjawab, dan menolak kunci lain mana pun
Meminta server Anda menyalin blok dari server publik (BUD-04) Disalin
Membaca blok tanpa mengidentifikasi diri Dilayani, byte demi byte
Menghapus blok dengan kunci yang mengunggahnya Dihapus: permintaan ulang menghasilkan 404
Unggahan dari kunci lain mana pun Ditolak (401)

Yang Anda butuhkan

Langkah 1: jalankan server

Buat folder untuknya, misalnya /root/blossom, dan simpan dua file berikut di dalamnya. Yang pertama adalah docker-compose.yml:

services:
  blossom:
    image: ghcr.io/hzrd149/blossom-server:6.4.1
    environment:
      BLOSSOM_REQUIRE_CONFIG: "1"
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - data:/app/data
      - ./config.yml:/app/config.yml:ro
    restart: unless-stopped
volumes:
  data: {}

Yang kedua adalah config.yml. Masukkan domain Anda di publicDomain dan kunci volume Anda di tempat yang bertuliskan YOUR-VOLUME-KEY:

port: 3000
host: 0.0.0.0
publicDomain: blossom.example.com
storage:
  backend: local
  local:
    dir: ./data/blobs
  rules:
    - type: "*"
      expiration: 100 years
      pubkeys:
        - "YOUR-VOLUME-KEY"
upload:
  requireAuth: true
  maxSize: 104857600
  requirePubkeyInRule: true
mirror:
  enabled: true
  requireAuth: true
delete:
  requireAuth: true
list:
  enabled: false
media:
  enabled: false
report:
  enabled: false
landing:
  enabled: false

Artinya: hanya kunci volume Anda yang boleh mengunggah atau meminta salinan (requirePubkeyInRule), dan blok disimpan sampai Drive menghapusnya. Server memerlukan masa kedaluwarsa di setiap aturan; 100 years tanpa dibaca pada praktiknya berarti tidak pernah, dan Drive memang membaca blok-bloknya secara rutin. Port hanya mendengarkan di mesin itu sendiri (127.0.0.1): semuanya lewat proxy. Jalankan server:

cd /root/blossom
docker compose up -d

Langkah 2: pasang HTTPS di depannya

Dengan Caddy, seluruh konfigurasinya (/etc/caddy/Caddyfile) adalah:

blossom.example.com {
    reverse_proxy 127.0.0.1:3000
}

Jika Caddy yang sama sudah melayani relay Anda, tambahkan blok ini di bawah blok relay. Muat ulang Caddy (sudo systemctl reload caddy). Membuka https://blossom.example.com di browser sekarang seharusnya mendapat jawaban, berupa 404: memang sengaja tidak ada halaman beranda.

Langkah 3: beri tahu Herkos Drive

  1. Di Herkos Drive, buka Setelan → Server, tambahkan https://blossom.example.com dan tandai sebagai milik Anda.
  2. Drive bertanya kepadanya sebelum setiap unggahan. Sejak saat itu, setiap file baru mendapat salinan di sana, dan file yang sudah Anda miliki mendapat salinannya pada kali berikutnya Drive memeriksa salinan.
  3. Tetap simpan server lain di daftar. Server Anda adalah salah satu dari tiga salinan, tidak pernah satu-satunya: jika server itu mati, file Anda masih ada di server lain, dan Drive memberi tahu Anda setelah seminggu tanpa kabar.

Langkah 4: cadangkan setiap malam

Jika server Anda mati, Drive mengetahuinya dan membuat salinan file yang terdampak di server lain dalam daftar Anda. Namun salinan di server Anda adalah satu-satunya yang tidak bergantung pada pihak lain, dan pencadangan setiap malam memungkinkan Anda membangunnya ulang tanpa menyalin semuanya lagi lewat internet.

Server menyimpan semuanya di dalam volume Docker blossom_data (namanya diawali dengan nama folder tempat file-file tadi berada; periksa dengan docker volume ls): blok-blok, masing-masing satu file, dan basis data SQLite kecil yang mencatat siapa yang mengunggah setiap blok. Blok tidak pernah berubah, tetapi basis data tidak boleh disalin saat sedang ditulisi. Jadi skrip menyalin semuanya saat server berjalan, menghentikannya selama beberapa detik yang dibutuhkan untuk menyalin apa yang berubah di antaranya, menjalankannya kembali, dan baru setelah itu mengunggah salinannya. Selama server berhenti, Drive cukup mencoba lagi sedikit lebih lambat.

Salinan dikirim keluar dari server dengan restic, yang mengenkripsinya sebelum keluar. Gunakan tempat di penyedia yang berbeda dari server: akun SFTP (storage box, komputer di rumah) atau bucket yang kompatibel dengan S3. Jika Anda sudah mencadangkan relay Anda dengan cara ini, gunakan tempat yang sama dengan folder lain.

  1. Instal alat-alatnya dan buat repositori. Simpan juga kata sandinya di pengelola kata sandi Anda: tanpanya salinan tidak dapat dibaca, dan jika kata sandi itu hanya ada di server, kata sandi itu ikut hilang bersama server. Untuk SFTP, root juga memerlukan kunci SSH yang diterima oleh mesin cadangan (sudo ssh-keygen -t ed25519, lalu tambahkan /root/.ssh/id_ed25519.pub di sana).

    sudo apt install restic rsync
    sudo sh -c 'openssl rand -base64 32 > /root/.restic-blossom-password'
    sudo sh -c 'cat > /root/.restic-blossom-env' <<'END'
    export RESTIC_REPOSITORY=sftp:backup@backup.example.com:/blossom
    export RESTIC_PASSWORD_FILE=/root/.restic-blossom-password
    END
    sudo chmod 600 /root/.restic-blossom-password /root/.restic-blossom-env
    sudo sh -c '. /root/.restic-blossom-env && restic init'
    
  2. Simpan ini sebagai /usr/local/bin/backup-blossom dan jadikan dapat dieksekusi (sudo chmod 700 /usr/local/bin/backup-blossom). Ubah BLOSSOM_DIR jika file Anda tidak berada di /root/blossom. Skrip ini menyimpan 14 hari, 8 minggu, dan 12 bulan terakhir. Blok tidak pernah berubah, jadi setiap malam hanya menambahkan yang baru.

    #!/bin/sh
    set -eu
    . /root/.restic-blossom-env
    BLOSSOM_DIR=/root/blossom
    COPY=/var/backups/blossom-data
    VOLUME=$(docker volume inspect --format '{{ .Mountpoint }}' blossom_data)
    mkdir -p "$COPY"
    rsync -a --delete "$VOLUME/" "$COPY/"
    cd "$BLOSSOM_DIR"
    docker compose stop blossom
    trap 'docker compose start blossom' EXIT
    rsync -a --delete "$VOLUME/" "$COPY/"
    docker compose start blossom
    trap - EXIT
    restic backup "$COPY" --tag blossom
    restic forget --tag blossom --keep-daily 14 --keep-weekly 8 --keep-monthly 12 --prune
    
  3. Jalankan sekali secara manual (sudo /usr/local/bin/backup-blossom), lalu jadwalkan dengan sudo crontab -e. Baris kedua membaca kembali sepersepuluh dari data yang tersimpan setiap bulan, sepersepuluh yang berbeda setiap kali, untuk membuktikan bahwa salinan masih dapat dibuka. Sesekali lihat /var/log/backup-blossom.log: baris yang berisi Fatal berarti salinan malam itu gagal. Jika relay dicadangkan di mesin yang sama, jadwal ini tidak bertabrakan dengan jadwal relay.

    35 4 * * * /usr/local/bin/backup-blossom >> /var/log/backup-blossom.log 2>&1
    55 5 2 * * . /root/.restic-blossom-env && restic check --read-data-subset=10% >> /var/log/backup-blossom.log 2>&1
    

Untuk memulihkan (server baru, atau setelah disk rusak): siapkan kembali server (langkah 1 dan 2) dan ulangi poin 1 dan 2 dari langkah ini dengan repositori yang sama, tetapi tulis kata sandi yang Anda simpan ke dalam /root/.restic-blossom-password alih-alih membuat yang baru, dan lewati restic init. Kemudian salin cadangan terbaru ke volume server:

sudo sh -c '. /root/.restic-blossom-env && restic restore latest --tag blossom --target /'
cd /root/blossom && sudo docker compose stop blossom
sudo rsync -a --delete /var/backups/blossom-data/ "$(sudo docker volume inspect --format '{{ .Mountpoint }}' blossom_data)/"
sudo docker compose start blossom

Pada kali berikutnya ia memeriksa salinan, Drive menemukan kembali blok-bloknya dan menyalin, dari server lain, apa pun yang tiba setelah cadangan terakhir. Kami mencoba seluruh rantai ini pada 27 Oktober 2026: pencadangan, server dihapus, pemulihan, setiap blok dibaca kembali dan dicocokkan dengan hash-nya sendiri, lalu dihapus dengan kunci Drive.

Setahun sekali, lakukan pemulihan ini di mesin cadangan dan periksa bahwa server menjawab dengan blok-blok Anda: itulah satu-satunya pengujian yang membuktikan seluruh rantai, termasuk kata sandinya.

Perlu diketahui