Contents
Overview
Podman を使用して GestioIP を構築します。当初、Netbox も候補ではあったのですが、コンテナでも結構複雑だったので、比較的、Podman でも動かしやすそうな GestioIP を試すことにしました。
docker-compose
調べてみると、一般的に docker-compose を使用して構築しているようです。今回は、Pod を使用したいため、一旦、GitHub から docker-compose.yml を入手して何をしているか確認します。
myadmin@ubuntu:~$ git clone https://github.com/muebel/gestioip-docker-compose myadmin@ubuntu:~$ cat gestioip-docker-compose/docker-compose.yaml version: "3.8" services: gip-mysql: image: mysql:5 container_name: gip-mysql networks: gip-net: ipv4_address: ${MYSQL_IP} command: --default-authentication-plugin=mysql_native_password restart: always environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_USER_PASSWORD} MYSQL_DATABASE: ${DB_SSID} MYSQL_USER: ${DB_USER} MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - ./mysql:/docker-entrypoint-initdb.d - ${DB_DATA_DIR}:/var/lib/mysql gip: image: gestioip/gestioip:3570 container_name: gip networks: gip-net: ipv4_address: ${GIP_IP} restart: always environment: DB_HOST: ${DB_HOST} DB_PORT: ${DB_PORT} DB_SSID: ${DB_SSID} DB_USER: ${DB_USER} DB_PASSWORD: ${DB_PASSWORD} BCK_USER_DISABLED: ${BCK_USER_DISABLED} BCK_USER: ${BCK_USER} BCK_USER_PASS: ${BCK_USER_PASS} USE_SSL: ${USE_SSL} SERVER_NAME: ${SERVER_NAME} volumes: - ./apache/certs:/etc/apache2/ssl/certs - ./apache/keys:/etc/apache2/ssl/keys - ./apache/conf:/usr/share/gestioip/etc/apache ports: - ${HOST_PORT}:${CONTAINER_PORT} networks: gip-net: ipam: driver: default config: - subnet: ${SUBNET} gateway: ${GATEWAY}
Pod
最初に Pod を作成します。今回は 10001 ポートを gestioip (外部に公開するコンテナ) に割り当てます。
myadmin@ubuntu:~$ sudo podman pod create -n gestioip-pod -p 10001:443 myadmin@ubuntu:~$ sudo podman pod ls POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS 132675ec7bc7 gestioip-pod Created 18 seconds ago 527c7dfb15a1 1
MySQL
MySQL コンテナを作成します。
ボリューム用ディレクトリ
MySQL の①初期データを配置するため、②データを永続化するために、コンテナからマウントするディレクトリを作成します。
myadmin@ubuntu:~$ sudo mkdir -p /opt/container/gestioip/mysql/sql myadmin@ubuntu:~$ sudo mkdir -p /opt/container/gestioip/mysql/db
初期データの配置
gestioip.sql を配置します。gestioip.sql は MySQL 起動時に読み込まれます。
myadmin@ubuntu:~$ sudo cp gestioip-docker-compose/mysql/gestioip.sql /opt/container/gestioip/mysql/sql
コンテナの実行
MySQL コンテナを実行します。
myadmin@ubuntu:~$ sudo podman run -d --pod gestioip-pod --name gestioip-mysql \ -e 'TZ=Asia/Tokyo' \ -e 'MYSQL_ROOT_PASSWORD=password' \ -e 'MYSQL_USER=gestioip' \ -e 'MYSQL_PASSWORD=password' \ -e 'MYSQL_DATABASE=gestioip' \ -v /opt/container/gestioip/mysql/sql:/docker-entrypoint-initdb.d \ -v /opt/container/gestioip/mysql/db:/var/lib/mysql \ docker.io/library/mysql --default-authentication-plugin=mysql_native_password myadmin@ubuntu:~$ sudo podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 03e352940a43 docker.io/library/mysql:latest --default-authent... 20 seconds ago Up 21 seconds ago 0.0.0.0:10001->10001/tcp gestioip-mysql
コンテナのログを確認します。
myadmin@ubuntu:~$ sudo podman logs gestioip-mysql
コンテナのタイムゾーンを確認します。
myadmin@ubuntu:~$ sudo podman exec gestioip-mysql date
Mon Jul 17 11:17:53 JST 2023
コンテナのシェルを起動します。
myadmin@ubuntu:~$ sudo podman exec -it gestioip-mysql bash
MySQL にログインし、デフォルトの文字セットの確認、gestioip ユーザーの確認、gestioip データベースの情報を確認しています。
bash-4.4# mysql -u root -p mysql> show variables like '%char%'; +--------------------------+--------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | utf8mb4 | | character_set_system | utf8mb3 | | character_sets_dir | /usr/share/mysql-8.0/charsets/ | +--------------------------+--------------------------------+ 8 rows in set (0.01 sec) mysql> select user,host,plugin from mysql.user; +------------------+-----------+-----------------------+ | user | host | plugin | +------------------+-----------+-----------------------+ | gestioip | % | mysql_native_password | | root | % | mysql_native_password | | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | mysql_native_password | +------------------+-----------+-----------------------+ 6 rows in set (0.00 sec) mysql> show create database gestioip; +----------+------------------------------------------------------------------------------------------------------------------------------------+ | Database | Create Database | +----------+------------------------------------------------------------------------------------------------------------------------------------+ | gestioip | CREATE DATABASE `gestioip` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ | +----------+------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> exit bash-4.4# exit
GestioIP
GestioIP コンテナを作成します。
ボリューム用ディレクトリ
GestioIP の TLS 証明書と設定ファイルを外部ボリュームで管理するために、コンテナからマウントするディレクトリを作成します。
myadmin@ubuntu:~$ sudo mkdir -p /opt/container/gestioip/gestioip/certs myadmin@ubuntu:~$ sudo mkdir -p /opt/container/gestioip/gestioip/keys myadmin@ubuntu:~$ sudo mkdir -p /opt/container/gestioip/gestioip/conf
TLS 証明書と設定ファイルの配置
TLS 証明書を配置(TLS 証明書の作成はこちらを参照)して、GestioIP (Apache) の設定ファイルを作成しています。
myadmin@ubuntu:~$ sudo cp /home/myadmin/work/easy-rsa/pki/issued/si1230.com.crt /opt/container/gestioip/gestioip/certs myadmin@ubuntu:~$ sudo cp /home/myadmin/work/easy-rsa/pki/private/si1230.com.key /opt/container/gestioip/gestioip/keys myadmin@ubuntu:~$ sudo cp gestioip-docker-compose/apache/conf/* /opt/container/gestioip/gestioip/conf
コンテナの実行
GestioIP コンテナを実行しますが、以下の通り、起動しません。調べてみると、gestioip は arm64 に対応していませんでした。一応他のリポジトリも見てみましたがないですね。私の今の環境は、Mac mini M2 上の Ubuntu 上の Podman です。多分、x86-64 環境であればこの方法で問題なく動くでしょう。でもできればこの環境で動かしたかったですね・・・
myadmin@ubuntu:~$ sudo podman run -d --pod gestioip-pod --name gestioip \ -e 'TZ=Asia/Tokyo' \ -e 'DB_HOST=127.0.0.1' \ -e 'DB_PORT=3306' \ -e 'DB_SSID=gestioip' \ -e 'DB_USER=gestioip' \ -e 'DB_PASSWORD=password' \ -e 'BCK_USER_DISABLED=yes' \ -e 'BCK_USER=gestioip-bck' \ -e 'BCK_USER_PASS=password' \ -e 'USE_SSL=yes' \ -e 'SERVER_NAME=gestioip.si1230.com' \ -v /opt/container/gestioip/gestioip/certs:/etc/apache2/ssl/certs \ -v /opt/container/gestioip/gestioip/keys:/etc/apache2/ssl/keys \ -v /opt/container/gestioip/gestioip/conf:/usr/share/gestioip/etc/apache \ docker.io/gestioip/gestioip:3570 myadmin@ubuntu:~$ sudo podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 63648bd2a6aa docker.io/gestioip/gestioip:3570 /bin/sh -c /usr/s... 6 minutes ago Exited (1) 6 minutes ago 0.0.0.0:10001->443/tcp gestioip