Unofficial
このページ
  1. 01概要
  2. 02画面
  3. 03初回起動
  4. 04サイト
  5. 05デフォルトサイト
  6. 06データベース
  7. 07NAS 上のほかのアプリとの連携
  8. 08パブリックアドレスがない場合
  9. 09インストール
  10. 10必要なもの
  11. 11関連ページ

WebHostPro:あなたの QNAP NAS で Web ホスティング

WebHostPro は QNAP NAS で Web サイトを動かします。静的サイト、専用データベースを持つ PHP サイト、NAS 上のアプリへのプロキシを、それぞれ独自ドメインと証明書付きで、ひとつのパネルから管理できます。無料で、このサイトの App Center リポジトリからインストールできます。

  • Intel または AMD プロセッサー(x86_64)搭載の QNAP NAS で、QTS 6.0 または QuTS hero 6.0 以降で動作します。
  • App Center の QNAP Utilities リポジトリから (example) WebHostPro としてインストールします。
  • パネル:https://<NAS>:9541/。サイトは、ポート 80 と 443 に切り替えるまで、ポート 9542 と 9543 で応答します。
  • Bucket & Code Server IDE の App Builder でソースからビルドしています。

01概要

WebHostPro は QNAP NAS 上でウェブサイトを動かします。ウェブサーバーのスタックで、すべてのサイトの前に nginx、それを使うよう設定されたサイトのために後ろに Apache httpd、さらに PHP 8.1〜8.5、MariaDB、Percona Server、PostgreSQL、memcached、Valkey があり、サイトの追加・変更・削除は 9 言語のパネルで行います。

02画面

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

03初回起動

App Center の 開く はパネル https://<NAS>:9541/ を開きます。暗号化なしのポート 9540 はそこへ転送します。新規インストールでは、パネルに 初回サインイン が表示されます。10 文字以上のパスワードを 2 回入力します。パッケージがパスワードを設定することも、生成することもなく、パネルが保存するのはあなたが設定したパスワードのハッシュだけです。

このページがパスワードを受け付けるのは、NAS 自身のネットワーク内(プライベート、ループバック、リンクローカルのアドレス)のコンピューターからだけで、パネルの起動から 60 分間だけです。誰かが設定するまでは、その 1 時間のうちに最初にパネルを開いたネットワーク上の人が決めることになります。もう一度開くには、App Center で WebHostPro を再起動します。セッションは 8 時間続き、同じアドレスから 10 回サインインに失敗すると、そのアドレスは 15 分間締め出されます。

04サイト

サイトは、エイリアスを持つドメインに、種類(静的ファイル、PHP、または NAS 上やローカルネットワーク上のサービスへのプロキシで、コンテナも含み、websocket に対応)、ウェブサーバー(nginx または Apache httpd)、必要ならデータベースを組み合わせたものです。プロキシの宛先は、ホスト名ではなくプライベート範囲のアドレスです。各サイトには専用のアカウント ws-<ID> があり、そのフォルダーを所有して PHP を実行するため、あるサイトの PHP がほかのサイトのファイルを読むことはできません。フォルダーは QTS の共有フォルダー、または WebHostPro のデータフォルダーにあり、その public/ がドキュメントルートです。

PHP サイトは、専用の PHP-FPM マスターを実行します。その PHP タブには、バージョン(8.1〜8.5)、タイムゾーン、制限、エラー、セッションとセキュリティ、OPcache と JIT、APCu、拡張機能、追加の php.ini 行、PHP ワーカー(プール)があります。php.ini の行は、そのバージョンの PHP 自身が挙げるディレクティブと照合され、コードを読み込む、コマンドを実行する、ファイルを指定する、パスワードを含む名前は拒否されます。プールには、プロセスマネージャー(オンデマンド、ダイナミック、スタティック)、プロセス数(既定ではオンデマンドで 5)、待機時間、プロセスあたりのリクエスト数、リクエストの時間制限、遅いリクエストのログがあり、このログはログタブに表示されます。あるサイトのクラッシュや PHP の高負荷はほかのサイトに影響せず、あるサイトの PHP 設定を変えると、そのサイトの PHP だけが再起動します。終了したマスターは再起動され、1 分間に 5 回終了すると停止したままになります。その旨は logs/php8.N-ID.log に記録されます。

