Jak zacząć: Twoja domena na Twoim NAS-ie: witryna, DNS i poczta od pierwszego dnia →
Strona produktu: WebHostPro: hosting stron WWW na Twoim NAS-ie QNAP →
WebHostPro uruchamia witryny na NAS-ie QNAP. To zestaw serwerów WWW: nginx przed każdą witryną, za nim Apache
httpd dla witryn, które go wybrały, PHP 8.1 do 8.5, MariaDB, Percona Server, PostgreSQL, memcached i Valkey,
z panelem w dziewięciu językach, który dodaje, zmienia i usuwa witryny.
Pierwsze uruchomienie
Przycisk Otwórz w App Center prowadzi do panelu, https://<NAS>:9541/; port 9540 (zwykły
HTTP) przekierowuje tam. Na nowej instalacji panel pokazuje Pierwsze logowanie: hasło co najmniej
10-znakowe, wpisane dwa razy. Pakiet nie ustawia żadnego hasła i żadnego nie generuje, a panel przechowuje tylko
skrót ustawionego przez ciebie hasła.
Strona przyjmuje hasło tylko z komputera w sieci własnej NAS-a (adres prywatny, pętli zwrotnej lub link-local) i
przez 60 minut od uruchomienia panelu; dopóki nikt go nie ustawi, wybiera je pierwsza osoba z sieci, która w tej
godzinie otworzy panel. Żeby otworzyć ją ponownie, zrestartuj WebHostPro w App Center. Sesja trwa 8 godzin, a 10
nieudanych logowań z jednego adresu blokuje ten adres na 15 minut.
Witryny
Witryna to domena z aliasami, rodzaj (pliki statyczne, PHP albo proxy do usługi na NAS-ie lub w sieci lokalnej,
także w kontenerze, z websocketami), serwer WWW (nginx albo Apache httpd) i, jeśli jej potrzeba, baza danych.
Celem proxy jest adres z zakresu prywatnego, a nie nazwa hosta. Każda witryna ma własne konto,
ws-<ID>, które jest właścicielem jej folderu i uruchamia jej PHP, więc PHP jednej witryny nie
może czytać plików innej. Folder leży we współdzielonym folderze QTS albo w folderze danych WebHostPro, a jego
public/ jest katalogiem głównym dokumentów.
Witryna PHP uruchamia własny proces główny PHP-FPM, a jej karta PHP zawiera wersję (8.1 do 8.5), strefę
czasową, limity, błędy, sesje i bezpieczeństwo, OPcache i JIT, APCu, rozszerzenia, dodatkowe wiersze php.ini
i procesy robocze PHP (pulę). Wiersz php.ini jest sprawdzany z listą dyrektyw, którą podaje PHP tej wersji; nazwa,
która ładuje kod, uruchamia polecenie, wskazuje plik albo zawiera hasło, jest odrzucana. Pula ma menedżera
procesów (na żądanie, dynamiczny albo stały), liczbę procesów (domyślnie na żądanie z 5), czas bezczynności,
liczbę żądań na proces, limit czasu żądania i dziennik wolnych żądań, który pokazuje karta Dzienniki. Awaria albo
obciążony PHP jednej witryny nie zatrzymuje pozostałych, a zmiana ustawień PHP jednej witryny restartuje tylko jej
PHP. Proces główny, który się zakończy, jest uruchamiany ponownie i zostaje wyłączony po pięciu zakończeniach
w ciągu minuty; mówi o tym logs/php8.N-ID.log.
Każda witryna może uruchamiać zaplanowane zadania jako własne konto i z własnym PHP: plik PHP, polecenie albo własny adres witryny, co minutę lub według dowolnego harmonogramu crona. Strona witryny pokazuje wynik i wyjście każdego uruchomienia, a gdy zadanie zacznie kończyć się błędem, MailServerPro wyśle raport.
Każda witryna PHP ma własny Valkey (mówi protokołem Redisa) i własny memcached, każdy na gnieździe w folderze, który otwiera tylko ta witryna, więc żaden nie potrzebuje hasła ani portu sieciowego; karta Pamięć podręczna witryny pokazuje oba gniazda. Każdy mieści do 64 MB, a restart czyści oba. Każda wersja PHP ma imagick z ImageMagick, który czyta i zapisuje JPEG, PNG, WebP, GIF i AVIF oraz czyta HEIC. Jego zasady odrzucają formaty, które czytają inne pliki albo uruchamiają programy, na przykład SVG i MSL.
Plik .htaccess witryny na Apache może też używać uwierzytelniania Digest, grup z pliku grup, Substitute do podmiany tekstu na stronie i filtra RATE_LIMIT do ograniczenia prędkości pobierania.
Witryna PHP może też mieć własne rozszerzenia PECL: jej karta PHP buduje je na koncie witryny, bez sieci, w środowisku budowania Bucket & Code Server IDE, i ładuje je tylko PHP tej witryny.
WebHostPro może jednym kliknięciem przejąć rolę serwera WWW NAS-a, a świeża instalacja pyta o to raz: administracja QTS przechodzi z portu 443 na 44443, a serwer WWW QTS z 80 na 8880, każdy krok jest sprawdzany przed następnym, witryny QTS trafiają za WebHostPro, a jedno kliknięcie na stronie Serwer frontowy i porty oddaje porty 80 i 443.
Przewodnik prowadzi od standardowych portów i TurboDNS do pierwszej witryny, a po sprawdzeniu konfiguracji DNS proponuje rozgłaszanie adresu serwera DNS przez DHCP routera.
Witryna PHP albo statyczna, którą podaje nginx, ma kartę Pamięć podręczna. nginx kompresuje odpowiedzi tekstowe
oprócz gzip także przez Brotli i zstd. Witryna PHP może włączyć pamięć podręczną stron, domyślnie wyłączoną:
odwiedzający z ciasteczkiem logowania zawsze dostają świeżą stronę, nagłówek X-Cache mówi HIT, MISS,
STALE, UPDATING albo BYPASS, a Wyczyść pamięć podręczną ją opróżnia. Pliki statyczne przeglądarki mogą
trzymać 1, 7, 30 albo 365 dni. nginx przyjmuje treść żądania do największego żądania witryny
(post_max_size z karty PHP), a powyżej odpowiada 413; witryna proxy nie ma na froncie limitu
treści.
Dodaj witrynę to kreator domeny: Domena, DNS, Rejestrator, Witryna, Baza danych (dla witryny PHP),
Certyfikat i Podsumowanie. Krok DNS pyta, kto odpowiada za strefę (TurboDNS na tym NAS-ie; serwery
rejestratora lub dostawcy DNS; albo Cloudflare lub OVHcloud ze strefy przechowywanej w TurboDNS na tym NAS-ie)
i jakie publiczne adresy ma ten NAS. Krok Rejestrator wymienia, co wpisać tam,
gdzie kupiono domenę, każdą wartość z przyciskiem kopiowania, a pod spodem przekierowania routera i stan frontu.
Próbny przebieg w Podsumowaniu pokazuje razem plan witryny i plan TurboDNS, a jedno zastosowanie wysyła oba.
Certyfikat pochodzi z Let’s Encrypt (HTTP-01, gdzie plik podaje front na porcie 80, albo DNS-01 przez
TurboDNS lub Cloudflare; WebHostPro odnawia go, gdy zostało 30 dni lub mniej) albo jest wgranym certyfikatem,
certyfikatem samego NAS-a lub samopodpisanym.
Po zastosowaniu Przegląd witryny ma kartę Dokończ konfigurację <nazwa>: Witryna uruchomiona,
Rekordy w TurboDNS, U rejestratora, Sprawdzenie domeny, Certyfikat i Zakończ. Sprawdź teraz odczytuje
serwery nazw strefy nadrzędnej, TurboDNS tego NAS-a, trzy publiczne resolwery i front, i mówi, że nie widzi, czy
porty 53, 80 i 443 docierają do NAS-a z internetu; wiersz Certyfikat prosi Let’s Encrypt o certyfikat. Wiersz
Rekordy w TurboDNS jest gotowy, gdy plan TurboDNS dla domeny nie znajduje nic do zmiany, tak samo po próbnym
przebiegu kreatora, po Wyślij rekordy z tego wiersza i po ponownej wysyłce, i pokazuje wtedy W TurboDNS od
<czas>; witryna, której rekordy już są w strefie, dostaje to po samym próbnym przebiegu.
Każda zmiana jest najpierw szkicem. Próbny przebieg zapisuje całą warstwę WWW do folderu roboczego, uruchamia na
nim nginx -t, httpd -t i php-fpm -t i pokazuje dodane, zmienione i usunięte
pliki wraz z różnicami. Zastosowanie wykonuje dokładnie ten plan, najpierw zachowuje migawkę działających plików,
przeładowuje usługi łagodnie i przywraca migawkę, gdy któryś krok się nie powiedzie. Usunięcie witryny wymaga
wpisania jej nazwy; jej folder i bazy danych zostają.
W witrynie proxy lista Aplikacja na tym NAS-ie zawiera zainstalowane aplikacje, dla których WebHostPro ma
szablon: Rtorrent 16 i jego dodatki, Radarr, Sonarr, Prowlarr, Lidarr, Bazarr, Seerr, Tautulli, qBittorrent,
Transmission, TunerHub, Weblate, Tolgee, Bucket & Code Server IDE, Plex Media Server i Jellyfin. Wybór
aplikacji uzupełnia cel portem, którego używa jej pakiet, i włącza websockety, jeśli aplikacja ich potrzebuje.
Serwer frontowy wysyła wtedy aplikacji nagłówki X-Forwarded-Host i X-Real-IP, daje
aplikacji z długimi żądaniami do godziny na odpowiedź i przesyła bez buforowania multimedia oraz zdarzenia
aplikacji, które je wysyłają. Ustawienie, które może zmienić tylko sama aplikacja, na przykład URL Base aplikacji
*arr, jest opisane w jednym wierszu pod tą listą.
Witryna domyślna
Żądanie wysłane pod nazwę, której nie ma żadna witryna, na przykład pod adres lub nazwę NAS-a, trafia do witryny
domyślnej: do folderu udostępnionego Web w QTS, jeśli NAS ma taki, którego WebHostPro może użyć, a w
przeciwnym razie do strony startowej w folderze danych WebHostPro. Obsługuje ją Apache httpd, więc pliki
.htaccess w tym folderze działają, z wyjątkiem wierszy Options, które httpd pomija. Jej
PHP działa na osobnym koncie. Po instalacji lub aktualizacji jest włączona jako szkic: następny podgląd zmian i
zastosowanie zmian ją publikują. Odpowiada na portach serwera frontowego: na porcie 80 po przeniesieniu tam
serwera frontowego (strona Serwer frontowy i porty), a wcześniej na porcie 9542. Dopóki port 80 zajmuje
serwer WWW QTS, jej strona w WebHostPro podaje, co wyłączyć w QTS. Nigdy nie udostępnia folderów innych witryn
leżących w folderze Web, plików i folderów, których nazwy zaczynają się od kropki (poza .well-known),
ani folderów QTS zaczynających się od @. Nie pokazuje też listy plików w folderach. WebHostPro nie
zmienia uprawnień tego folderu.
Foldery w folderze udostępnionym Web, które są dowiązaniami do innych folderów udostępnionych lub
woluminów, działają tak jak z serwerem WWW QTS, również z PHP.
Przez HTTPS odpowiada z własnym certyfikatem NAS-a, tym samym, którego QTS używa dla swoich stron; dopóki to
samopodpisany certyfikat QNAP, przeglądarki pokazują ostrzeżenie. Żądanie TLS do witryny bez TLS jest odrzucane.
WebHostPro sam rotuje swoje logi: log jest rotowany po 10 MiB albo po tygodniu, zostaje pięć kopii
spakowanych gzipem, a nginx i httpd otwierają swoje logi na nowo bez gubienia żądań.
Bazy danych
Witryna dostaje bazę danych i użytkownika MariaDB, Percona Server albo PostgreSQL na stronie Bazy danych albo na
swojej karcie Baza danych. Percona Server 8.4 jest konfigurowany przy tworzeniu pierwszej bazy Percona i nasłuchuje
na 127.0.0.1:9555 oraz na gnieździe; NAS, który nigdy go nie używa, nigdy go nie uruchamia. Strona Bazy danych ma
kartę dla MariaDB i kartę dla Percona Server z ośmioma ustawieniami (pula buforów, połączenia, największy pakiet,
dziennik redo, tabele tymczasowe, pamięć podręczna tabel, czas bezczynności, czas wolnego zapytania) i dodatkowymi
wierszami my.cnf, sprawdzanymi z listą opcji samego serwera. Zmiana jest szkicem; zastosowanie restartuje serwer,
więc jego bazy danych przez kilka sekund nie odpowiadają.
Z innymi aplikacjami na NAS-ie
Gdy na NAS-ie działa TurboDNS, krok DNS kreatora proponuje mu strefę, a zastosowanie wysyła rekordy. Bez
MailServerPro nie niosą one rekordów pocztowych: nowa strefa dostaje serwery nazw ns i ns1,
oba wskazujące ten NAS, chyba że podasz drugi serwer nazw, oraz rekordy A i AAAA nazw witryny, ns
i ns1; strefa, którą TurboDNS już obsługuje, zachowuje własne serwery nazw. Przy zainstalowanym
MailServerPro strefa dostaje szablon hostingu TurboDNS z publicznymi adresami NAS-a, które potwierdzisz, rekordy A
i AAAA własnych nazw witryny (szablon obejmuje domenę, www, ns, ns1 i nazwy
pocztowe, więc druga witryna, na przykład shop.example.com, dostaje własne) oraz rekordy DKIM,
MTA-STS, TLS-RPT i TLSA z MailServerPro. Nic nie trafia do TurboDNS przed zastosowaniem, a Podsumowanie pokazuje
najpierw każdy rekord.
Trzecia odpowiedź kroku DNS, Cloudflare lub OVHcloud ze strefy przechowywanej w TurboDNS na tym NAS-ie, wysyła
do TurboDNS te same rekordy co pierwsza odpowiedź, a za domenę odpowiada dostawca DNS. TurboDNS wysyła strefę
przez API dostawcy i tylko na twoje polecenie: otwórz strefę w TurboDNS, zakładkę Cloudflare i OVH,
Przejrzyj zmiany, potem Wyślij zmiany. Krok Rejestrator nie wymienia wtedy serwerów nazw, rekordów
glue ani portu 53: rejestrator zachowuje serwery nazw dostawcy, a strefa nie potrzebuje przekierowania portu 53 na
routerze. Sprawdzenie domeny przechodzi wtedy na publicznych resolwerach i froncie, a wiersze Serwery nazw
u rejestratora i Rekordy glue są pominięte.
Przy zainstalowanym Bucket & Code Server IDE karta Pliki witryny otwiera jej folder w edytorze.
Bez publicznego adresu
NAS za CGNAT albo za routerem, który nie przekierowuje portów, może udostępnić wybrane witryny w internecie
przez Cloudflare Tunnel. Karta Dostęp do witryn z internetu przez Cloudflare na stronie Serwer
frontowy i porty przyjmuje token API twojego konta Cloudflare i strefę, której serwery nazw należą do
Cloudflare. WebHostPro tworzy wtedy własny tunel i uruchamia cloudflared, który sam łączy się z Cloudflare.
Każda zastosowana witryna dostaje przełącznik, który nadaje jej nazwom w strefie rekord CNAME do tunelu (przez
proxy Cloudflare); WebHostPro nie przyjmie nazwy, która ma już rekord A, AAAA lub CNAME, którego sam nie
utworzył. Wyłączenie tunelu usuwa rekordy utworzone przez WebHostPro i sam tunel. Cloudflare kończy TLS i widzi
ruch, a w darmowym planie jedno żądanie może wysłać najwyżej 100 MB.
Pakiet
WebHostPro 0.14.4 jest zbudowany ze źródeł przez App Builder z Bucket & Code Server IDE: nginx 1.30.5, Apache
httpd 2.4.68, PHP 8.1.34, 8.2.35, 8.3.36, 8.4.27 i 8.5.12 z PHP-FPM, MariaDB 12.3.3, Percona Server 8.4.11-11
(druga aplikacja App Buildera w tym samym pakiecie), PostgreSQL 18.6, memcached
1.6.45, Valkey 9.1.2, FFmpeg 9.0.2, ImageMagick 7.1.2-32 (libheif 1.23.6, libde265 1.1.3, libaom 3.15.3), imagick 3.8.1, lego 4.35.2 i cloudflared 2026.10.1. Node.js 24.22.1, Grafana 13.2.4 i OpenSearch 3.8.0 to usługi opcjonalne za
witryną proxy; pliki WWW Grafany i pliki jar OpenSearch, z środowiskiem Javy przyciętym z JDK producenta, pochodzą z
wydań, nie są tu budowane. PHP 8.1 nie ma już wsparcia i php.net nie wydał dla niego poprawek CVE-2026-109618 i CVE-2026-109619; witrynę na 8.1 przenieś na nowszą gałąź.
Panel to program w Go z wbudowaną stroną; działa jako własne konto bez praw roota, a agent roota robi to, co
wymaga roota, i przyjmuje nazwy oraz identyfikatory, nie zawartość plików. Demony działają jako własne konta,
dodawane przy pierwszym uruchomieniu i zachowywane po usunięciu pakietu. Wszystko, co się zmienia, leży w folderze
danych, <install volume>/WebHostPro;
aktualizacja i usunięcie pakietu zostawiają go na miejscu. Żeby przenieść go ręcznie: zatrzymaj WebHostPro,
przenieś folder (bez kopii w starym miejscu), wpisz nową ścieżkę do etc/data-dir w folderze
instalacji pakietu, uruchom. Start odzyskuje konta witryn i zapisuje pliki serwerów na nowo dla nowego folderu,
więc witryny odpowiadają bez zastosowania.
Instalacja
Zalecane: z App Center. Dodaj repozytorium tej strony jeden raz; od tej chwili pakiet instaluje się
i aktualizuje z App Center jak każda inna aplikacja.
- App Center → ⚙ Ustawienia → Repozytorium aplikacji → Dodaj.
- Nazwij je
QNAP Utilities, wklej https://www.qnaputilities.com/repo.xml, Dodaj.
- Otwórz QNAP Utilities w lewym pasku i zainstaluj (example) WebHostPro.
Panel repozytorium: każdy pakiet z kanału →
Albo ręcznie: pobierz poniższą wersję, potem App Center → Instaluj ręcznie.
Czego potrzebuje
NAS QNAP z procesorem x86_64 (Intel lub AMD) i systemem QTS 6.0 lub QuTS hero 6.0 albo nowszym.
Panel działa na porcie 9541 (HTTPS; 9540 przekierowuje tam), front (nginx) na 9542 (HTTP) i 9543 (HTTPS oraz UDP
dla HTTP/3, gdy nginx go ma), a httpd na 127.0.0.1:9544 za nim. Bazy danych, pamięci podręczne i usługi opcjonalne
nasłuchują tylko na 127.0.0.1. Front przechodzi na porty 80 i 443 dopiero po kliknięciu na stronie
Serwer frontowy i porty, która wymienia kroki w QTS zwalniające te porty i to, co każdy z nich psuje;
WebHostPro sam nigdy nie zmienia ustawień QTS.
W QuTS hero folder współdzielony z zaawansowanymi uprawnieniami do folderów nie może przechowywać witryn:
zastosowanie zatrzymuje się, podaje folder i pyta ponownie. WebHostPro 0.14.4 był sprawdzony na QTS 6.1.0 i na QuTS hero 6.1.0.
Pobierz