第 II
サービスの運用
目の前の Mac で Web スタック、データベース、サービスカタログ、そしてサイトを動かす。
第 4
Web スタック
Apache または Nginx、サイトごとに必要な PHP バージョン、バーチャルホスト、信頼されたローカル HTTPS、そして DNS — Web スタック一式を、設定の手書きなしに 1 つのウィンドウから制御します。
Web サーバは多くのセルフホスト構成の心臓部です。だから FrontierStack はそれを一級の対象として扱います。Apache ペインは Homebrew 版 Apache のインストール・起動・検証・設定を行い、PHP・Localhost・Certificates・DNS の各ペインが、開発とホスティングの完全なスタックを仕上げます。あらゆる変更が検証を通るため、タイプミスがサイトを黙って落とすことはありません。
本章では、目の前の Mac で Web サイトを作り、動かすペインを扱います。そのスタックを実ドメインと公開インターネットへ繋ぐのは第 7 章、本番向けに堅牢化するのは第 10 章です。
4.1Apache ペイン
サイドバーから Apache ペインを開くと、Web サーバの状態がひと目で分かります。バージョン、起動の有無、待ち受けポート。上部のボタンが日々使う操作です — Start・Stop・Restart・Validate Config。検証は apachectl -t(本物の構文チェック)を実行し、結果を Last Result に表示するので、リロード前に変更が妥当だと確認できます。
FrontierStack は macOS のシステム版ではなく Homebrew 版 Apache を推奨します。Homebrew 版は /opt/homebrew(Intel Mac では /usr/local)以下に置かれ、brew services 経由で毎回 root を求められずに自分の権限で動き、System Integrity Protection に縛られません — だから最新の mod_php がきれいに読み込まれ、スタック全体が 1 つのツールチェーンに揃います。/etc/apache2 のシステム版は OS アップデートで消去され、Apple 同梱の libphp に縛られます。Homebrew 版 Apache が未インストールなら、ペインがワンクリックの Install Homebrew Apache… を提示します。
複数の Apache ビルド(Homebrew 版、旧来のローカルビルド、リモートサーバのもの)を併用する場合は、バイナリ選択(Add Homebrew Apache / Add Local Build…)で登録し、それぞれのバージョンとポートを見ながら切り替えられます。
/opt/homebrew/etc/httpd/frontierstack/ に置かれ、httpd.conf からの IncludeOptional で取り込まれます。アプリの vhost・MIME タイプ・管理対象 include をそこにまとめることで、手書きの httpd.conf は綺麗なまま保たれ、FrontierStack が何を追加したか常に分かります。4.2モジュール・ポート・管理対象の設定
Apache ペインの下部には、最も頻繁に編集する設定が、ファイルではなくコントロールとして並びます。
| セクション | 役割 |
|---|---|
| Ports | HTTP と SSL の待ち受けポートを設定(既定 80・443)。Nginx が 80/443 を使うなら Apache をそこから外します。Apply で Listen ディレクティブを書き換えてリロード。 |
| Apache Modules(Modules…) | 読み込み済みモジュールを一覧し、有効/無効を切り替え。未使用モジュールの無効化は最も手軽な堅牢化です。 |
| PHP Module | Web サイト向けに Apache が読み込む mod_php(libphp.so)のバージョンを選択 — 次節参照。 |
| WebDAV | 共有フォルダ向けに mod_dav を有効化。任意の Basic 認証ユーザ付きで、管理対象 include に書き込まれます。 |
| Edit MIME Types… | FrontierStack 管理の MIME ファイルに AddType マッピングを追加/削除。ディストリの mime.types には触れません。 |
コントロールとして出ていない項目には、設定行から Edit Managed Config…(FrontierStack の include)と Edit httpd.conf…(メインファイル)を直接編集できます。保存のたびに apachectl -t で検証し、グレースフルにリロードし、新しい設定が構文エラーならロールバックします — 誤った編集は、稼働中のサーバを壊す前に捕捉されます。
httpd.conf の手編集は強力で、無防備でもあります。アプリは構文エラーで検証・ロールバックしますが、構文は通るのに document root が誤った場所を指す設定は、なおファイルを露出させ得ます。FrontierStack 独自の追加は管理対象 include を優先し、大きな変更は控えを取ってください。モジュールを切り替えると、その LoadModule 行を書き換えて再検証します。変更で httpd -t が失敗した場合(代表例は proxy なしで proxy_fcgi を有効化するケース。アプリが自動で proxy も有効化します)、モジュールウィンドウはエラーを表示し、黙って閉じません。修正するか、Save anyway(このまま保存)を選びます。Apache が固まって起動しない場合(Homebrew の典型的な Bootstrap failed: 5: Input/output error。既にロード済み、または sudo brew services が httpd のパスを root 所有にしてしまったのが原因)、ペインの Recovery & reset(復旧とリセット)セクションに 3 段階の対処があります:Restart cleanly(ユーザとシステム両方の launchd ドメインで httpd を停止してから 1 回だけ起動)、Reset config to default(httpd.conf をバックアップして Homebrew の既定を復元)、Remove & Reinstall(root 所有のパスを消して formula を再インストール)。いずれもアプリ内コンソールで実行され、sudo プロンプトと出力を確認できます。Service Watchdog のキープアライブが Apache に対して有効な場合、httpd を自動で再起動することがあります(想定内ですが、手動復旧と競合するなら一時停止してください)。
4.3PHP バージョンの選択
PHP ペインを開くと、Mac にインストールされた PHP ランタイムを管理できます。Homebrew は複数のメジャーバージョン(例:[email protected] から最新版まで)を併存させられ、FrontierStack はそれらを、単一のグローバルインストールではなく、切り替える集合として扱います。
選択は 2 つに分かれます。
- Apache モジュール。Apache ペインの PHP Module セクションの Load for websites ピッカーで、Apache が読み込む
libphp.soのバージョンを選びます。変更すると管理対象設定を書き換えて Apache をリロードします。 - サイトごとの PHP。ローカル開発サーバ(下記 Localhost ペイン)には独自の PHP Version・PHP Binary 欄があり、あるプロジェクトを古い PHP で、別を最新で動かせます — マシンの他の部分が使うものを変えずに。旧来アプリと新規アプリを同時に成り立たせる、いつもの方法です。
Runtime Health ペインはより広い全体像を示します — PHP に加え Python・Node.js・Java・Go・Rust・Ruby・Perl・.NET — 欠落やサポート終了のランタイムを、問題になる前にフラグするセルフチェック付きです。
Runtimes セクションにはフロントエンド向けの React ペインもあります。新規アプリのスキャフォールド(Vite・TanStack Start・Next.js)、任意の React プロジェクトの指定、そして役割別に整理された厳選ライブラリ一覧を提供します — 状態管理(Zustand・Jotai・Redux Toolkit)、データ取得とサーバ状態(TanStack Query — 旧称 React Query — と SWR)、フルスタックフレームワーク(TanStack Start・Next.js)、ルーティング、バリデーション(ArkType・Zod)、フォーム、認証(Clerk)。各行にはドキュメントへのリンク、選択中プロジェクトでの使用状況、そのプロジェクトへのワンクリック npm install が並びます。
4.4サイトとバーチャルホスト
Apache ペインの Websites リストがバーチャルホストの管理場所です。各行にサイト名、バインドアドレス、ポート(例::8080)、そしてライブ状態を示す Running トグルが表示されます。ボタンで Add Site…、編集、複製、無効化、Push to Server…(連携サーバへ vhost をコピー)、ブラウザで開く、が行えます。Import Sites… と Copy from… は、MAMP・XAMPP・Apple の Server.app・別の Apache から既存 vhost を取り込み、既定で localhost にバインドします。
サイトの追加・編集では、vhost が必要とする要点を設定します。ServerName(ドメイン)、document root(フォルダを Choose…)、バインドのアドレスとポート。サイトを有効化するとライブ状態ドット付きで一覧に現れます。FrontierStack は vhost を管理対象ツリー下の .conf ファイルに書き込み、検証し、リロードします。vhost・証明書・Cloudflare DNS レコードをまとめて作るには New Site + DNS… を使います — 第 7 章で解説する一括ウィザードです。
127.0.0.1 にバインドすれば、Mac からしか到達できません — 作業中の最も安全な既定です。他のマシンから本当に到達させたいときだけ、バインドアドレスを 0.0.0.0 や LAN IP に変えてください。4.5サイトの TLS 証明書
Certificates ペインは、サイトに鍵マークを付ける証明書を発行・管理します。用途に応じた 3 つの方法があります。
| 方法 | 用途 |
|---|---|
| mkcert(Get Certificate (mkcert)) | 信頼されたローカル HTTPS。mkcert は Mac が信頼するローカル認証局をインストールするので、https://myapp.test がブラウザ警告なしで動きます — 開発に最適。Install mkcert でまず準備します。 |
| Let’s Encrypt (ACME) | 実ドメイン向けの、公開・ブラウザ信頼の証明書。acme.sh または certbot 経由。webroot(ドメインが既に HTTP を提供)または Cloudflare 経由の DNS-01(インバウンド HTTP 不要)で発行。Renew All Now と更新 cron で最新に保ちます。 |
| Create Self-Signed Certificate | ブラウザ警告が許容される内部用・テスト用の手早い証明書。 |
発行後、Deploy to Apache が証明書をサイトの vhost に組み込みます。Expiry Monitoring セクションは証明書(および Watch で追加した任意のドメイン)を監視し、期限切れの十分前に通知します — HSTS や最新の暗号方針を含むより深い堅牢化は第 10 章です。
CF_TOKEN ボールトシークレットとして保存され、実行時に注入されます。クラウド AI には決して送られません。4.6.htaccess エディタ
ディレクトリ単位の Apache ルール(リライト・リダイレクト・アクセス制御)は .htaccess ファイルに置かれます。FrontierStack はそれ専用のエディタを、行番号と構文の妥当性チェック付きで提供します。Use Site Root でサイトの document-root の .htaccess を開くか、custom path を指定します。Insert Recipe は、よくある正しいスニペット(フロントコントローラのリライト、HTTPS 強制ブロック)を挿入するので、記憶ではなく動くルールから始められ、保存前に明らかな問題をフラグします。Export PHP Router… は .htaccess のリライトルールを、組み込み PHP 開発サーバ用のルータファイルに変換します — サイトを Localhost ペインに移すときに便利です。
4.7Nginx とリバースプロキシ
FrontierStack は Nginx を、代替の Web サーバとして、またはアプリの前段のリバースプロキシとして管理します。両方がインストールされていると、Domains ビューはサイトをサーバごとに分類し — Apache のバーチャルホストと Nginx の server ブロックを並べて — 各 Nginx server ブロックの listen ポート・root・TLS 状態を読み取ります。リバースプロキシは、高位ポートで HTTP を話すアプリ(Node・.NET・Python のサービス)の前に立てる標準パターンです。Nginx が 443 で TLS を終端し、アプリへ転送します。Apache も Nginx も既定で 80/443 を欲しがるため、併用する場合は Apache ペインの Ports セクションで一方をそこから外してください。
4.8Localhost・DNS・開発スタック
ローカルの全体像を完成させる、もう 3 つのペインがあります。
- Localhost — 即席のローカル開発サーバのマネージャ。New Local Server を追加し、Runtime(PHP・Python/Django・Node/Vite…)とフォルダを選び、ポートと任意の
ServerNameを設定して Start。サーバごとの Environment Globals と .test リゾルバでmyapp.testがローカルに解決されます。Free Port ヘルパーと localhost を掴んでいるものを止める操作で、よくある競合を解消します。 - DNS — ローカルの名前解決と権威ホスティング。
dnsmasq・unbound・nsdを実行し、ゾーンファイルをインポート/エクスポートし、レコード変更時にリゾルバをフラッシュして、Mac が古い応答を返さないようにします。 - LAMP / DevStacks — ワンクリックのスタック。LAMP ペインはプリセット(Choose a Setup)を提供し、揃ったコンポーネント一式をまとめてインストール・起動(Install & Start・Start All・Stop All)。DevStacks はプロジェクトフォルダのフレームワークを検出し、それを動かす適切なコマンドと npm スクリプトを表示します。
Localhost の概観は、稼働中のローカルサーバをすべて並べて表示するので、世話の焼ける Terminal ウィンドウの壁なしに、多数のサイトを同時に動かせます。
vhost_create はバーチャルホストを作り、reload_webserver は Apache または Nginx を検証してグレースフルにリロードし、issue_certificate は Let’s Encrypt 証明書を取得します。いずれも変更を伴うツールなので、それぞれ承認カードを表示し、変更の有効化を必要とします — AI はこれらのペインであなたが行うことを正確に行い、許可されていないことは一切しません。FrontierStack ユーザマニュアル · バージョン 1.0.0 · 第 4