Kuidas ma ehitasin oma Markdowni märkmetele reaalajas varunduse ilma pilveteenust kasutamata
Üks eesmärk, mis mul juba mõnda aega meeles mõlkus, oli luua oma Markdowni märkmetele reaalajas varundus. Minu märkmed sisaldavad aastate jooksul kogunenud võrgulahenduste juhendeid, konfiguratsiooninäiteid, käsureamemosid ja muud infot, mida kasutan peaaegu iga päev. Sellise teadmistebaasi kaotamine tähendaks tundide töö kadumist.
Viimase paari aasta jooksul on minu töövoog muutunud üsna tugevalt Markdowni keskseks.
Tööl kasutan dokumenteerimiseks Obsidiani, kodus aga VimWikit. Mõlemad kasutavad tavalisi .md faile, mis tähendab, et ma ei ole seotud ühegi konkreetse rakendusega. Minu märkmetes on võrgulahenduste juhendid, käsuread, konfiguratsiooninäited, memod ning kõik muu, mida igapäevatöös regulaarselt vaja läheb.
Probleem tekkis siis, kui neid märkmeid hakkas tekkima mitmesse arvutisse. Kokku kasutan kolme erinevat masinat ning soovisin, et kõik märkmed oleksid alati sünkroonis. Samal ajal tahtsin, et iga muudatus jõuaks automaatselt ka minu koduserverisse, kus neist oleks pidevalt olemas ajakohane koopia.
Ma ei tahtnud kasutada Google Drive'i, OneDrive'i ega Dropboxi. Mul on kodus olemas Proxmoxi node ja failiserver, seega tundus loomulik, et kogu see info võiks jääda minu enda infrastruktuuri.
Olin Syncthingust juba ammu kuulnud. Mulle meeldib selle filosoofia - see ei ürita olla järgmine pilveteenus või failihaldusplatvorm, vaid keskendub ühele ülesandele: failide turvalisele sünkroniseerimisele. Just sellised tööriistad meeldivad mulle kõige rohkem - üks eesmärk ja hästi teostatud lahendus.
Kõige rohkem meeldib mulle aga see, et Syncthing ei pea olema ainult sünkroniseerimistööriist. Seda saab kasutada ka reaalajas varunduslahendusena. Kui üks seade peaks rivist välja minema, on failid juba olemas koduserveris.
Lisaks toetab Syncthing ka Untrusted Device funktsionaalsust, mis võimaldab kasutada mõnda teist arvutit või serverit ainult krüpteeritud varukoopiate hoidmiseks. Näiteks võiks tulevikus seadistada Syncthingi nii, et minu vanemate juures asuv arvuti toimiks offsite varukoopiana. Sellisel juhul ei näeks see arvuti minu failide sisu - sinna salvestatakse ainult krüpteeritud andmed, mille dekrüpteerimiseks vajalikud võtmed jäävad minu seadmetesse. See on kindlasti üks funktsionaalsus, mida plaanin tulevikus katsetada.
Minu infrastruktuur
Syncthing töötab mul eraldi Debiani põhises LXC konteineris Proxmoxi hostis.
Sama hosti külge on USB 3.0 kaudu ühendatud kaks NVMe ketast. Ühest 1 TB kettast tegin ZFS pooli ning sinna lõin eraldi dataseti, kuhu salvestatakse kõik sünkroniseeritud Markdowni märkmed.
Selline lahendus annab mulle mitu eelist:
- andmed asuvad täielikult minu enda serveris;
- ZFS kontrollib failide terviklikkust;
- vajadusel saan kasutada ZFS snapshotte;
- salvestusruumi on lihtne tulevikus laiendada.
LXC konteineri seadistamine
Syncthingi jaoks lõin uue Debian Trixie LXC konteineri.
Konteineris:
- lõin eraldi kasutaja;
- lisasin talle sudo õigused;
- hoidsin süsteemi võimalikult minimaalsena, sest sinna tuleb jooksma ainult üks teenus.
Järgmisena oli vaja ZFS dataset konteinerisse nähtavaks teha.
Selleks muutsin Proxmoxi hostis dataseti õigused - sudo chown -R 101000:101000 /mnt/usbpool/syncdata käsuga ning lisasin LXC konfiguratsiooni bind mounti. Pärast konteineri taaskäivitamist kontrollisin, et kaust oleks konteineris loetav ja kirjutatav.
Kui see töötas, oli kõige olulisem osa infrastruktuurist valmis.

