手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 Podman phpIPAM 環境構築

目次に戻る

Overview

Podman を使用して phpIPAM を構築します。一般的に docker-compose を使用して構築されるようですが、今回は Podman なので Pod を使用するようにこちらを読み替えて手順化しています。

なお、この構築方法にはホストキャンで「0 new hosts discovered!」と表示される問題があります。コンテナで作成しているからかもしれませんが継続調査中です。

上記について、–privilegedをつけて起動するとホストスキャンが実行できるため、capabilityの問題であることがわかりました。ただ、–privilegedではセキュリティの問題があるため、最低限、–cap-add NET_RAW –cap-add NET_ADMINを付与することで解決しました。あとで全体的に整理します。

Pod

最初に Pod を作成します。今回は 10001 ポートを phpipam-www (外部に公開するコンテナ) に転送します。

myadmin@ubuntu:~$ sudo podman pod create -n phpipam-pod -p 10001:443
myadmin@ubuntu:~$ sudo podman pod ls

MariaDB

MariaDB コンテナを作成します。

myadmin@ubuntu:~$ sudo podman run -d --pod phpipam-pod --name phpipam-mariadb \
-e 'TZ=Asia/Tokyo' \
-e 'MYSQL_ROOT_PASSWORD=password' \
-v phpipam-db-data:/var/lib/mysql \
docker.io/library/mariadb
myadmin@ubuntu:~$ sudo podman ps
myadmin@ubuntu:~$ sudo podman volume ls

phpipam-www

phpipam-www コンテナを作成します。

ディレクトリの作成とファイルの配置

設定ファイル関連は bint mount にします。TLS 証明書を配置( TLS 証明書の作成はこちらを参照)します。Apache の設定ファイルを作成しています。

myadmin@ubuntu:~$ sudo mkdir -p /opt/container/phpipam/phpipam/apache2/conf.d
myadmin@ubuntu:~$ sudo cp /home/myadmin/work/easy-rsa/pki/{issued/si1230.com.crt,private/si1230.com.key} /opt/container/phpipam/phpipam/apache2/conf.d
myadmin@ubuntu:~$ sudo tee /opt/container/phpipam/phpipam/apache2/conf.d/ssl.conf <<"EOF"
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect builtin
Listen 443
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES:!ADH
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES:!ADH
SSLHonorCipherOrder on 
SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/var/cache/mod_ssl/scache(512000)"
SSLSessionCacheTimeout 300
<VirtualHost _default_:443>
    DocumentRoot "/var/www/localhost/htdocs"
    ServerName phpipam.si1230.com:443
    ServerAdmin webmaster@si1230.com
    ErrorLog logs/ssl_error.log
    TransferLog logs/ssl_access.log
    SSLEngine on
    SSLCertificateFile /etc/apache2/conf.d/si1230.com.crt
    SSLCertificateKeyFile /etc/apache2/conf.d/si1230.com.key
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory "/var/www/localhost/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
    BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
    CustomLog logs/ssl_request.log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
EOF

コンテナの実行

phpipam-web コンテナを実行します。

myadmin@ubuntu:~$ sudo podman run --cap-add NET_RAW --cap-add NET_ADMIN -d --pod phpipam-pod --name phpipam-web \
-e 'TZ=Asia/Tokyo' \
-e 'IPAM_DATABASE_HOST=127.0.0.1' \
-e 'IPAM_DATABASE_PASS=password' \
-e 'IPAM_DATABASE_WEBHOST=%' \
-v phpipam-logo:/phpipam/css/images/logo \
-v phpipam-ca:/usr/local/share/ca-certificates:ro \
-v /opt/container/phpipam/phpipam/apache2/conf.d/si1230.com.crt:/etc/apache2/conf.d/si1230.com.crt:ro \
-v /opt/container/phpipam/phpipam/apache2/conf.d/si1230.com.key:/etc/apache2/conf.d/si1230.com.key:ro \
-v /opt/container/phpipam/phpipam/apache2/conf.d/ssl.conf:/etc/apache2/conf.d/ssl.conf:ro \
docker.io/phpipam/phpipam-www
myadmin@ubuntu:~$ sudo podman ps
myadmin@ubuntu:~$ sudo podman volume ls

phpipam-cron

phpipam-cron コンテナを作成します。

myadmin@ubuntu:~$ sudo podman run --cap-add NET_RAW --cap-add NET_ADMIN -d --pod phpipam-pod --name phpipam-cron \
-e 'TZ=Asia/Tokyo' \
-e 'IPAM_DATABASE_HOST=127.0.0.1' \
-e 'IPAM_DATABASE_PASS=password' \
-e 'SCAN_INTERVAL=1h' \
-v phpipam-ca:/usr/local/share/ca-certificates:ro \
docker.io/phpipam/phpipam-cron
myadmin@ubuntu:~$ sudo podman ps

phpIPAM へのアクセス確認

以下で phpIPAM にアクセスできます(DNS や hostsに事前に登録しておく)。TLS のため、FQDN でアクセスすべき(ブラウザで警告が出るため)ですが、IP アドレスでも問題はありません。初回アクセス時に phpIPAM のインストーラーが起動します。インストーラーの操作は、このようなアプリケーションの構築に慣れていればそれほど悩むことではないと思いますので省略します。

https://phpipam.si1230.com:10001

systemd

systemd で phpIPAM を管理します。

systemd ユニットファイル

systemd ユニットファイルを生成します。コマンドオプションはいくつかありますが、通常は以下で十分でしょう。

myadmin@ubuntu:~$ cd /etc/systemd/system && sudo podman generate systemd -f -n phpipam-pod && cd
/etc/systemd/system/pod-phpipam-pod.service
/etc/systemd/system/container-phpipam-cron.service
/etc/systemd/system/container-phpipam-web.service
/etc/systemd/system/container-phpipam-mariadb.service

systemd ユニットファイルの有効化

systemd を再起動して、追加したユニットファイルを読み込みます。

myadmin@ubuntu:~$ sudo systemctl daemon-reload

systemd を使用した Podman の操作

systemd から phpipam-pod を操作してみます。

myadmin@ubuntu:~$ sudo systemctl status pod-phpipam-pod.service
myadmin@ubuntu:~$ sudo systemctl start pod-phpipam-pod.service
myadmin@ubuntu:~$ sudo systemctl stop pod-phpipam-pod.service
myadmin@ubuntu:~$ sudo systemctl restart pod-phpipam-pod.service

systemd の自動起動設定

システム起動時に phpipam-pod が起動するように systemd を設定します。

myadmin@ubuntu:~$ sudo systemctl enable pod-phpipam-pod.service
myadmin@ubuntu:~$ sudo systemctl is-enabled pod-phpipam-pod.service
enabled

クリーンアップ

これまでの環境をクリーンナップするコマンドです。

sudo rm /etc/systemd/system/pod-phpipam-*
sudo rm /etc/systemd/system/container-phpipam-*
sudo systemctl daemon-reload
sudo podman rm -f phpipam-cron phpipam-web phpipam-mariadb
sudo podman volume rm phpipam-ca phpipam-logo phpipam-db-data
sudo podman pod rm phpipam-pod
sudo rm -r /opt/container/phpipam

目次に戻る

Ubuntu 22.04 Podman phpIPAM 環境構築

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る