Herkos

Oma Blossom-palvelin

Viimeksi päivitetty: 27. lokakuuta 2026

Herkos Drive pilkkoo jokaisen tiedoston salatuiksi lohkoiksi ja säilyttää ne useilla Blossom-palvelimilla: kolme kopiota, vähintään kahdenlaisilla palvelimilla, ja yksi omalla palvelimellasi. Julkiset palvelimet säilyttävät lohkoja ilmaiseksi, mutta ne eivät lupaa mitään: ne voivat poistaa lohkot, täyttyä tai lopettaa.

Oma Blossom-palvelin säilyttää kopiosi niin kauan kuin itse päätät ja ottaa vastaan lohkoja vain omasta Drivestasi. Tämä sivu kertoo, miten sellainen pystytetään kolmessa vaiheessa, sekä öisestä varmuuskopiosta. Se sopii hyvin yhteen oman postilaatikkopalvelimesi kanssa, ja siihen menee noin vartti, jos sinulla on jo palvelin.

Mikä palvelin valita

blossom-server, tekijä hzrd149, versio 6.4.1 (6. lokakuuta 2026, MIT-lisenssi). Ajoimme sitä 27. lokakuuta 2026 alla olevalla määrityksellä ja Driven omalla lähetyskoodilla ja tarkistimme, mitä Drive tarvitsee, emme sitä, mitä palvelin mainostaa:

Mitä Drive tekee Tulos
Lähettää 8 MiB:n salattuja lohkoja (application/octet-stream) Hyväksytään
Kysyy ennen lähettämistä (BUD-06) Vastaa ja torjuu kaikki muut avaimet
Pyytää palvelintasi kopioimaan lohkon julkiselta palvelimelta (BUD-04) Kopioidaan
Lukee lohkon tunnistautumatta Toimitetaan, tavu tavulta
Poistaa lohkon avaimella, jolla se lähetettiin Poistetaan: uusi pyyntö antaa 404:n
Lähetykset muilla avaimilla Torjutaan (401)

Mitä tarvitset

Vaihe 1: käynnistä palvelin

Luo sille kansio, esimerkiksi /root/blossom, ja tallenna siihen nämä kaksi tiedostoa. Ensimmäinen on 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: {}

Toinen on config.yml. Kirjoita verkkotunnuksesi kohtaan publicDomain ja taltioavaimesi kohtaan, jossa lukee 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

Mitä se tarkoittaa: vain taltioavaimesi saa lähettää lohkoja tai pyytää kopioita (requirePubkeyInRule), ja lohko säilytetään, kunnes Drive poistaa sen. Palvelin vaatii jokaiseen sääntöön vanhenemisajan; 100 years ilman lukemista on käytännössä ei koskaan, ja Drive lukee lohkojaan joka tapauksessa säännöllisesti. Portti kuuntelee vain itse koneella (127.0.0.1): kaikki kulkee proxyn kautta. Käynnistä se:

cd /root/blossom
docker compose up -d

Vaihe 2: lisää HTTPS eteen

Caddylla koko määritys (/etc/caddy/Caddyfile) on:

blossom.example.com {
    reverse_proxy 127.0.0.1:3000
}

Jos sama Caddy palvelee jo välityspalvelintasi, lisää tämä määrityslohko sen lohkon alle. Lataa Caddyn määritys uudelleen (sudo systemctl reload caddy). Kun avaat https://blossom.example.com selaimessa, sen pitäisi nyt vastata 404:llä: etusivua ei ole, tarkoituksella.

Vaihe 3: kerro Herkos Drivelle

  1. Avaa Herkos Drivessa Asetukset → Palvelimet, lisää https://blossom.example.com ja merkitse se omaksi palvelimeksesi.
  2. Drive kysyy siltä ennen jokaista lähetystä. Siitä lähtien jokainen uusi tiedosto saa sinne kopion, ja jo olemassa olevat tiedostosi saavat omansa, kun Drive seuraavan kerran tarkistaa kopiot.
  3. Pidä muut palvelimet listalla. Omasi on yksi kolmesta kopiosta, ei koskaan ainoa: jos se on alhaalla, tiedostosi ovat yhä muilla, ja Drive kertoo siitä viikon hiljaisuuden jälkeen.

Vaihe 4: varmuuskopioi joka yö

