Domowy serwer nie musi być drogą maszyną stojącą w szafie rackowej. Do nauki, hostowania własnych stron i uruchamiania niewielkich usług często wystarczy energooszczędny mini-PC albo nieużywany komputer. W tym poradniku zainstalujemy na nim Proxmox VE, utworzymy kontener z serwerem Nginx, a następnie udostępnimy stronę pod własną domeną za pośrednictwem Nginx Proxy Managera.

Trzeba jednak pamiętać, że domowy hosting nie zapewnia automatycznie niezawodności profesjonalnej serwerowni. Jego dostępność zależy między innymi od domowego łącza, zasilania i sprawności jednego fizycznego komputera. To znakomite środowisko do nauki i własnych projektów, ale przed uruchomieniem ważnej usługi warto zaplanować kopie zapasowe, monitoring i sposób odtworzenia systemu po awarii.

Czym jest Proxmox VE?

Proxmox Virtual Environment, w skrócie Proxmox VE, to platforma do wirtualizacji instalowana bezpośrednio na fizycznym komputerze. Zawiera system oparty na Debianie oraz panel webowy, z którego można zarządzać serwerem, siecią, pamięcią masową i dwoma rodzajami środowisk:

  • maszynami wirtualnymi KVM, które mają własne jądro systemu i zapewniają mocniejszą izolację,
  • kontenerami LXC, które współdzielą jądro hosta, dzięki czemu zużywają mniej zasobów, ale mogą uruchamiać wyłącznie systemy Linux.

W tym poradniku utworzymy lekki kontener LXC. Może on pełnić podobną funkcję jak kupiony u dostawcy VPS, lecz technicznie nie jest maszyną wirtualną. Rozróżnienie jest ważne, ponieważ w panelu Proxmoxa kontener tworzy się przyciskiem Create CT, natomiast pełną maszynę wirtualną - przyciskiem Create VM.

Na jednym hoście można uruchomić na przykład:

  • strony i aplikacje internetowe,
  • bazy danych,
  • serwer VPN,
  • prywatną chmurę plików,
  • serwer Git,
  • Home Assistanta,
  • narzędzia do monitoringu.

Liczba i rodzaj usług zależą przede wszystkim od zasobów komputera. Warto rozdzielać niezależne aplikacje między osobne kontenery lub maszyny wirtualne. Ułatwia to ich aktualizowanie, zabezpieczanie i odtwarzanie z kopii zapasowej.

Jaki komputer wybrać do domowego serwera?

Na początek nie potrzebujesz specjalistycznego sprzętu serwerowego. Dobrze sprawdzi się:

  • mini-PC z procesorem Intel lub AMD,
  • Intel NUC albo podobny komputer typu SFF,
  • komputer stacjonarny,
  • laptop, o ile może bezpiecznie pracować przez całą dobę i ma sprawny układ chłodzenia.

Najprostszym wyborem jest komputer x86-64 obsługujący Intel VT-x lub AMD-V. Przed instalacją sprawdź, czy w UEFI/BIOS-ie włączono wirtualizację. W domowym serwerze lepiej korzystać z przewodowego Ethernetu niż z Wi-Fi - połączenie jest zwykle stabilniejsze, a jego konfiguracja w Proxmoxie prostsza.

Poniższa tabela przedstawia rozsądne konfiguracje startowe dla środowiska opisanego w tym poradniku. Nie są to sztywne wymagania Proxmoxa: potrzebne zasoby zależą od liczby i rodzaju uruchamianych usług.

Element Konfiguracja startowa Wygodna konfiguracja domowa
Procesor 64-bitowy CPU z Intel VT-x lub AMD-V Energooszczędny CPU z co najmniej 4 rdzeniami
Pamięć RAM 8 GB 16 GB lub więcej
Dysk SSD 128 GB SSD 256 GB lub większy oraz osobny nośnik na kopie
Sieć Ethernet 1 Gb/s Ethernet 1 Gb/s lub szybszy

Przy pracy przez całą dobę istotny jest pobór energii. Roczne zużycie można oszacować według wzoru: moc w watach × 24 × 365 ÷ 1000. Komputer pobierający średnio 10 W zużyje około 88 kWh rocznie, a urządzenie pobierające 80 W - około 701 kWh. Przed wyborem starszego komputera warto więc zmierzyć jego rzeczywisty pobór watomierzem.

Znaczenie ma również stan dysku, możliwość automatycznego uruchomienia komputera po powrocie zasilania oraz dostęp do części zamiennych. Niewielki zasilacz UPS ochroni serwer przed krótkimi przerwami w dostawie prądu i pozwoli go poprawnie wyłączyć podczas dłuższej awarii.