各サイトは、自分のアカウントと自分の PHP でスケジュールタスクを実行できます。サイトの PHP ファイル、コマンド、サイト自身のアドレスを、毎分または任意の cron スケジュールで実行します。サイトのページには各実行の結果と出力が表示され、タスクが失敗し始めると MailServerPro がレポートを送ります。

PHP サイトにはそれぞれ専用の Valkey(Redis のプロトコルを話します)と専用の memcached があり、どちらもそのサイトだけが開けるフォルダーのソケットで待ち受けるので、パスワードもネットワークポートも要りません。サイトのキャッシュタブに両方のソケットが表示されます。それぞれ最大 64 MB を保持し、再起動で両方とも空になります。どの PHP バージョンにも imagick があり、ImageMagick で JPEG、PNG、WebP、GIF、AVIF を読み書きし、HEIC を読み込みます。そのポリシーは、SVG や MSL のように別のファイルを読んだりプログラムを実行したりする形式を拒否します。

Apache サイトの .htaccess では、Digest 認証、グループファイルによるグループ、ページ内のテキストを置き換える Substitute、ダウンロード速度を制限する RATE_LIMIT フィルターも使えます。

PHP サイトは独自の PECL 拡張機能も持てます。サイトの PHP タブが、サイト専用のアカウントで、ネットワークなしで、Bucket & Code Server IDE のビルド環境でビルドし、そのサイトの PHP だけが読み込みます。

WebHostPro はクリック 1 回でこの NAS の Web サーバーの役割を引き継げます。新規インストールでは一度だけ尋ねます。QTS の管理画面はポート 443 から 44443 へ、QTS の Web サーバーは 80 から 8880 へ移り、各手順は次へ進む前に確認され、QTS のサイトは WebHostPro の後ろに入ります。「フロントとポート」ページのクリック 1 回で 80 と 443 を戻せます。

ガイドツアーは標準のポートと TurboDNS から最初のサイトまでを案内し、DNS の設定を確認したうえで、ルーターの DHCP で DNS サーバーのアドレスを配ることを提案します。

nginx が配信する PHP サイトと静的サイトには、キャッシュタブがあります。nginx はテキストの応答を gzip に加えて Brotli と zstd でも圧縮します。PHP サイトはページキャッシュをオンにできます(既定ではオフ)。サインインのクッキーを持つ訪問者には常に新しいページが返され、X-Cache ヘッダーが HIT、MISS、STALE、UPDATING、BYPASS のいずれかを示し、キャッシュを消去 で空にできます。静的ファイルはブラウザーに 1、7、30、365 日のいずれかで保持させられます。nginx はリクエスト本文をサイトの最大リクエスト(PHP タブの post_max_size)まで受け付け、それを超えると 413 を返します。プロキシサイトにはフロントでの本文制限はありません。

サイトを追加 はドメインのウィザードです。手順はドメイン、DNS、レジストラ、ウェブサイト、データベース(PHP サイトの場合)、証明書、確認です。DNS では、ゾーンに応答するのが誰か(この NAS の TurboDNS、レジストラまたは DNS プロバイダーのサーバー、あるいは Cloudflare または OVHcloud で、ゾーンはこの NAS の TurboDNS が保持)と、この NAS のパブリックアドレスを尋ねます。レジストラでは、ドメインを購入した先で入力する値をコピーボタン付きで一覧にし、その下にルーターの転送とフロントの状態を示します。確認のドライランはサイトの計画と TurboDNS の計画をまとめて表示し、1 回の適用で両方を送ります。証明書は Let’s Encrypt(HTTP-01 ではフロントがポート 80 でファイルを返し、DNS-01 では TurboDNS または Cloudflare を使います。残りが 30 日以内になると WebHostPro が更新します)のものか、アップロードしたもの、NAS 自身のもの、自己署名のものです。

適用の後、サイトの概要にカード <名前> の設定を完了する が表示されます。行はサイトを適用済み、TurboDNSのレコード、レジストラでの設定、ライブチェック、証明書、仕上げです。今すぐ確認 は親ゾーンのネームサーバー、この NAS の TurboDNS、3 つのパブリックリゾルバー、フロントを読み、ポート 53、80、443 がインターネットから NAS に届くかどうかは確認できないと伝えます。証明書の行は Let’s Encrypt に証明書を要求します。TurboDNSのレコードの行は、ドメインに対する TurboDNS の計画に変更するものがなくなった時点で完了になります。ウィザードのドライラン、その行の「レコードを送信」、繰り返しの送信のどれでも同じで、完了すると <日時> から TurboDNS にあります。 と表示されます。レコードがすでにゾーンにあるサイトは、ドライランだけで完了になります。

