Herkos

Ο δικός σας διακομιστής Blossom

Τελευταία ενημέρωση: 27 Οκτωβρίου 2026

Το Herkos Drive κόβει κάθε αρχείο σε κρυπτογραφημένα μπλοκ και τα κρατά σε αρκετούς διακομιστές Blossom: τρία αντίγραφα, σε τουλάχιστον δύο είδη διακομιστών, και ένα σε δικό σας διακομιστή. Οι δημόσιοι διακομιστές κρατούν μπλοκ δωρεάν, αλλά δεν υπόσχονται τίποτα: μπορεί να τα σβήσουν, να γεμίσουν ή να κλείσουν.

Ένας δικός σας διακομιστής Blossom κρατά το αντίγραφό σας για όσο αποφασίσετε και δέχεται μπλοκ μόνο από το δικό σας Drive. Αυτή η σελίδα εξηγεί πώς να τον στήσετε σε τρία βήματα, συν ένα νυχτερινό αντίγραφο ασφαλείας. Ταιριάζει καλά με το δικό σας relay γραμματοκιβωτίου και χρειάζεται περίπου δεκαπέντε λεπτά αν έχετε ήδη διακομιστή.

Ποιον διακομιστή να χρησιμοποιήσετε

Το blossom-server του hzrd149, έκδοση 6.4.1 (6 Οκτωβρίου 2026, άδεια MIT). Το εκτελέσαμε στις 27 Οκτωβρίου 2026 με τη ρύθμιση που ακολουθεί και τον ίδιο τον κώδικα μεταφόρτωσης του Drive, και ελέγξαμε τι χρειάζεται το Drive, όχι τι διαφημίζει ο διακομιστής:

Τι κάνει το Drive Αποτέλεσμα
Μεταφορτώνει κρυπτογραφημένα μπλοκ των 8 MiB (application/octet-stream) Γίνονται δεκτά
Ρωτά πριν από τη μεταφόρτωση (BUD-06) Απαντά, και απορρίπτει οποιοδήποτε άλλο κλειδί
Ζητά από τον διακομιστή σας να αντιγράψει ένα μπλοκ από έναν δημόσιο (BUD-04) Αντιγράφεται
Διαβάζει ένα μπλοκ χωρίς ταυτοποίηση Σερβίρεται, byte προς byte
Διαγράφει ένα μπλοκ με το κλειδί που το μεταφόρτωσε Διαγράφεται: νέο αίτημα δίνει 404
Μεταφορτώσεις από οποιοδήποτε άλλο κλειδί Απορρίπτονται (401)

Τι χρειάζεστε

Βήμα 1: εκτελέστε τον διακομιστή

Φτιάξτε έναν φάκελο γι' αυτόν, για παράδειγμα /root/blossom, και αποθηκεύστε μέσα του αυτά τα δύο αρχεία. Το πρώτο είναι το 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: {}

Το δεύτερο είναι το config.yml. Βάλτε τον τομέα σας στο publicDomain και το κλειδί τόμου σας εκεί που γράφει 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

Τι λέει: μόνο το κλειδί τόμου σας μπορεί να μεταφορτώνει ή να ζητά αντίγραφα (requirePubkeyInRule), και ένα μπλοκ κρατιέται μέχρι να το διαγράψει το Drive. Ο διακομιστής χρειάζεται λήξη σε κάθε κανόνα· 100 years χωρίς ανάγνωση σημαίνει στην πράξη ποτέ, και το Drive διαβάζει έτσι κι αλλιώς τα μπλοκ του τακτικά. Η θύρα ακούει μόνο στο ίδιο το μηχάνημα (127.0.0.1): όλα περνούν από τον proxy. Εκκινήστε τον:

cd /root/blossom
docker compose up -d

Βήμα 2: βάλτε HTTPS μπροστά

Με το Caddy, ολόκληρη η ρύθμιση (/etc/caddy/Caddyfile) είναι:

blossom.example.com {
    reverse_proxy 127.0.0.1:3000
}

Αν το ίδιο Caddy εξυπηρετεί ήδη το relay σας, προσθέστε αυτό το μπλοκ κάτω από εκείνο. Επαναφορτώστε το Caddy (sudo systemctl reload caddy). Αν ανοίξετε το https://blossom.example.com σε ένα πρόγραμμα περιήγησης, θα πρέπει πλέον να απαντά, με 404: δεν υπάρχει αρχική σελίδα, εσκεμμένα.

Βήμα 3: ενημερώστε το Herkos Drive

  1. Στο Herkos Drive, ανοίξτε Ρυθμίσεις → Διακομιστές, προσθέστε το https://blossom.example.com και σημειώστε τον ως δικό σας.
  2. Το Drive τον ρωτά πριν από κάθε μεταφόρτωση. Από εκεί και πέρα, κάθε νέο αρχείο αποκτά αντίγραφο εκεί, και τα αρχεία που είχατε ήδη αποκτούν το δικό τους την επόμενη φορά που το Drive θα ελέγξει τα αντίγραφα.
  3. Κρατήστε τους άλλους διακομιστές στη λίστα. Ο δικός σας είναι ένα από τα τρία αντίγραφα, ποτέ το μοναδικό: αν πέσει, τα αρχεία σας βρίσκονται ακόμη στους άλλους, και το Drive σας ειδοποιεί μετά από μία εβδομάδα σιωπής.

Βήμα 4: αντίγραφο ασφαλείας κάθε νύχτα