Instalacja Proxmox VE

Proxmox VE najczęściej instaluje się bezpośrednio na dysku komputera. Nie trzeba wcześniej instalować Windowsa ani Ubuntu. Instalator wykorzysta wybrany dysk i usunie zapisane na nim dane, dlatego przed rozpoczęciem skopiuj wszystkie potrzebne pliki na inny nośnik.

Krok 1: pobranie obrazu ISO i przygotowanie pendrive’a

Pobierz aktualny obraz ISO z oficjalnej strony Proxmox VE. Następnie zapisz obraz na pendrivie za pomocą programu takiego jak Rufus. Samo skopiowanie pliku ISO na pamięć USB nie wystarczy - program musi utworzyć z niej nośnik startowy.

Przygotowanie pendrive'a z instalatorem Proxmox VE w programie Rufus.
Przygotowanie pendrive'a z instalatorem Proxmox VE w programie Rufus.

Krok 2: uruchomienie instalatora

Podłącz pendrive do komputera przeznaczonego na serwer i uruchom go z pamięci USB. W razie potrzeby zmień kolejność startową w UEFI/BIOS-ie albo skorzystaj z jednorazowego menu bootowania.

Instalator poprosi między innymi o:

  • wybór docelowego dysku,
  • kraj, strefę czasową i układ klawiatury,
  • hasło administratora i adres e-mail,
  • kartę sieciową,
  • nazwę hosta,
  • stały adres IP serwera, bramę i serwer DNS.

Nadaj hostowi adres spoza puli automatycznie przydzielanej przez DHCP albo zarezerwuj ten adres w routerze. Zapobiegnie to konfliktom adresów w sieci. Dane sieciowe zapisz również poza serwerem - przydadzą się, gdy panel przestanie być osiągalny.

Poniższe ilustracje pokazują kolejne etapy instalacji:

Wybór trybu instalatora Proxmox VE. Tryb graficzny i Terminal UI prowadzą przez ten sam proces; Terminal UI bywa pomocny przy problemach z grafiką.
Wybór trybu instalatora Proxmox VE. Tryb graficzny i Terminal UI prowadzą przez ten sam proces; Terminal UI bywa pomocny przy problemach z grafiką.
Akceptacja warunków licencji Proxmox VE.
Akceptacja warunków licencji Proxmox VE.
Wybór dysku, na którym zostanie zainstalowany Proxmox VE.
Wybór dysku, na którym zostanie zainstalowany Proxmox VE.
Ustawienia regionu, strefy czasowej i klawiatury.
Ustawienia regionu, strefy czasowej i klawiatury.
Ustawienie hasła użytkownika root i adresu e-mail administratora.
Ustawienie hasła użytkownika root i adresu e-mail administratora.
Konfiguracja sieciowa hosta Proxmox VE.
Konfiguracja sieciowa hosta Proxmox VE.

Krok 3: pierwsze uruchomienie panelu

Po zakończeniu instalacji komputer uruchomi się ponownie i wyświetli adres panelu administracyjnego, zwykle w postaci https://adres-IP:8006.

Ekran uruchomionego hosta Proxmox VE z adresem panelu administracyjnego.
Ekran uruchomionego hosta Proxmox VE z adresem panelu administracyjnego.

Otwórz ten adres na innym komputerze w tej samej sieci i zaloguj się jako root, używając hasła ustawionego podczas instalacji. Przeglądarka może ostrzec przed certyfikatem wystawionym samodzielnie przez serwer. W sieci lokalnej, przy pierwszym logowaniu pod właściwy adres hosta, jest to oczekiwane zachowanie.

Po zalogowaniu zainstaluj dostępne aktualizacje i skonfiguruj uwierzytelnianie dwuskładnikowe. Panelu Proxmoxa na porcie 8006 nie należy przekierowywać bezpośrednio do internetu. Do zdalnej administracji bezpieczniej użyć VPN-u.

Uruchomienie kontenera LXC dla strony internetowej

Kontener otrzyma własny system plików, pamięć RAM, limit czasu procesora oraz adres IP w sieci lokalnej. Dla prostej strony będzie działał podobnie jak niewielki VPS, przy mniejszym zużyciu zasobów niż pełna maszyna wirtualna.

Krok 1: pobranie szablonu systemu