すべての変更は、まず下書きです。ドライランはウェブ層全体を作業用フォルダーに書き出し、そこで nginx -t、httpd -t、php-fpm -t を実行して、追加・変更・削除されるファイルを差分付きで表示します。適用はその計画どおりに実行し、先に稼働中のファイルのスナップショットを保存し、穏やかにリロードし、途中で失敗したらスナップショットを戻します。サイトの削除には名前の入力が必要で、そのフォルダーとデータベースは残ります。

プロキシサイトでは、このNASのアプリ に、WebHostPro がテンプレートを持つインストール済みのアプリが並びます。Rtorrent 16 とそのアドオン、Radarr、Sonarr、Prowlarr、Lidarr、Bazarr、Seerr、Tautulli、qBittorrent、Transmission、TunerHub、Weblate、Tolgee、Bucket & Code Server IDE、Plex Media Server、Jellyfin です。アプリを選ぶと、プロキシ先にそのパッケージが使うポートが入り、アプリに必要なら WebSocket がオンになります。このときフロントはアプリに X-Forwarded-Host と X-Real-IP ヘッダーを送り、長いリクエストのあるアプリには最大 1 時間の応答時間を与え、メディアやイベントを送るアプリではそれらをバッファリングせずにストリーミングします。アプリ自身でしか変更できない設定、たとえば *arr アプリの URL Base は、選択欄の下に 1 行で示されます。

05デフォルトサイト

どのサイトにもない名前(たとえば NAS のアドレスや名前)へのリクエストには、デフォルトサイトが応答します。WebHostPro が使える QTS の共有フォルダー Web が NAS にあればそのフォルダー、なければ WebHostPro のデータフォルダーにあるスタートページです。Apache httpd が配信するため、フォルダーの .htaccess ファイルが機能します(Options 行は無視されます)。PHP は専用のアカウントで動きます。インストールまたはアップデートの後は下書きとしてオンになっており、次のドライランと適用で公開されます。応答するのはフロントのポートです。フロントとポート ページでフロントを 80 に移した後は 80、それまでは 9542 です。QTS の Web サーバーがポート 80 を使っている間は、WebHostPro のこのサイトのページに、QTS でオフにする設定が示されます。Web フォルダー内のほかのサイトのフォルダー、名前がドットで始まるファイルとフォルダー(.well-known を除く)、@ で始まる QTS のフォルダーは決して配信せず、フォルダーの一覧も表示しません。WebHostPro はこのフォルダーのアクセス権を変更しません。 共有フォルダー Web の中で、ほかの共有フォルダーやボリュームへのリンクになっているフォルダーは、PHP も含めて QTS の Web サーバーと同じように動きます。

HTTPS では NAS 自身の証明書、つまり QTS が自分のページに使う証明書で応答します。それが QNAP の自己署名証明書のあいだは、ブラウザーに警告が表示されます。TLS のないサイトへの TLS リクエストは拒否されます。

WebHostPro はログを自分でローテーションします。10 MiB に達するか 1 週間たつとローテーションし、gzip で圧縮したコピーを 5 つ残します。nginx と httpd はリクエストを失わずにログを開き直します。

06データベース

サイトは、データベースページまたは自分のデータベースタブで、MariaDB、Percona Server、PostgreSQL のデータベースとユーザーを受け取ります。Percona Server 8.4 は最初の Percona データベースが作られたときにセットアップされ、127.0.0.1:9555 とソケットで待ち受けます。一度も使わない NAS では起動しません。データベースページには MariaDB のカードと Percona Server のカードがあり、8 つの設定(バッファープール、接続数、最大パケット、redo ログ、一時テーブル、テーブルキャッシュ、アイドル時間、スロークエリの時間)と、サーバー自身のオプション一覧と照合される追加の my.cnf 行を持ちます。変更はまず下書きで、適用するとサーバーが再起動するため、そのデータベースは数秒間応答しません。

07NAS 上のほかのアプリとの連携

