Během jednoho víkendu jsem přestěhoval pět webů na Drupalu z pronajatého VPS na vlastní server. Domácí připojení přitom nemá veřejnou IPv4 adresu. Weby jsou dnes aktuální, zabezpečené a jejich provoz nestojí nic kromě elektřiny. Popisuji výchozí stav, rozhodnutí, postup a co jsem se naučil.
Výchozí stav
Pět webů na Drupalu 10 běželo na pronajatém virtuálním serveru s Debianem. Na stejném stroji běžel i poštovní server pro adresy info@ a DNS záznamy spravoval registrátor domén. Server fungoval, ale při inventuře jsem našel víc problémů, než by člověk čekal:
- jádro Drupalu bez kritické bezpečnostní opravy,
- moduly nahrané ručně mimo Composer, takže se neaktualizovaly,
- téma vzhledu ve verzi, která už nemá podporu,
- správce databáze a správce pošty veřejně dostupné na všech doménách,
- přihlášení na server heslem.
Cíle
- Provoz bez měsíčních poplatků.
- Plná kontrola nad serverem, daty a zálohami.
- Vyšší bezpečnost než před migrací.
- Žádná ztráta dat a funkční e-mailové adresy info@ na všech doménách.
Hlavní překážka: CGNAT
Můj poskytovatel internetu přiděluje jen privátní IPv4 adresu za takzvaným CGNAT. Z internetu se tedy na domácí síť přes IPv4 nedostanete a klasické přesměrování portů nefunguje. Veřejné je jen připojení přes IPv6, jenže to dodnes nemá velká část návštěvníků.
Řešením je Cloudflare v bezplatném tarifu. Návštěvníci se připojují ke Cloudflare přes IPv4 i IPv6 a Cloudflare pak požadavek předá mému serveru přes IPv6. Podrobně to popisuji v článku Domácí server za CGNAT: IPv6, Cloudflare a firewall MikroTik.
Architektura
Server běží doma na Proxmoxu jako lehký kontejner LXC s Debianem 13. Na internet ho připojuje router MikroTik, který na web pouští jen provoz z adres Cloudflare. DNS, šifrování a příchozí poštu řeší Cloudflare, odchozí poštu Gmail.

Web jde od návštěvníka přes Cloudflare a router až do kontejneru na Proxmoxu. Pošta pro info@ jde přes Cloudflare do Gmailu a formuláře webů odesílají přes Gmail SMTP.
Postup v deseti krocích
- Inventura starého serveru: weby, databáze, certifikáty, poštovní schránky, cron úlohy a servisní skripty.
- Příprava nového serveru: kontejner LXC, Apache s PHP-FPM, MariaDB.
- Přenos kódu, databází, nahraných souborů a certifikátů.
- Bezpečnostní aktualizace: jádro Drupalu, moduly pod Composer, nová verze tématu.
- Zabezpečení serveru: SSH jen klíčem, fail2ban, omezení administrace, bezpečnostní audit.
- Test všech webů přes soubor hosts, ještě před změnou DNS.
- DNS na Cloudflare: převod záznamů, dočasné vypnutí DNSSEC, změna nameserverů u registrátora.
- E-mail: přesměrování info@ do Gmailu a odesílání formulářů přes Gmail SMTP.
- Přepnutí webů na nový server a omezení firewallu jen na Cloudflare.
- DNSSEC znovu zapnutý s klíči od Cloudflare.
Výsledky
| Oblast | Před migrací | Po migraci |
|---|---|---|
| Měsíční náklady na hosting | pronájem VPS | 0 Kč (jen elektřina) |
| Jádro Drupalu | 10.6.15, bez kritické opravy | 10.6.20 |
| Téma Bootstrap5 | 3.x bez podpory | 4.0.8 |
| Moduly | část nahraná ručně | všechny pod Composerem |
| Přihlášení na server | heslem | jen SSH klíčem |
| Administrace databáze | veřejně na všech doménách | jen z domácí sítě |
| Přístup na server z internetu | přímo | jen přes Cloudflare |
| DNSSEC | ano | ano, s klíči Cloudflare |
Všech pět webů jsem přepnul během jednoho dopoledne. Data se neztratila a výpadek byl jen krátký, během přepínání DNS.
Co jsem se naučil
- Inventura se vyplatí. Nejvíc práce nebylo stěhování, ale problémy nalezené cestou. Bez inventury bych je přenesl i na nový server.
- DNSSEC se musí vypnout před změnou nameserverů. Jinak doména přestane fungovat všude, kde se podpisy ověřují.
- IPv6 obchází NAT. Zařízení s veřejnou IPv6 adresou je bez firewallu dostupné z celého internetu. Na routeru jsem takovou díru našel a opravil.
- Testovat před přepnutím. Soubor hosts umožní vyzkoušet nový server pod skutečnou doménou, aniž by to viděl kdokoli jiný.
- Snapshot před každým krokem. Kontejner v Proxmoxu jde vrátit do předchozího stavu během pár sekund.
Podrobněji v dalších článcích
- Webový server v Proxmox LXC: Apache, PHP-FPM, Drupal 10 a zabezpečení
- Domácí server za CGNAT: IPv6, Cloudflare a firewall MikroTik
- Domény .cz na Cloudflare: DNSSEC, KEYSET a e-mail zdarma
Potřebujete přestěhovat nebo zabezpečit váš web či server? Napište mi.