W drzewie zasobów po lewej stronie rozwiń swój host i wybierz magazyn local (pve). Przejdź do sekcji CT Templates, kliknij Templates, a następnie wybierz aktualny, wspierany szablon Debiana lub Ubuntu i kliknij Download.

Pobieranie szablonu systemu dla kontenera LXC w Proxmox VE.
Pobieranie szablonu systemu dla kontenera LXC w Proxmox VE.

Lista dostępnych wersji zmienia się z czasem, dlatego lepiej wybrać aktualne wydanie widoczne w panelu niż kierować się konkretnym numerem wersji z poradnika.

Krok 2: utworzenie kontenera

Kliknij Create CT w prawym górnym rogu panelu. W kreatorze:

  • nadaj kontenerowi nazwę i unikalny identyfikator,
  • pozostaw włączoną opcję Unprivileged container, jeśli usługa nie wymaga kontenera uprzywilejowanego,
  • ustaw silne hasło użytkownika root, a najlepiej dodaj również publiczny klucz SSH,
  • w sekcji Template wybierz pobrany szablon,
  • w sekcjach Disk, CPU i Memory przydziel zasoby,
  • w sekcji Network wybierz most vmbr0 i konfigurację IPv4 przez DHCP.

Dla prostej, statycznej strony można zacząć od jednego rdzenia, 1 GB RAM-u i kilku gigabajtów miejsca na dysku, a potem zwiększyć zasoby w razie potrzeby. Zmniejszanie wirtualnego dysku jest znacznie trudniejsze niż jego powiększanie, więc nie przydzielaj od razu całej dostępnej przestrzeni.

Po sprawdzeniu ustawień kliknij Finish, uruchom kontener i otwórz jego konsolę.

Krok 3: przypisanie stałego adresu IP

Kontener przeznaczony na serwer powinien otrzymywać zawsze ten sam adres IP. Zaloguj się do panelu routera i odszukaj ustawienia opisane jako DHCP Reservation, Static Lease lub podobnie. Powiąż wybrany adres IP z adresem MAC karty sieciowej kontenera.

Przypisanie stałego adresu IP do adresu MAC kontenera w ustawieniach DHCP routera.
Przypisanie stałego adresu IP do adresu MAC kontenera w ustawieniach DHCP routera.

Rezerwacja DHCP jest zwykle prostsza w utrzymaniu niż ręczne wpisanie statycznego adresu w systemie kontenera. Jeżeli kiedyś zmienisz podsieć, wszystkie rezerwacje pozostaną widoczne w jednym miejscu - w konfiguracji routera.

Krok 4: instalacja serwera Nginx

Otwórz konsolę kontenera w panelu Proxmoxa i zaloguj się jako root. Następnie odśwież listę pakietów i zainstaluj Nginx:

apt update && apt install -y nginx

Po instalacji wpisz w przeglądarce http://adres-IP-kontenera. Jeżeli konfiguracja sieci jest poprawna, zobaczysz domyślną stronę Nginx.

Domyślna strona wyświetlana po instalacji serwera Nginx.
Domyślna strona wyświetlana po instalacji serwera Nginx.

Na tym etapie witryna jest dostępna tylko w sieci lokalnej. Nie konfiguruj jeszcze przekierowania portów do tego kontenera, jeśli zamierzasz używać Nginx Proxy Managera - publiczny ruch skierujemy właśnie do reverse proxy.

Jak udostępnić stronę w internecie?

Samo uruchomienie serwera w domu nie oznacza jeszcze, że będzie on osiągalny z internetu. Przed konfiguracją routera sprawdź cztery rzeczy:

  1. Publiczny adres IP. Adres WAN widoczny w panelu routera powinien być publiczny. Jeżeli operator stosuje CGNAT, zwykłe przekierowanie portów nie zadziała. Można wtedy zamówić publiczny adres u operatora albo skorzystać z tunelu pośredniczącego. Alternatywą jest publiczne IPv6, ale wymaga ono poprawnej konfiguracji DNS i zapory sieciowej.
  2. Adres zmienny lub stały. Jeśli publiczny adres IP okresowo się zmienia, skonfiguruj usługę dynamicznego DNS-u albo automatyczną aktualizację rekordu DNS u operatora domeny.
  3. Rekordy domeny. Rekord A domeny i potrzebnych subdomen powinien wskazywać publiczny adres IPv4 domowego łącza. Przy IPv6 używa się rekordu AAAA.
  4. Porty przychodzące. Operator i router muszą zezwalać na ruch do portów 80 (HTTP) i 443 (HTTPS). Przy dwóch routerach połączonych szeregowo może być potrzebne przekierowanie na obu urządzeniach albo przełączenie jednego z nich w tryb bridge.