Docker Compose
Syncthing töötab mul Dockeri konteineris. Kasutasin LinuxServer.io ametlikku imaget.
services:
syncthing:
image: lscr.io/linuxserver/syncthing:latest
container_name: syncthing
hostname: syncthing
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Tallinn
volumes:
- /home/dmitri/syncthing/config:/config
- /mnt/syncthing:/syncthing-data
ports:
- 8384:8384
- 22000:22000/tcp
- 22000:22000/udp
- 21027:21027/udp
restart: unless-stoppedKogu paigaldus oli üllatavalt lihtne ning LinuxServer.io dokumentatsioon on selle jaoks väga hästi koostatud.
Ligipääs veebiliidesele
Et Syncthingi haldusliides oleks mugavalt ligipääsetav, lisasin oma reverse proxy kaudu sellele domeeni ning Let's Encrypt SSL sertifikaadi.
Nii saan veebiliidest turvaliselt kasutada
Laptop (Omarchy)
|
Syncthing
|
Sisevõrk
|
+-----------------------+
| Proxmox Host |
| |
| Debian LXC |
| └── Docker |-Sisevõrk-Syncthing-Desktop (Omarchy)
| └── Syncthing |
| |
| ZFS Dataset |
| /mnt/syncthing |
+-----------------------+
|
Netbird (Overlay VPN)
|
Syncthing
|
Laptop (Windows) Obsidian
UFW seadistamine Omarchy süsteemis
Üks asi, mille peale alguses ei tulnud, oli tulemüür.
Kasutan oma tööjaamades Omarchy Linuxit, kus on vaikimisi kasutusel UFW (Uncomplicated Firewall). Kuigi Syncthing suutis interneti kaudu teiste seadmetega ühenduse luua, ei saanud seadmed omavahel kasutada kõige otsemat ühendust enne, kui lisasin vajalikud tulemüürireeglid.
Lisada tuli järgmised erandid:
sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp
sudo ufw allow 21027/udpNeed avavad Syncthingi sünkroniseerimisprotokolli ning võimaldavad kasutada Local Discovery't juhul, kui see on seadistuses sisse lülitatud.
Pärast reeglite lisamist hakkasid seadmed omavahel suhtlema otse kohaliku võrgu kaudu.
Miks ma ei kasuta automaatset avastamist?
Vaikimisi pakub Syncthing mitmeid mugavaid funktsioone:
- Global Discovery
- Local Discovery
- NAT Traversal
- Relaying

Enamiku kasutajate jaoks on need väga head valikud ning soovitan need ka sisse jätta.
Mina otsustasin minna teist teed.
Lülitasin serveris kõik need funktsioonid välja ning määran ise iga seadme ühenduse lõpp-punkti.
Näiteks:
tcp://192.168.1.11:22000Kui mõni seade ühendub VPN-i kaudu, saab kasutada hoopis VPN-i IP-aadressi.
Selline lahendus tähendab, et Syncthing ei pea tegema discovery päringuid ega kasutama vaheservereid. Kõik ühendused liiguvad täpselt mööda seda marsruuti, mille olen ise määranud.
See annab mulle:
- täieliku kontrolli ühenduste üle;
- prognoositava võrguliikluse;
- vähem üleliigseid võrguühendusi.
See lähenemine ei ole tingimata parem kui vaikeseadistus, kuid sobib hästi minu kodulabori ja tööviisiga.
Failide versioonihaldus
Lisaks seadistasin Syncthingis iga sünkroniseeritava kausta jaoks Simple File Versioning.
Minu seadistuses hoitakse alles viis viimast versiooni igast failist.
See tähendab, et kui kirjutan kogemata mõne olulise märkme üle, kustutan faili või teen vea, saan selle kiiresti taastada ilma varukoopiatest midagi otsimata.
Markdowni märkmed muutuvad pidevalt ning selline kaitse annab palju kindlust juurde.

Tulemuseks
Praegu kasutavad kõik minu arvutid ühte ja sama Markdowni andmestikku.
Pole vahet, kas kirjutan uue võrgulahenduse juhendi töö juures Obsidianis või täiendan seda õhtul kodus VimWikis - muudatused jõuavad mõne sekundi jooksul kõikidesse seadmetesse.
Kõige olulisem on aga see, et:
- kõik andmed asuvad minu enda serveris;
- ma ei sõltu ühestki pilveteenusest;
- kogu lahendus põhineb avatud lähtekoodiga tarkvaral;
- süsteem on lihtne, kiire ja töökindel.
Kokkuvõte
Mulle meeldivad lahendused, mis teevad ühte asja ja teevad seda hästi. Syncthing on minu jaoks just selline tarkvara.
Kui sul on koduserver, NAS või Proxmoxi keskkond ning kasutad Markdowni märkmeid mitmes arvutis, siis soovitan Syncthingi kindlasti proovida. Seadistamine ei võta kaua aega, kuid tulemus muudab igapäevase töö oluliselt mugavamaks.
Vahel ei ole vaja keerulist pilveplatvormi või uut SaaS-teenust. Piisab ühest hästi läbimõeldud avatud lähtekoodiga rakendusest, mis lahendab konkreetse probleemi usaldusväärselt.