インストール
1 コマンドでゼロから稼働ノードまで
Docker Compose を推奨します。1 コマンドでコントロールプレーン、内蔵エージェント、PostgreSQL を起動します。systemd 管理のバイナリが必要な場合はスクリプトインストールを利用できます。
curl -fsSL https://raw.githubusercontent.com/shuaiZend/PingWAF/main/deploy/compose/install.sh | bash コマンドビルダー
インストールコマンドを組み立てる
Docker Compose を既定で選択しています。1 コマンドでデータベース込みで起動します。項目は既定値が入っているので、変更が必要な箇所だけ編集してください。スクリプトインストールは 2 つ目のタブにあります。
Docker Compose
Docker Compose でデプロイ
Docker Compose が公式推奨です。1 コマンドでコントロールプレーン、内蔵エージェント、PostgreSQL を起動し、データと証明書は名前付きボリュームに保存します。更新はイメージタグの変更だけです。
- Docker Engine 24+ と Compose v2 プラグイン(docker compose。旧 docker-compose コマンドではない)。
- ホストの 80・443・9080・9090 ポートが空いていること — または下のフィールドで変更できます。
- 外部データベースは不要:compose ファイルには PostgreSQL 16 コンテナが同梱され、名前付きボリュームで永続化されます。
- ダッシュボードは初回起動時、自己署名証明書で HTTPS を提供します。「設定 → Control plane HTTPS」から正式な証明書をアップロードするか、TLS_ENABLED=false で平文 HTTP にできます。
curl -fsSL https://raw.githubusercontent.com/shuaiZend/PingWAF/main/deploy/compose/install.sh | bash
空のディレクトリで実行してください。インストーラは docker-compose.yml を取得し、本人のみ読み取り可能な .env を書き込み、イメージを取得して起動します。既存の .env は上書きしません(アップグレードは同じコマンドを再実行)。
- 1
ワンコマンドを実行
空のディレクトリで上のコマンドを実行します。インストーラが ./pingwaf を作成し、compose ファイルを取得して私有 .env を書き込みます。
- 2
起動を待つ
Compose がイメージを取得し、PostgreSQL を起動してヘルスチェック後に PingWAF を起動します。初回は 1〜2 分かかります。
- 3
コンソールにログイン
https://<ホスト>:9080 を開き、ADMIN_EMAIL / ADMIN_PASSWORD でログインします(既定パスワードは初回ログイン時に変更が必須)。その後サイトを追加します。
カスタマイズする場合:オプション付きコマンドを生成
変更が必要な項目だけ入力してください。既定値と異なるオプションだけが追加されます。管理者パスワードはコマンドに含めません。
curl -fsSL https://raw.githubusercontent.com/shuaiZend/PingWAF/main/deploy/compose/install.sh | bash
初回ログイン:https://<ホスト>:9080 に上記の ADMIN_EMAIL / ADMIN_PASSWORD でサインイン(正式な証明書をアップロードするまで自己署名の警告を受け入れてください)。Agent は :9090 でコントロールプレーンに接続します。
アップグレード
.env のタグのイメージを取得し、同じボリュームでコンテナを再作成します — 設定・データ・証明書は再起動後も保持されます。計画的なアップグレードにはタグを固定してください。
docker compose pull && docker compose up -d
インストーラーの既定値で事前入力済み — 変更した値だけがコマンドに追加されます。
curl -fsSL https://raw.githubusercontent.com/shuaiZend/PingWAF/main/deploy/compose/install.sh | bash
API キーはコマンド中に平文で現れ、シェル履歴に残る可能性があります。代わりに PINGWAF_API_KEY をエクスポートするか、インストーラーを対話実行して尋ねられたときに貼り付けてください。
既定値と異なる値だけがフラグとして追加されるため、未編集のままでは最短のワンライナーが生成されます。引数は bash -s -- でパイプ先のスクリプトに渡されます。
対話式インストール
あるいはインストーラーに質問させる
フラグなしでターミナルからスクリプトを実行すると、モード・認証情報・データベース・証明書名を順に尋ね、確定した計画を表示して確認を待ちます。
-
デプロイモードを選ぶ
1 all-in-one、2 server、3 agent — Enter で括弧内の既定値を受け入れます。
-
パラメーターを入力する
agent はコントロールプレーン URL と登録キーを、server モードは管理者アカウント・PostgreSQL URL・証明書名を尋ねます。シークレットは入力中も表示されません。
-
サマリーを確認する
何かを書き込む前に、インストーラーは確定済みの計画(モード・バージョン・プラットフォーム・パス・systemd の状態・マスク済みのデータベース URL)を表示します。
-
完了して確認する
server モードは起動コマンドを表示し、agent は自動で有効化・起動されます。ダッシュボードの「ノード」でノードを確認してください。
フラグ早見表
インストーラーのフラグ一覧
install.sh が受け付けるすべてのフラグ。それぞれに対応する PINGWAF_* 環境変数があります。
--mode 動作モード:all-in-one、server、agent。既定は all-in-one です。
--version 指定バージョンをインストールします(先頭の v は取り除かれます)。空欄または 'latest' で最新の GitHub リリースを解決します。
--db-url server/all-in-one 用の PostgreSQL 接続文字列。既定は postgres://pingwaf:pingwaf@localhost:5432/pingwaf です。
--server-url agent モード用のコントロールプレーン gRPC URL。https:// を使ってください — gRPC は既定で TLS で提供されます。
--api-key Agent の登録トークン。コマンドラインに残さないため PINGWAF_API_KEY として渡すこともできます。
--admin-email 初期投入される管理者メールアドレス(server/all-in-one)。既定は admin@pingwaf.local です。
--admin-password 初期投入される管理者パスワード(server/all-in-one)。空欄なら pingwaf123 が使われ、コンソールが初回ログイン時に変更を強制します。
--tls-sans 生成されるダッシュボード証明書がカバーすべきホスト名をカンマ区切りで指定します。
--no-systemd systemd ユニットの作成をスキップします — コンテナ・アップグレード・手動のプロセス管理向けです。
--interactive / --non-interactive フラグがあっても質問を強制する、または一切質問せず指定値と既定値で実行します。フラグなしのパイプ実行は非対話のままです。
--dry-run 確定済みの計画(モード・バージョン・プラットフォーム・パス)を表示して、インストールせずに終了します。
トラブルシューティング
インストールがきれいに終わらないとき
サポートで最もよく見られる 5 つの失敗と、それぞれを特定するためのコマンド。
インストーラーが PostgreSQL に接続できない
all-in-one と server モードは初回起動前に PostgreSQL 14+ が必要です。psql が接続できない場合スクリプトは警告を出します — サーバーをインストールし、pingwaf ユーザーとデータベースを作成し(createuser / createdb)、インストーラーを再実行するか、/etc/pingwaf/pingwaf.toml を編集して systemctl restart pingwaf を実行してください。
0.0.0.0:80 や :443 で bind() failed になる
データプレーンは非特権ユーザー pingwaf として 80/443 をバインドします。これはユニットが CAP_NET_BIND_SERVICE を付与しているからこそ機能します。それでもバインドに失敗する場合は、systemctl show pingwaf -p AmbientCapabilities で確認し、drop-in で能力を追加してください:sudo systemctl edit pingwaf → [Service] AmbientCapabilities=CAP_NET_BIND_SERVICE。付与前に書かれた古いユニットは、drop-in を追加するまで失敗し続けます。
バイナリがバージョン付き glibc シンボルのエラーで失敗する
リリース成果物は Ubuntu 24.04 でビルドされており、glibc 2.39 以上が必要です。より古いディストリビューション(Debian 11、Ubuntu 20.04、CentOS/RHEL、Alpine など)ではインストーラーのスモークテストが明確なメッセージとともに停止します — 代わりにソースからビルドしてください。
systemd サービスが起動しない
journalctl -u pingwaf -e でユニットのログを確認し、/etc/pingwaf/pingwaf.toml を見直してください。リロードはありません。変更は systemctl restart pingwaf で適用し、その後 systemctl status pingwaf で確認します。
コンテナの起動が "bind() failed on 0.0.0.0:443" / Permission denied で失敗する
イメージはビルド時にバイナリへ CAP_NET_BIND_SERVICE を付与済みのため、デフォルトのブリッジモードでは非特権ユーザー pingwaf が通常の docker run や docker compose up -d で 80/443 をバインドできます。それでも失敗する場合は、実行環境がファイル能力を剥奪しています — --cap-add=NET_BIND_SERVICE を追加するか(同梱の compose ファイルにはすでに cap_add が設定されています)、host ネットワーク network_mode: host に切り替えてください(その場合は ports: と networks: の両方をコメントアウトし、9080/9090 はホスト上で直接リッスンします)。docker exec pingwaf getcap /usr/local/bin/pingwaf(cap_net_bind_service=ep と表示されるはずです)と docker exec pingwaf id -u(非ゼロ)で確認できます。詳細:https://github.com/shuaiZend/PingWAF/blob/main/docs/deployment.md#binding-ports-80443-in-containers
インストール完了。次は最初のサイトを追加しましょう。
ドキュメントでは、サイトモデル、分散トポロジー、設定の優先順位、環境変数の完全なリファレンスを解説しています。