手当たり次第に書くんだ

飽きっぽいのは本能

Podman GROWI 環境構築

目次に戻る

Overview

GROWI は、MIT ライセンスで公開されているオープンソースのウィキソフトウェアです。日本の WESEEK という会社のエンジニアが開発しています。本稿では Podman を使用して GROWI を構築します。コンテナで GROWI を構築する場合、公式サイト Git でも Docker Compose を使用していますので、その内容をPodmanに置き換えて手順化しています。

Pod

最初に Pod を作成します。今回は 10003 ポート Nginx (外部に公開するコンテナ) に割り当てます。Nginx は GROWI を TLS で公開するために使用します。

myadmin@ubuntu:~$ sudo podman pod create -n growi-pod -p 10003:10003
myadmin@ubuntu:~$ sudo podman pod ls

MongoDB

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

myadmin@ubuntu:~$ sudo podman run -d --pod growi-pod --name growi-mongo \
-e 'TZ=Asia/Tokyo' \
-v growi-mongo-configdb:/data/configdb \
-v growi-mongo-db:/data/db \
docker.io/library/mongo
myadmin@ubuntu:~$ sudo podman ps && sudo podman volume ls

Elasticsearch

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

Build

Docker Compose では、公式の Elasticsearch に analysis-kuromoji と analysis-icu を追加して Build していますので、本稿もそれに倣います。また、同じくコンテナの実行時に elasticsearch.yml を書き換えていますが、Bind Mount を使いたくないため、Build のタイミングで書き換えています(理由は調べる必要がありますがこの設定がないと GROWI が正常に起動しません)。

myadmin@ubuntu:~$ sudo mkdir -p /opt/container/growi/elasticsearch/config
myadmin@ubuntu:~$ sudo tee /opt/container/growi/elasticsearch/config/elasticsearch.yml <<"EOF"
http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.security.enabled: false
EOF
myadmin@ubuntu:~$ sudo tee /opt/container/growi/elasticsearch/Containerfile <<"EOF"
FROM docker.io/library/elasticsearch:8.7.0
RUN bin/elasticsearch-plugin install analysis-kuromoji
RUN bin/elasticsearch-plugin install analysis-icu
COPY config/elasticsearch.yml /usr/share/elasticsearch/config
EOF
myadmin@ubuntu:~$ cd /opt/container/growi/elasticsearch
myadmin@ubuntu:~$ sudo podman build -t growi-elasticsearch .
myadmin@ubuntu:~$ sudo podman images

コンテナの実行

Elasticsearch コンテナを実行します。

myadmin@ubuntu:~$ sudo podman run -d --pod growi-pod --name growi-elasticsearch \
-e 'TZ=Asia/Tokyo' \
-e 'bootstrap.memory_lock=true' \
-e 'ES_JAVA_OPTS=-Xms256m -Xmx256m' \
-e 'LOG4J_FORMAT_MSG_NO_LOOKUPS=true' \
-v growi-elasticsearch-data:/usr/share/elasticsearch/data \
--ulimit memlock=-1:-1 \
localhost/growi-elasticsearch
myadmin@ubuntu:~$ sudo podman ps && sudo podman volume ls

GROWI

GROWI コンテナを作成します。Docker Compose では dockerize を組み込んで Build していますが、無くても問題ないようなので、あえてそのまま実行しています。

myadmin@ubuntu:~$ sudo podman run -d --pod growi-pod --name growi \
-e 'TZ=Asia/Tokyo' \
-e 'MONGO_URI=mongodb://127.0.0.1:27017/growi' \
-e 'ELASTICSEARCH_URI=http://127.0.0.1:9200/growi' \
-e 'PASSWORD_SEED=password' \
-v growi-data:/data \
docker.io/weseek/growi:6
myadmin@ubuntu:~$ sudo podman ps && sudo podman volume ls

Nginx

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

Volume

Nginx の設定ファイルと TLS 証明書を Nginx に読み込ませるため、コンテナからマウントする Volume を作成します。コンテナの生成時にも自動生成されるため、このタイミングでの作成は必須ではありません。

myadmin@ubuntu:~$ sudo podman volume create growi-nginx-conf.d
myadmin@ubuntu:~$ sudo podman volume ls

設定ファイルと TLS 証明書の配置

TLS 証明書を配置( TLS 証明書の作成はこちらを参照)して、Nginx の設定ファイルを作成しています。本稿での Nginx はリバースプロキシとして使用します。http://127.0.0.1:3000 は GROWI コンテナのポート番号です。

myadmin@ubuntu:~$ sudo cp /home/myadmin/work/easy-rsa/pki/{issued/si1230.com.crt,private/si1230.com.key} /var/lib/containers/storage/volumes/growi-nginx-conf.d/_data
myadmin@ubuntu:~$ sudo tee /var/lib/containers/storage/volumes/growi-nginx-conf.d/_data/proxy.conf <<"EOF"
server {
    listen 10003 ssl;
    server_name growi.si1230.com;
    ssl_certificate /etc/nginx/conf.d/si1230.com.crt;
    ssl_certificate_key /etc/nginx/conf.d/si1230.com.key;
    location / {
        proxy_pass http://127.0.0.1:3000;
    }
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
}
EOF

コンテナの実行

Nginx コンテナを実行します。

myadmin@ubuntu:~$ sudo podman run -d --pod growi-pod --name growi-nginx \
-e 'TZ=Asia/Tokyo' \
-v growi-nginx-conf.d:/etc/nginx/conf.d \
docker.io/library/nginx
myadmin@ubuntu:~$ sudo podman ps

GROWI へのアクセス確認

以下で GROWI にアクセスできます。

https://growi.si1230.com:10003

systemd

systemd で GROWI を制御します。

systemd ユニットファイル

systemd ユニットファイルを作成します。

myadmin@ubuntu:~$ cd /etc/systemd/system && sudo podman generate systemd -f -n growi-pod

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

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

myadmin@ubuntu:~$ sudo systemctl daemon-reload

起動設定

システムの起動時に自動的に起動させます。

myadmin@ubuntu:~$ sudo systemctl enable --now pod-growi-pod.service
myadmin@ubuntu:~$ sudo systemctl status pod-growi-pod.service

環境初期化

必要に応じて、これまでに構築した内容を削除します。

myadmin@ubuntu:~$ sudo podman ps | grep 'growi' | awk '{print $1}' | xargs sudo podman rm -f && \
sudo podman volume ls | grep 'growi' | awk '{print $2}' | xargs sudo podman volume rm -f && \
sudo podman pod ps | grep 'growi' | awk '{print $1}' | xargs sudo podman pod rm -f && \
sudo rm -r /opt/container/growi

目次に戻る

Podman GROWI 環境構築

コメントを残す

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

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

トップへ戻る