Herkos

Kendi Blossom sunucunuz

Son güncelleme: 27 Ekim 2026

Herkos Drive her dosyayı şifreli bloklara böler ve bunları birkaç Blossom sunucusunda tutar: üç kopya, en az iki tür sunucuda ve biri size ait bir sunucuda. Herkese açık sunucular blokları ücretsiz tutar, ama hiçbir şey vaat etmez: blokları temizleyebilir, dolabilir ya da kapanabilirler.

Kendinize ait bir Blossom sunucusu kopyanızı sizin karar verdiğiniz süre boyunca saklar ve yalnızca sizin Drive'ınızdan blok kabul eder. Bu sayfa, birini üç adımda, artı her gece alınan bir yedekle nasıl kuracağınızı anlatır. Kendi posta kutusu aktarıcınızla iyi bir ikili oluşturur ve zaten bir sunucunuz varsa yaklaşık on beş dakika sürer.

Hangi sunucuyu kullanmalı

blossom-server (geliştiren: hzrd149), sürüm 6.4.1 (6 Ekim 2026, MIT lisansı). Aşağıdaki yapılandırma ve Drive'ın kendi yükleme koduyla 27 Ekim 2026'da çalıştırdık ve sunucunun reklamında ne dediğini değil, Drive'ın neye ihtiyaç duyduğunu denetledik:

Drive ne yapar Sonuç
8 MiB'lik şifreli bloklar yükler (application/octet-stream) Kabul edildi
Yüklemeden önce sorar (BUD-06) Yanıt verir ve diğer tüm anahtarları geri çevirir
Sunucunuzdan bir bloğu herkese açık bir sunucudan kopyalamasını ister (BUD-04) Kopyalandı
Bir bloğu kimliğini doğrulamadan okur Sunuldu, bayt bayt aynı
Bir bloğu, onu yükleyen anahtarla siler Silindi: yeniden istendiğinde 404 döner
Başka herhangi bir anahtardan yükleme Reddedildi (401)

Neye ihtiyacınız var

Adım 1: sunucuyu çalıştırın

Onun için bir klasör oluşturun, örneğin /root/blossom, ve bu iki dosyayı içine kaydedin. Birincisi 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: {}

İkincisi config.yml. Alan adınızı publicDomain alanına, birim anahtarınızı da YOUR-VOLUME-KEY yazan yere koyun:

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

Bunun anlamı şu: yalnızca birim anahtarınız yükleme yapabilir veya kopya isteyebilir (requirePubkeyInRule) ve bir blok, Drive onu silene kadar saklanır. Sunucu her kuralda bir sona erme süresi ister; okunmadan geçen 100 years pratikte hiçbir zaman demektir ve Drive zaten bloklarını düzenli olarak okur. Port yalnızca makinenin kendisinde dinler (127.0.0.1): her şey vekil sunucudan geçer. Başlatın:

cd /root/blossom
docker compose up -d

Adım 2: önüne HTTPS koyun

Caddy ile tüm yapılandırma (/etc/caddy/Caddyfile) şudur:

blossom.example.com {
    reverse_proxy 127.0.0.1:3000
}

Aynı Caddy zaten aktarıcınıza hizmet veriyorsa, bu bloğu onunkinin altına ekleyin. Caddy'yi yeniden yükleyin (sudo systemctl reload caddy). Artık bir tarayıcıda https://blossom.example.com açıldığında 404 ile yanıt vermelidir: bilerek bir ana sayfa yoktur.

Adım 3: Herkos Drive'a söyleyin

  1. Herkos Drive'da Ayarlar → Sunucular bölümünü açın, https://blossom.example.com adresini ekleyin ve onu senin sunucun olarak işaretleyin.
  2. Drive her yüklemeden önce ona sorar. O andan itibaren her yeni dosya orada bir kopya alır, zaten sahip olduğunuz dosyalar da kendi kopyalarını Drive kopyaları bir dahaki sefere denetlediğinde alır.
  3. Diğer sunucuları listede tutun. Sizinki üç kopyadan biridir, asla tek kopya değil: çökerse dosyalarınız hâlâ diğerlerinde durur ve Drive bir haftalık sessizlikten sonra size haber verir.

