Privátní cloud Nextcloud na domácím Proxmoxu místo Google Disku: zdarma, za CGNAT, se zálohami

Místo placeného úložiště u Googlu jsem si postavil vlastní cloud pro sebe a rodinu. Nextcloud běží na stejném domácím serveru s Proxmoxem jako moje weby, je dostupný z internetu i přes CGNAT a zálohuje se na NAS. Celé řešení je bez měsíčních poplatků a od první instalace po ověřenou obnovu ze zálohy zabralo jeden den.

Proč vlastní cloud

Bezplatné úložiště Google má 15 GB, které sdílí Gmail, Disk Google i Fotky Google. Na účtu, přes který odesílám poštu z webů, bylo obsazeno 13 GB: 6 GB fotky, 2 GB Disk a 5 GB pošta. Kdyby se úložiště zaplnilo, přestala by chodit i odchozí pošta z kontaktních formulářů. Místo placeného tarifu jsem chtěl data přesunout k sobě.

Požadavky byly jednoduché:

  • přístup z PC, mobilu i prohlížeče, doma i venku,
  • účty pro rodinu (do 10 lidí), zatím jednotky GB dat,
  • soubory, později kalendář a kontakty,
  • zálohy na domácí NAS,
  • žádné měsíční poplatky.

Server už doma běžel. Popsal jsem ho v sérii Migrace pěti webů z VPS na vlastní server. Proxmox měl volný celý druhý SSD disk, takže nový hardware nebyl potřeba.

Co jsem postavil

Schéma: Nextcloud v LXC kontejneru na Proxmoxu za CGNAT, přístup přes Cloudflare a IPv6, firewall MikroTik a zálohy na NAS TrueNAS.
ČástŘešení
AplikaceNextcloud 35 (soubory, sdílení, verze souborů, koš, 2FA)
Kde běžísamostatný LXC kontejner na Proxmoxu, Debian 13, 2 CPU, 4 GB RAM
Datavlastní disk 100 GB na druhém SSD, oddělený od systému i od webů
SoftwareApache, PHP-FPM 8.4, MariaDB 11.8, Redis a APCu
Přístup zvenkusubdoména přes Cloudflare proxy a IPv6, firewall MikroTik pouští jen Cloudflare
ZabezpečeníHTTPS (Let's Encrypt), dvoufázové ověření, hesla pro aplikace, SSH jen klíčem
KlientiNextcloud pro Windows (virtuální soubory) a Android
Zálohykontejnery na NAS TrueNAS přes NFS, NAS se zálohuje sám a jeho konfigurace se kopíruje na Proxmox

Klíčová rozhodnutí

Samostatný kontejner a samostatný datový disk

Cloud jsem nedal do kontejneru s weby. Případný problém nebo aktualizace jedné služby tak neovlivní druhou. Data uživatelů jsou na samostatném disku (mount point), který jde kdykoli zvětšit a zálohuje se spolu s kontejnerem.

Přístup přes Cloudflare, ne přes VPN

Doma mám IPv4 jen za CGNAT, takže port forwarding nejde. Stejně jako u webů jsem cloud zpřístupnil přes IPv6 a Cloudflare proxy. Pro rodinu je to nejjednodušší: obyčejná adresa https a žádná VPN na každém telefonu. Cloudflare má ve free tarifu limit 100 MB na jeden požadavek, ale Nextcloud velké soubory nahrává po částech, takže to nevadí.

Vlastní poštovní server ne

Zvažoval jsem i vlastní poštovní server, ale v mých podmínkách nedává smysl. Cloudflare nepropouští port 25. Na IPv4 jsem za CGNAT a pošta jen přes IPv6 by z části serverů nedorazila. Domácí adresa nemá reverzní záznam a dobrou pověst, takže by odchozí pošta končila ve spamu. Notifikace z Nextcloudu proto posílám přes Gmail SMTP, stejně jako weby. Postup je v článku Domény .cz na Cloudflare: DNSSEC a e-mail.

Bez šifrování na straně serveru

Šifrování souborů v Nextcloudu jsem záměrně nezapnul. Server stojí doma, šifrování by zpomalovalo a komplikovalo zálohy i obnovu. Citlivé údaje (hesla) mám v zašifrované databázi KeePass a Nextcloud ji jen přenáší.

NAS jako záloha, cloud pro aktivní soubory

NAS doma nezapínám nonstop. Aktivní soubory proto budou v Nextcloudu, NAS slouží pro zálohy, archiv a média. Zálohování jsem musel navrhnout tak, aby fungovalo i se strojem, který běží pár hodin měsíčně.

Jak projekt probíhal

Podrobnosti jsem rozepsal do pěti navazujících článků:

  1. Nextcloud 35 v LXC kontejneru na Proxmoxu: instalace, ladění PHP a databáze, klienti pro Windows a Android.
  2. Nextcloud za Cloudflare a CGNAT: důvěryhodné proxy, 2FA, hesla pro aplikace a zabezpečení kontejneru.
  3. Zálohy Proxmoxu na TrueNAS přes NFS: jedno tlačítko pro všechny kontejnery i konfiguraci hostitele a zkouška obnovy.
  4. Zálohování NASu, který běží jen občas: replikace po startu, scrub a klíče mimo NAS.
  5. KeePass přes vlastní Nextcloud: databáze hesel na PC i Androidu.

Co se nepovedlo napoprvé

  • Prohlížeč ukazoval zdrojový kód PHP místo přihlašovací stránky. Při instalaci se přeskočilo zapnutí konfigurace PHP-FPM v Apache.
  • Přihlášení mobilní aplikace přes prohlížeč se na telefonu nedokončilo. Spolehlivě fungovalo až přihlášení QR kódem.
  • Replikace na NASu neběžela přes rok. Chyběla úloha pro snapshoty a naplánované úlohy se nespouštěly, protože byl NAS v danou dobu vypnutý.
  • Reload SSH skončil chybou, protože v kontejneru byly zapnuté dva způsoby spouštění SSH současně.

Všechny tyto pasti a jejich řešení najdete v jednotlivých dílech.

Výsledek

Cloud je dostupný přes vlastní subdoménu z PC, mobilu i prohlížeče. Přihlášení chrání dvoufázové ověření a ochrana proti hádání hesel vidí skutečnou adresu návštěvníka, ne adresu Cloudflare. Zálohu kontejnerů spouštím jedním tlačítkem a obnovu jsem ověřil na kopii kontejneru. NAS si při každém zapnutí sám udělá snapshot a replikaci. Měsíční náklady jsou nulové a místo v Gmailu se uvolní přesunem Fotek a Disku Google do Nextcloudu.

Shrnutí

  • Nextcloud běží v samostatném LXC kontejneru s datovým diskem na druhém SSD.
  • Přístup za CGNAT zajišťuje IPv6 a Cloudflare proxy. Firewall pouští jen Cloudflare.
  • Účet chrání 2FA a hesla pro aplikace, server SSH jen klíčem a automatické bezpečnostní aktualizace.
  • Zálohy fungují i s NASem, který běží jen občas, a obnova je ověřená.
  • Provoz je bez měsíčních poplatků.

Na infrastrukturu, na které cloud stojí, navazuje série Migrace pěti webů z VPS na vlastní server a článek Domácí server za CGNAT přes IPv6 a Cloudflare.