TurboDNS が NAS で動いていると、ウィザードの DNS の手順でゾーンを TurboDNS に任せることができ、適用時にレコードが送られます。MailServerPro がない場合、レコードにメール用のものは含まれません。新しいゾーンにはネームサーバー ns と ns1(2 つ目のネームサーバーを指定しない限り、どちらもこの NAS)と、サイトの名前、ns、ns1 の A レコードと AAAA レコードが設定されます。TurboDNS がすでに提供しているゾーンは、自分のネームサーバーをそのまま保ちます。MailServerPro がインストールされていれば、ゾーンには TurboDNS のホスティングテンプレートと、あなたが確認した NAS のパブリックアドレス、サイト自身の名前の A レコードと AAAA レコード(テンプレートが扱うのはドメイン、www、ns、ns1、メールの名前だけなので、shop.example.com のような 2 つ目のサイトは自分のレコードを受け取ります)、そして MailServerPro の DKIM、MTA-STS、TLS-RPT、TLSA レコードが設定されます。適用するまで TurboDNS には何も書き込まれず、確認の手順で先にすべてのレコードを見られます。

DNS の手順の 3 つ目の答え「Cloudflare または OVHcloud。ゾーンはこのNAS上のTurboDNSが保持」では、最初の答えと同じレコードが TurboDNS に送られ、ドメインには DNS プロバイダーが応答します。TurboDNS はプロバイダーの API でゾーンを送信しますが、送るのはあなたが操作したときだけです。TurboDNS でそのゾーンを開き、「Cloudflare と OVH」タブで「変更を確認」、次に「変更を送信」を押します。レジストラの手順にはネームサーバー、グルーレコード、53 番ポートの項目が出ません。レジストラにはプロバイダーのネームサーバーをそのまま残し、ルーターでの 53 番ポートの転送も不要です。ライブチェックはパブリックリゾルバーとフロントで通り、レジストラのネームサーバーとグルーレコードの行はスキップになります。

Bucket & Code Server IDE がインストールされていれば、サイトのファイルタブからそのフォルダーをエディターで開けます。

08パブリックアドレスがない場合

CGNAT の内側にある NAS や、ポートを転送しないルーターの内側にある NAS でも、Cloudflare Tunnel を通して選んだサイトをインターネットに公開できます。フロントとポート ページのカード Cloudflare 経由でインターネットからサイトにアクセスできるようにする に、Cloudflare アカウントの API トークンと、ネームサーバーが Cloudflare のものであるゾーンを指定します。WebHostPro は専用のトンネルを作り、cloudflared を起動します。cloudflared は自分から Cloudflare に接続します。適用済みの各サイトにはスイッチがあり、オンにするとゾーン内のそのサイトの名前に、トンネルを指すプロキシ経由の CNAME レコードが作られます。WebHostPro が作っていない A、AAAA、CNAME レコードがすでにある名前は、WebHostPro が拒否します。トンネルをオフにすると、WebHostPro が作ったレコードとトンネルが削除されます。TLS は Cloudflare で終端され、Cloudflare は通信を見ることができます。無料プランでは、1 回のリクエストでアップロードできるのは 100 MB までです。

09インストール

おすすめ:App Center から。このサイトのリポジトリを一度追加するだけです。あとはこのパッケージもほかのアプリと同じように、App Center からインストールとアップデートを行えます。

  1. App Center → ⚙ 設定 → アプリリポジトリ → 追加。
  2. 名前を QNAP Utilities にし、https://www.qnaputilities.com/repo.xml を貼り付けて 追加。
  3. 左側の一覧で QNAP Utilities を開き、(example) WebHostPro をインストールします。

リポジトリのパネル:フィードに含まれる全パッケージ →

10必要なもの

x86_64 プロセッサー(Intel または AMD)を搭載し、QTS 6.0 または QuTS hero 6.0 以降を実行している QNAP NAS。

パネルはポート 9541(HTTPS。9540 はそこへ転送)、フロント(nginx)は 9542(HTTP)と 9543(HTTPS、nginx が対応していれば HTTP/3 用の UDP も)、その後ろの httpd は 127.0.0.1:9544 で待ち受けます。データベース、キャッシュ、オプションのサービスは 127.0.0.1 だけで待ち受けます。フロントが 80 と 443 に移るのは、フロントとポート のページでそれをクリックしたときだけです。このページには、それらのポートを空ける QTS での手順と、各手順が何を壊すかが一覧されています。WebHostPro が QTS の設定を自分で変えることはありません。

QuTS hero では、高度なフォルダー権限を持つ共有フォルダーにサイトを置けません。適用は止まり、そのフォルダーを示して、もう一度尋ねます。WebHostPro 0.14.4 は QTS 6.1.0 と QuTS hero 6.1.0 で試しています。

11関連ページ