Adım 4: her gece yedekleyin

Sunucunuz ölürse Drive bunu fark eder ve etkilenen dosyalara listenizdeki diğer sunucularda kopyalar verir. Ama sunucunuzdaki kopya, başka hiç kimseye bağlı olmayan tek kopyadır ve gecelik bir yedek, her şeyi internet üzerinden yeniden kopyalamadan onu yeniden kurmanızı sağlar.

Sunucu her şeyi blossom_data Docker biriminin içinde tutar (ad, dosyaların bulunduğu klasörün adıyla başlar; docker volume ls ile denetleyin): her biri ayrı bir dosya olan blokları ve her bloğu kimin yüklediğini kaydeden küçük bir SQLite veritabanını. Bloklar asla değişmez, ama veritabanı yazılırken kopyalanmamalıdır. Bu yüzden betik her şeyi sunucu çalışırken kopyalar, aradaki değişiklikleri kopyalamanın sürdüğü birkaç saniye için sunucuyu durdurur, yeniden başlatır ve ancak ondan sonra kopyayı yükler. Durduğu sürece Drive biraz sonra yeniden dener, o kadar.

Kopya sunucudan restic ile çıkar; restic onu ayrılmadan önce şifreler. Sunucudan farklı bir sağlayıcıdaki bir yer kullanın: bir SFTP hesabı (bir depolama kutusu, evde bir bilgisayar) veya S3 uyumlu bir bucket. Aktarıcınızı zaten bu şekilde yedekliyorsanız, aynı yeri başka bir klasörle kullanın.

  1. Araçları kurun ve depoyu oluşturun. Parolayı parola yöneticinizde de saklayın: o olmadan kopyalar okunamaz ve yalnızca sunucuda yaşıyorsa sunucuyla birlikte ölür. SFTP için root kullanıcısının yedekleme makinesinin kabul ettiği bir SSH anahtarına da ihtiyacı vardır (sudo ssh-keygen -t ed25519, ardından /root/.ssh/id_ed25519.pub dosyasını oraya ekleyin).

    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. Bunu /usr/local/bin/backup-blossom olarak kaydedin ve çalıştırılabilir yapın (sudo chmod 700 /usr/local/bin/backup-blossom). Dosyalarınız /root/blossom içinde değilse BLOSSOM_DIR değerini değiştirin. Son 14 günü, 8 haftayı ve 12 ayı tutar. Bloklar asla değişmediği için her gece yalnızca yeni olanlar eklenir.

    #!/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. Bir kez elle çalıştırın (sudo /usr/local/bin/backup-blossom), ardından sudo crontab -e ile zamanlayın. İkinci satır her ay saklanan verinin onda birini, her seferinde farklı bir onda birini geri okuyarak kopyaların hâlâ açılabildiğini kanıtlar. Arada bir /var/log/backup-blossom.log dosyasına bakın: Fatal içeren bir satır, o gecenin kopyasının başarısız olduğu anlamına gelir. Aktarıcı da aynı makinede yedekleniyorsa, bu saatler onun saatleriyle çakışmaz.

    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
    

Geri yüklemek için (yeni bir sunucu ya da bir disk arızasından sonra): sunucuyu yeniden kurun (1. ve 2. adımlar) ve bu adımın 1. ve 2. maddelerini aynı depoyla tekrarlayın, ancak yeni bir parola oluşturmak yerine sakladığınız parolayı /root/.restic-blossom-password içine yazın ve restic init adımını atlayın. Ardından en son yedeği sunucunun birimine kopyalayın:

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

Drive, kopyaları bir dahaki sefere denetlediğinde blokları yeniden bulur ve son yedekten sonra gelenleri diğer sunuculardan kopyalar. Bu zincirin tamamını 27 Ekim 2026'da denedik: yedekleme, sunucunun silinmesi, geri yükleme, her bloğun kendi özetiyle (hash) geri okunması ve ardından Drive'ın anahtarıyla silinmesi.

Yılda bir kez bu geri yüklemeyi yedek bir makinede yapın ve sunucunun bloklarınızla yanıt verdiğini denetleyin: parola dâhil tüm zinciri kanıtlayan tek deneme budur.

Bilmekte yarar var