Herkos

आपका अपना Blossom सर्वर

अंतिम अपडेट: 27 अक्टूबर 2026

Herkos Drive हर फ़ाइल को एन्क्रिप्ट किए गए ब्लॉक में काटता है और उन्हें कई Blossom सर्वर पर रखता है: तीन कॉपी, कम से कम दो तरह के सर्वर पर, और एक आपके अपने सर्वर पर। सार्वजनिक सर्वर ब्लॉक मुफ़्त में रखते हैं, लेकिन कोई वादा नहीं करते: वे उन्हें मिटा सकते हैं, भर सकते हैं या बंद हो सकते हैं।

आपका अपना Blossom सर्वर आपकी कॉपी तब तक रखता है जब तक आप तय करें, और सिर्फ़ आपके Drive से ब्लॉक लेता है। यह पेज बताता है कि तीन चरणों में एक सर्वर कैसे सेट करें, साथ में हर रात का बैकअप भी। यह आपके अपने मेलबॉक्स रिले के साथ अच्छा चलता है, और अगर आपके पास पहले से सर्वर है, तो इसमें लगभग पंद्रह मिनट लगते हैं।

कौन-सा सर्वर इस्तेमाल करें

hzrd149 का blossom-server, वर्शन 6.4.1 (6 अक्टूबर 2026, MIT लाइसेंस)। हमने 27 अक्टूबर 2026 को इसे नीचे दिए कॉन्फ़िगरेशन और Drive के अपने अपलोड कोड के साथ चलाकर देखा, और जांचा कि Drive को क्या चाहिए, न कि सर्वर क्या दावा करता है:

Drive क्या करता है नतीजा
8 MiB के एन्क्रिप्ट किए गए ब्लॉक अपलोड करता है (application/octet-stream) स्वीकार
अपलोड से पहले पूछता है (BUD-06) जवाब देता है, और किसी भी दूसरी कुंजी को लौटा देता है
आपके सर्वर से किसी सार्वजनिक सर्वर का ब्लॉक कॉपी करने को कहता है (BUD-04) कॉपी हो गया
बिना पहचान बताए ब्लॉक पढ़ता है बाइट-दर-बाइट वैसा ही मिला
जिस कुंजी से ब्लॉक अपलोड हुआ था, उसी से उसे मिटाता है मिट गया: दोबारा मांगने पर 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): सब कुछ प्रॉक्सी से होकर जाता है। इसे शुरू करें:

cd /root/blossom
docker compose up -d

चरण 2: आगे HTTPS लगाएं

Caddy के साथ पूरा कॉन्फ़िगरेशन (/etc/caddy/Caddyfile) यह है:

blossom.example.com {
    reverse_proxy 127.0.0.1:3000
}

अगर वही Caddy पहले से आपका रिले चला रहा है, तो यह ब्लॉक उसके ब्लॉक के नीचे जोड़ दें। 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 खाता (स्टोरेज बॉक्स, घर का कंप्यूटर) या S3-संगत बकेट। अगर आप पहले से अपने रिले का बैकअप इसी तरह लेते हैं, तो वही जगह किसी दूसरे फ़ोल्डर के साथ इस्तेमाल करें।

  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)। अगर आपकी फ़ाइलें /root/blossom में नहीं हैं, तो BLOSSOM_DIR बदलें। यह पिछले 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 वाली लाइन का मतलब है कि उस रात की कॉपी विफल रही। अगर रिले का बैकअप भी इसी मशीन पर लिया जाता है, तो ये समय उसके अपने समय से नहीं टकराते।

    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 को यह पूरी कड़ी आज़माई: बैकअप, सर्वर मिटाया, रीस्टोर, हर ब्लॉक उसके अपने हैश से जांचकर वापस पढ़ा गया, और बाद में Drive की कुंजी से मिटाया गया।

साल में एक बार, यह रीस्टोर किसी अतिरिक्त मशीन पर करें और जांचें कि सर्वर आपके ब्लॉक के साथ जवाब देता है: यही एकमात्र टेस्ट है जो पासवर्ड समेत पूरी कड़ी को साबित करता है।

जानने लायक बातें