MattermostのコンテナをOCIのAmpere A1で実行してみる

OCIのARMインスタンスの無料枠で、podmanなコンテナのMattermostサーバを実行したかった。
んだけど、Mattermostの公式イメージはarmアーキテクチャに対応していなかった(2023年7月28日時点)ため、自分でビルドしてデプロイした。

はじめに

想定しているユーザレベル

分からないことがあれば自分でググる程度のユーザを想定

VCNの設定

仮想クラウドネットワークのセキュリティリストで、80番と443番のポートを開放しておくこと。
※SSLで22番以外のポートを使用する場合は、該当のポートも開放しておくこと。

実行環境等

インスタンス

Oracle Cloud Infrastructure
OCI Ampere A1 Compute  Always Free 
AlmaLinux OS 9.2.20230516 AArch64

主要なアプリケーション

Podman
docker-compose
Nginxのコンテナ
PstogreSQLのコンテナ
Mattermost Teamエディション

手順

初期設定

以下、コンソールでの作業。
sshクライアントは、お好みのもので。

rootのパスワードを設定

sudo passwd root

以下の作業はsuで行う
(ルートレスの設定が面倒だった)

su

タイムゾーンをJSTに変更

timedatectl status
timedatectl set-timezone Asia/Tokyo
timedatectl status

anacronからcronに切り替え

dnf -y install cronie-noanacron
dnf -y remove cronie-anacron

nanoをインストール(viやvimを使う人は、その方向で)

dnf -y install nano
export VISUAL=/usr/bin/nano
export EDITOR=/usr/bin/nano

SSHのポート番号を22から変更し、rootでのログインを禁止する(お好みで)

# SSHのポート番号と、rootでのログイン設定を編集
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
nano /etc/ssh/sshd_config
# SELINUXにsshのポート番号を追加
semanage port -a -t ssh_port_t -p tcp XXXX
# ファイアウォールのsshポート番号を変更
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
nano /etc/firewalld/services/ssh.xml
# ファイアウォールの設定を反映させて、sshdを再起動
firewall-cmd --reload
systemctl restart sshd

あれこれインストール

システムをアップデート

dnf -y update

podman関連のインストール

dnf -y install podman podman-plugins podman-docker podman-remote
touch /etc/containers/nodocker
podman --version

docker-composeのインストール

curl -L https://github.com/docker/compose/releases/download/v2.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
systemctl enable --now podman.socket
systemctl status podman.socket

SELINUXの設定

setsebool -P container_manage_cgroup on

コンテナのpull元からredhatを削除

cp /etc/containers/registries.conf /etc/containers/registries.conf.orig
nano /etc/containers/registries.conf

gitでリポジトリをクローンする

gitをインストール

dnf -y install git

リポジトリ「mm-arm64」のクローンをローカルに保存する。

cd /srv/
git clone https://github.com/SlipperyRider/mm-arm64.git

コンテナ間通信用のネットワークを作成

podman network create containya-network

nginxのコンテナの起動前準備

cd /srv/mm-arm64/nginx
chcon -R -h -t container_file_t ./

nginxの設定ファイルを編集
/srv/mm-arm64/nginx/conf.d/mm.conf の server_name を各自の環境に合わせて編集する。

証明書を配置

証明書を未取得の場合は、certbot等を使って証明書を取得しておく。

証明書のデータ・ボリュームを作成

podman volume ls
podman volume create nginx-certific8s

データ・ボリュームの場所を確認

podman volume inspect nginx-certific8s

※Mountpointに設定された場所を確認する

証明書をデータ・ボリュームに配置

ls /var/lib/containers/storage/volumes/nginx-certific8s/_data
cp -H /etc/letsencrypt/live/domain.nya/fullchain.pem /var/lib/containers/storage/volumes/nginx-certific8s/_data/
cp -H /etc/letsencrypt/live/domain.nya/privkey.pem /var/lib/containers/storage/volumes/nginx-certific8s/_data/

証明書のパーミッションを400に設定

chmod 400 /var/lib/containers/storage/volumes/nginx-certific8s/_data/fullchain.pem
chmod 400 /var/lib/containers/storage/volumes/nginx-certific8s/_data/privkey.pem

Mattermostのコンテナを準備

cd /srv/mm-arm64/mm/
chcon -R -h -t container_file_t ./

コンテナイメージをビルド

sudo podman build -t localhost/mattermost:latest -f ./Containerfile

データ・ボリュームを作成

podman volume create mm-mattermost-data
podman volume create mm-postgresql-data

各コンテナを起動

cd /srv/mm-arm64/mm/
docker-compose up -d
cd /srv/mm-arm64/nginx/
docker-compose up -d

コーヒー、紅茶、喫猫などで一息。

Mattermostの初期設定とか

https://mm.domain.nya(例) でMattermostにアクセス。
管理用アカウントを作成し、ログイン。
「システムコンソール」の「ウェブサーバー」で、以下の設定を行う。

サイトURL: https://mm.domain.nya (各自の環境に合わせる)
接続待ちアドレス: :443
ポート80を443へ転送する: 有効
接続のセキュリティー: TLS
TLS証明書ファイル: /mm/mattermost/certs/fullchain.pem
TLS鍵ファイル: /mm/mattermost/certs/privkey.pem

Mattermostのコンテナを再起動する

cd /srv/mm-arm64/mm/
docker-compose restart

nginxの proxy_pass を変更する

#        proxy_pass https://mattermost.dns.podman:8065/;
        proxy_pass https://mattermost.dns.podman/;

※これを忘れると、502エラーになる。

nginxコンテナを再起動する

cd /srv/mm-arm64/nginx/
docker-compose restart

再起動の代わりに、nginxサービスをkillするだけでもOK(だったハズ)

cd /srv/mm-arm64/nginx/
docker-compose kill -s HUP nginx

ログのローテーションを設定

ホスト側のlogrotateにnginxコンテナ向けの設定を追加

logrotateの対象を確認

ll /etc/logrotate.d/

nginx用の設定を登録

cd /srv/mm-arm64/nginx/
cp ./nginx.logrotate /etc/logrotate.d/nginx

テスト(強制 logrotate)と結果の確認

logrotate -f /etc/logrotate.conf
ll ./logs/

“access.log”、“error.log”とは別に“access.log-yyyymmdd”、“error.log-yyyymmdd”ができていれば、OK。

余談

セキュリティ上、fail2banとかも設定した方がいいかも。

gitリポジトリ
GitHub - SlipperyRider/mm-arm64: Containers of Mattermost with Nginx on Podman for ARM64
Containers of Mattermost with Nginx on Podman for ARM64 - GitHub - SlipperyRider/mm-arm64: Containers of Mattermost with...
タイトルとURLをコピーしました