手当たり次第に書くんだ

飽きっぽいのは本能

Podman GestioIP 環境構築

目次に戻る

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

目次に戻る

Podman GestioIP 環境構築

コメントを残す

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

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

トップへ戻る