W routerze przekieruj porty TCP 80 i 443 na stały adres IP serwera reverse proxy. Nie używaj do tego opcji DMZ, ponieważ niepotrzebnie wystawiłaby na internet wszystkie porty wybranego urządzenia.

Przykład przekierowania portu w panelu routera. Docelowo porty 80 i 443 powinny prowadzić do Nginx Proxy Managera.
Przykład przekierowania portu w panelu routera. Docelowo porty 80 i 443 powinny prowadzić do Nginx Proxy Managera.

Kilka stron na jednym publicznym adresie IP

Załóżmy, że na serwerze działają trzy usługi dostępne pod adresami: moja-domena.pl, app.moja-domena.pl, cloud.moja-domena.pl.

Router nie może przekierować tego samego portu 443 jednocześnie do trzech kontenerów. Rozwiązuje to reverse proxy, które odbiera cały ruch HTTP i HTTPS, rozpoznaje nazwę domeny, a następnie przekazuje żądanie do właściwej usługi w sieci lokalnej.

Nginx Proxy Manager udostępnia panel graficzny do zarządzania takimi regułami i certyfikatami TLS Let’s Encrypt. Oficjalnie jest rozpowszechniany jako obraz Dockera. Najlepszą izolację zapewnia uruchomienie Dockera z Nginx Proxy Managerem w osobnej maszynie wirtualnej z Linuksem.

Prostszą drogą jest skorzystanie ze skryptu społeczności Proxmox, który tworzy i konfiguruje osobny kontener LXC. Nie jest to skrypt dostarczany ani wspierany przez twórców Proxmoxa czy Nginx Proxy Managera. Przed uruchomieniem zewnętrznego skryptu z uprawnieniami administratora przeczytaj jego kod, sprawdź źródło i upewnij się, że masz aktualną kopię zapasową.

Po zainstalowaniu Nginx Proxy Managera:

  1. przypisz jego maszynie lub kontenerowi stały adres IP,
  2. skieruj na ten adres przekierowania portów TCP 80 i 443,
  3. dodaj w DNS-ie rekordy domen i subdomen wskazujące publiczny adres IP,
  4. w sekcji Proxy Hosts utwórz wpis dla każdej domeny, podając lokalny adres IP i port docelowej usługi,
  5. zamów certyfikat Let’s Encrypt i po sprawdzeniu działania włącz wymuszanie HTTPS.

Panel administracyjny Nginx Proxy Managera nie powinien być publicznie dostępny. Pozostaw go w sieci lokalnej lub udostępnij wyłącznie przez VPN, a konto administratora zabezpiecz unikalnym, silnym hasłem.

Dalsze działania

Po uruchomieniu pierwszych usług warto dopracować kilka elementów, które zwiększą niezawodność i bezpieczeństwo całego środowiska:

  • Skonfiguruj automatyczny start po awarii zasilania. W UEFI/BIOS-ie włącz funkcję uruchamiającą komputer po przywróceniu zasilania. W zależności od producenta może nazywać się między innymi Restore on AC/Power Loss, AC Back albo Power Recovery.
  • Włącz automatyczne uruchamianie maszyn wirtualnych. W Proxmoxie ustaw opcję Start at boot dla kontenerów i maszyn wirtualnych, które powinny wystartować razem z hostem. W bardziej rozbudowanym środowisku określ również kolejność uruchamiania i opóźnienia - na przykład baza danych powinna być gotowa przed korzystającą z niej aplikacją.
  • Ogranicz przekierowanie portów. Do Nginx Proxy Managera przekieruj tylko porty niezbędne do obsługi stron, zwykle TCP 80 i 443. Nie wystawiaj do internetu panelu Proxmoxa na porcie 8006, paneli administracyjnych aplikacji ani SSH, jeśli nie jest to konieczne. Do zdalnego zarządzania użyj VPN-u.
  • Regularnie instaluj aktualizacje. Aktualizuj zarówno hosta Proxmox VE, jak i systemy oraz aplikacje działające w kontenerach i maszynach wirtualnych. Przed większą aktualizacją wykonaj kopię zapasową i sprawdź informacje o zmianach.
  • Przechowuj kopie poza serwerem. Automatyczne backupy zapisuj na osobnym nośniku lub urządzeniu, na przykład NAS-ie. Kopia znajdująca się wyłącznie na tym samym dysku nie ochroni danych przed jego awarią. Okresowo wykonuj próbne odtworzenie wybranego kontenera lub maszyny