Jos palvelimesi hajoaa, Drive huomaa sen ja antaa asianomaisille tiedostoille kopiot listasi muille palvelimille. Mutta palvelimesi kopio on ainoa, joka ei riipu kenestäkään muusta, ja öisen varmuuskopion avulla voit rakentaa sen uudelleen kopioimatta kaikkea uudestaan internetin yli.

Palvelin säilyttää kaiken Docker-taltiossa blossom_data (nimi alkaa sen kansion nimellä, jossa tiedostot ovat; tarkista se komennolla docker volume ls): lohkot, kukin omana tiedostonaan, ja pienen SQLite-tietokannan, joka kertoo, kuka lähetti minkäkin lohkon. Lohkot eivät koskaan muutu, mutta tietokantaa ei saa kopioida kesken kirjoituksen. Siksi skripti kopioi kaiken palvelimen ollessa käynnissä, pysäyttää sen niiksi muutamaksi sekunniksi, jotka välillä muuttuneen kopioiminen vie, käynnistää sen uudelleen ja vasta sitten lähettää kopion. Pysäytyksen aikana Drive yksinkertaisesti yrittää uudelleen hieman myöhemmin.

Kopio siirretään pois palvelimelta resticillä, joka salaa sen ennen lähtöä. Käytä paikkaa, joka on eri palveluntarjoajalla kuin palvelin: SFTP-tili (tallennuslaatikko, kotitietokone) tai S3-yhteensopiva bucket. Jos varmuuskopioit jo välityspalvelimesi tällä tavalla, käytä samaa paikkaa eri kansiossa.

  1. Asenna työkalut ja luo repositorio. Säilytä salasana myös salasanojen hallintasovelluksessasi: ilman sitä kopioita ei voi lukea, ja jos se on vain palvelimella, se kuolee palvelimen mukana. SFTP:tä varten root tarvitsee myös SSH-avaimen, jonka varmuuskopiokone hyväksyy (sudo ssh-keygen -t ed25519, ja lisää sitten /root/.ssh/id_ed25519.pub sinne).

    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. Tallenna tämä nimellä /usr/local/bin/backup-blossom ja tee siitä suoritettava (sudo chmod 700 /usr/local/bin/backup-blossom). Muuta BLOSSOM_DIR, jos tiedostosi eivät ole kansiossa /root/blossom. Se säilyttää viimeiset 14 päivää, 8 viikkoa ja 12 kuukautta. Lohkot eivät koskaan muutu, joten joka yö lisätään vain uudet.

    #!/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. Aja se kerran käsin (sudo /usr/local/bin/backup-blossom) ja ajasta se sitten komennolla sudo crontab -e. Toinen rivi lukee joka kuukausi takaisin kymmenesosan tallennetuista tiedoista, joka kerta eri kymmenesosan, todistaakseen, että kopiot voi yhä avata. Katso tiedostoa /var/log/backup-blossom.log silloin tällöin: rivi, jossa on Fatal, tarkoittaa, että sen yön kopio epäonnistui. Jos välityspalvelimen varmuuskopiointi ajetaan samalla koneella, nämä ajat eivät mene päällekkäin sen omien kanssa.

    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
    

Palauttaminen (uusi palvelin tai levyvian jälkeen): pystytä palvelin uudelleen (vaiheet 1 ja 2) ja toista tämän vaiheen kohdat 1 ja 2 samalla repositoriolla, mutta kirjoita tallentamasi salasana tiedostoon /root/.restic-blossom-password uuden luomisen sijaan ja ohita restic init. Kopioi sitten uusin varmuuskopio palvelimen taltioon:

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

Kun Drive seuraavan kerran tarkistaa kopiot, se löytää lohkot taas ja kopioi muilta palvelimilta kaiken, mikä saapui viimeisimmän varmuuskopion jälkeen. Kokeilimme koko tämän ketjun 27. lokakuuta 2026: varmuuskopio, palvelimen poisto, palautus, jokainen lohko luettu takaisin oman tiivisteensä mukaisena ja lopuksi poistettu Driven avaimella.

Tee tämä palautus kerran vuodessa varakoneella ja tarkista, että palvelin vastaa lohkoillasi: se on ainoa testi, joka todistaa koko ketjun toimivan, salasana mukaan lukien.

Hyvä tietää