phpIPAM は IP アドレス管理用の Web アプリケーションです。Podman で動かす場合は、Web コンテナ、cron コンテナ、DB コンテナを 1 つの pod にまとめると、同じネットワーク名前空間で扱いやすくなります。
この記事では、Ubuntu 22.04 上の Podman で phpIPAM を検証用に起動し、MariaDB、phpIPAM Web、phpIPAM cron、永続化、HTTPS ポート公開、systemd 化の基本を確認します。
関連する記事
この記事で確認すること
- phpIPAM を Podman pod として起動する構成
- MariaDB、Web、cron コンテナの役割分担
- データ永続化ディレクトリの作成
- HTTPS ポート公開と初期画面の確認
- pod 単位の systemd 化
phpIPAM を Podman で動かす構成
phpIPAM は Web アプリケーション本体と DB が必要です。Podman pod を使うと、複数コンテナを同じ localhost 上で接続できます。
| コンテナ | 役割 | 確認対象 |
phpipam-mariadb | phpIPAM 用 DB | 永続化、認証情報 |
phpipam-www | Web UI | HTTPS 応答、DB 接続 |
phpipam-cron | 定期処理 | ログ、DB 接続 |
前提を確認する
Podman が導入済みで、現在のユーザーから rootless 実行できる状態を前提にします。
podman --version
podman info
podman pod psデータ用ディレクトリを作成する
DB データをホスト側に残すため、永続化用ディレクトリを作成します。rootless 実行では、実行ユーザーが読み書きできる権限にします。
sudo install -d -m 0750 -o "$USER" -g "$USER" /opt/container/phpipam
install -d /opt/container/phpipam/mariadb
ls -ld /opt/container/phpipam /opt/container/phpipam/mariadbPod を作成する
phpIPAM の Web、cron、DB を同じ pod に入れます。外部公開はホスト側の 10000 番を pod 内の 443 番へ対応させます。
podman pod create \
--name phpipam-pod \
-p 10000:443
podman pod psMariaDB を起動する
DB コンテナを先に起動します。パスワードは検証用の例なので、実運用では十分に強い値へ変更します。
podman run -d --pod phpipam-pod \
--name phpipam-mariadb \
-e MYSQL_ROOT_PASSWORD='change-me-root' \
-e MYSQL_DATABASE=phpipam \
-e MYSQL_USER=phpipam \
-e MYSQL_PASSWORD='change-me' \
-v /opt/container/phpipam/mariadb:/var/lib/mysql:Z \
docker.io/library/mariadb:10.11
podman logs phpipam-mariadbphpIPAM Web を起動する
Web コンテナは同じ pod 内の 127.0.0.1 で MariaDB に接続します。ping やスキャン機能を使う場合は、必要な capability を検討します。
podman run -d --pod phpipam-pod \
--name phpipam-www \
--cap-add NET_RAW \
--cap-add NET_ADMIN \
-e IPAM_DATABASE_HOST=127.0.0.1 \
-e IPAM_DATABASE_USER=phpipam \
-e IPAM_DATABASE_PASS='change-me' \
-e IPAM_DATABASE_NAME=phpipam \
docker.io/phpipam/phpipam-www:latest
podman logs phpipam-wwwphpIPAM cron を起動する
phpIPAM の定期処理用に cron コンテナも起動します。Web コンテナと同じ DB 接続情報を指定します。
podman run -d --pod phpipam-pod \
--name phpipam-cron \
--cap-add NET_RAW \
--cap-add NET_ADMIN \
-e IPAM_DATABASE_HOST=127.0.0.1 \
-e IPAM_DATABASE_USER=phpipam \
-e IPAM_DATABASE_PASS='change-me' \
-e IPAM_DATABASE_NAME=phpipam \
docker.io/phpipam/phpipam-cron:latest
podman logs phpipam-cron起動状態を確認する
pod と各 container の状態を確認します。Web UI は自己署名証明書で応答する構成が多いため、検証では -k を付けて HTTP ヘッダーを確認します。
podman pod ps
podman ps --pod
curl -kI https://127.0.0.1:10000/ログを確認する
初期設定画面が表示されない場合は、Web、cron、DB のログを分けて確認します。特に DB 接続情報の不一致は起動後に気づきやすいポイントです。
podman logs phpipam-www
podman logs phpipam-cron
podman logs phpipam-mariadbブラウザで初期設定する
ブラウザから https://ホスト名:10000/ にアクセスし、phpIPAM の初期設定を進めます。公開範囲を広げる前に、管理者パスワードと DB 接続が正しく設定されていることを確認します。
- 初期パスワードは導入後すぐ変更する
- 外部公開前に TLS 終端とアクセス制御を決める
- DB データのバックアップ対象を明確にする
- 検証用パスワードを運用へ持ち込まない
systemd unit を生成する
継続運用する場合は、pod 単位で systemd unit を生成します。rootless で運用する場合はユーザー unit として管理する方法も検討します。
podman generate systemd --new --name phpipam-pod > container-phpipam-pod.service
sudo install -m 0644 container-phpipam-pod.service /etc/systemd/system/container-phpipam-pod.service
sudo systemctl daemon-reload
sudo systemctl enable --now container-phpipam-pod.service
systemctl status container-phpipam-pod.service --no-pager停止と削除
検証を終了する場合は、systemd unit を止めてから pod を削除します。DB データを残すか削除するかは別に判断します。
sudo systemctl disable --now container-phpipam-pod.service
podman pod rm -f phpipam-pod
podman pod ps
ls -ld /opt/container/phpipam/mariadb運用時に見るポイント
phpIPAM は IP アドレス管理のデータを持つため、コンテナの起動だけでなく DB の永続化、バックアップ、公開範囲、認証情報の管理を合わせて確認します。
- DB データの永続化先をバックアップ対象にする
- Web UI の公開範囲を制限する
- 検証用パスワードを残さない
- cron コンテナのログも確認する
- Podman の rootless / rootful のどちらで運用するかを決める
まとめ
Ubuntu 22.04 の Podman で phpIPAM を動かす場合、Web、cron、DB を 1 つの pod にまとめると、DB 接続を pod 内の localhost として扱えます。
構築後は、Web UI の応答、DB 永続化、cron の動作、systemd unit、バックアップ対象を確認します。検証用の値をそのまま運用へ持ち込まないことも重要です。