Αν ο διακομιστής σας πεθάνει, το Drive το αντιλαμβάνεται και δίνει στα επηρεαζόμενα αρχεία αντίγραφα στους άλλους διακομιστές της λίστας σας. Όμως το αντίγραφο στον διακομιστή σας είναι το μόνο που δεν εξαρτάται από κανέναν άλλον, και ένα νυχτερινό αντίγραφο ασφαλείας σας επιτρέπει να το ξαναστήσετε χωρίς να αντιγράψετε ξανά τα πάντα μέσω διαδικτύου.

Ο διακομιστής κρατά τα πάντα μέσα στον τόμο Docker blossom_data (το όνομα ξεκινά με τον φάκελο όπου βρίσκονται τα αρχεία· ελέγξτε το με docker volume ls): τα μπλοκ, ένα αρχείο το καθένα, και μια μικρή βάση δεδομένων SQLite που λέει ποιος μεταφόρτωσε το καθένα. Τα μπλοκ δεν αλλάζουν ποτέ, αλλά η βάση δεδομένων δεν πρέπει να αντιγράφεται ενώ γράφεται. Γι' αυτό το σενάριο αντιγράφει τα πάντα με τον διακομιστή σε λειτουργία, τον σταματά για τα λίγα δευτερόλεπτα που χρειάζονται για να αντιγράψει ό,τι άλλαξε στο μεταξύ, τον ξεκινά ξανά και μόνο τότε μεταφορτώνει το αντίγραφο. Όσο είναι σταματημένος, το Drive απλώς ξαναδοκιμάζει λίγο αργότερα.

Το αντίγραφο φεύγει από τον διακομιστή με το restic, που το κρυπτογραφεί πριν φύγει. Χρησιμοποιήστε ένα μέρος σε διαφορετικό πάροχο από τον διακομιστή: έναν λογαριασμό SFTP (ένα storage box, έναν υπολογιστή στο σπίτι) ή έναν κάδο συμβατό με S3. Αν κρατάτε ήδη έτσι αντίγραφα ασφαλείας του relay σας, χρησιμοποιήστε το ίδιο μέρος με άλλον φάκελο.

  1. Εγκαταστήστε τα εργαλεία και δημιουργήστε το αποθετήριο. Κρατήστε τον κωδικό πρόσβασης και στον διαχειριστή κωδικών πρόσβασης: χωρίς αυτόν τα αντίγραφα δεν μπορούν να διαβαστούν, και αν υπάρχει μόνο στον διακομιστή, χάνεται μαζί με τον διακομιστή. Για SFTP, ο root χρειάζεται επίσης ένα κλειδί SSH που να δέχεται το μηχάνημα των αντιγράφων ασφαλείας (sudo ssh-keygen -t ed25519, και μετά προσθέστε εκεί το /root/.ssh/id_ed25519.pub).

    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. Αποθηκεύστε αυτό ως /usr/local/bin/backup-blossom και κάντε το εκτελέσιμο (sudo chmod 700 /usr/local/bin/backup-blossom). Αλλάξτε το BLOSSOM_DIR αν τα αρχεία σας δεν βρίσκονται στο /root/blossom. Κρατά τις τελευταίες 14 ημέρες, 8 εβδομάδες και 12 μήνες. Τα μπλοκ δεν αλλάζουν ποτέ, οπότε κάθε νύχτα προσθέτει μόνο ό,τι είναι καινούργιο.

    #!/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. Εκτελέστε το μία φορά χειροκίνητα (sudo /usr/local/bin/backup-blossom) και μετά προγραμματίστε το με sudo crontab -e. Η δεύτερη γραμμή διαβάζει ξανά το ένα δέκατο των αποθηκευμένων δεδομένων κάθε μήνα, κάθε φορά διαφορετικό δέκατο, για να αποδείξει ότι τα αντίγραφα ανοίγουν ακόμη. Ρίχνετε πού και πού μια ματιά στο /var/log/backup-blossom.log: μια γραμμή με Fatal σημαίνει ότι το αντίγραφο εκείνης της νύχτας απέτυχε. Αν το αντίγραφο ασφαλείας του 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
    

Για επαναφορά (νέος διακομιστής ή μετά από βλάβη δίσκου): στήστε ξανά τον διακομιστή (βήματα 1 και 2) και επαναλάβετε τα σημεία 1 και 2 αυτού του βήματος με το ίδιο αποθετήριο, αλλά γράψτε τον κωδικό πρόσβασης που φυλάξατε στο /root/.restic-blossom-password αντί να δημιουργήσετε νέο, και παραλείψτε το restic init. Έπειτα αντιγράψτε το πιο πρόσφατο αντίγραφο ασφαλείας στον τόμο του διακομιστή:

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 βρίσκει ξανά τα μπλοκ και αντιγράφει, από τους άλλους διακομιστές, ό,τι έφτασε μετά το τελευταίο αντίγραφο ασφαλείας. Δοκιμάσαμε όλη αυτή την αλυσίδα στις 27 Οκτωβρίου 2026: αντίγραφο ασφαλείας, διαγραφή διακομιστή, επαναφορά, κάθε μπλοκ διαβάστηκε ξανά με το δικό του hash και διαγράφηκε μετά με το κλειδί του Drive.

Μία φορά τον χρόνο, κάντε αυτή την επαναφορά σε ένα εφεδρικό μηχάνημα και ελέγξτε ότι ο διακομιστής απαντά με τα μπλοκ σας: είναι η μόνη δοκιμή που αποδεικνύει ολόκληρη την αλυσίδα, μαζί με τον κωδικό πρόσβασης.

Καλό να ξέρετε