Unofficial
Na tej stronie
  1. 01Co to jest
  2. 02Ekrany
  3. 03Pierwsze uruchomienie
  4. 04Witryny
  5. 05Witryna domyślna
  6. 06Bazy danych
  7. 07Z innymi aplikacjami na NAS-ie
  8. 08Bez publicznego adresu
  9. 09Instalacja
  10. 10Czego potrzebuje
  11. 11Powiązane strony

WebHostPro: hosting stron WWW na Twoim NAS-ie QNAP

WebHostPro uruchamia strony WWW na NAS-ie QNAP: strony statyczne, strony w PHP z własnymi bazami danych i witryny proxy do aplikacji na NAS-ie, każdą pod własną domeną i z certyfikatem, wszystko z jednego panelu. Jest darmowy i instaluje się z repozytorium App Center tej strony.

  • Działa na NAS-ie QNAP z procesorem Intel lub AMD (x86_64), z QTS 6.0 lub QuTS hero 6.0 albo nowszym.
  • Instaluje się z App Center jako (example) WebHostPro, z repozytorium QNAP Utilities.
  • Panel: https://<NAS>:9541/; strony odpowiadają na portach 9542 i 9543, dopóki nie przeniesiesz ich na 80 i 443.
  • Zbudowany ze źródeł przez App Builder z Bucket & Code Server IDE.

01Co to jest

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.

02Ekrany

WebHostPro: the overview of the sites and services The list of sites with their PHP version and certificate The wizard that adds a site A site's PHP settings

03Pierwsze 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.

04Witryny

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ą.

05Witryna 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ń.

06Bazy 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ą.

07Z 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.

08Bez 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.

09Instalacja

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.

  1. App Center → ⚙ Ustawienia → Repozytorium aplikacji → Dodaj.
  2. Nazwij je QNAP Utilities, wklej https://www.qnaputilities.com/repo.xml, Dodaj.
  3. Otwórz QNAP Utilities w lewym pasku i zainstaluj (example) WebHostPro.

Panel repozytorium: każdy pakiet z kanału →

10Czego 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.

11Powiązane strony