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

OCIのARMインスタンスの無料枠で、podmanなコンテナのGroupSessionサーバを実行したかった。
んで、手順のメモがてらまとめた。

はじめに

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

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

VCNの設定

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

実行環境等

インスタンス

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

主要なアプリケーション

Podman
docker-compose
Nginxのコンテナ
Tomcat 9(JDK11)のコンテナイメージ
GroupSession 無料版

手順

初期設定

以下、コンソールでの作業。
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

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

cd /srv/
git clone https://github.com/SlipperyRider/gsession-nginx.git

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

podman network create containya-network

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

cd /srv/gsession-nginx/nginx
chcon -R -h -t container_file_t ./

nginxの設定ファイルを編集
/srv/gsession-nginx/nginx/conf.d/gsession.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

GroupSessionのコンテナを準備

cd /srv/gsession-nginx/gsession/
chcon -R -h -t container_file_t ./

GroupSessionのwarファイルをダウンロード

curl https://www.sjts.co.jp/download/gs/5.4.1/gsession.war -o ./gsession.war

gsdata.confを置き換える

cp gsession.war gsession.orig.war   # 置き換え前にバックアップを作成(省略可)
zip -p gsession.war WEB-INF/conf/gsdata.conf

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

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

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

podman volume create gsession-data

各コンテナを起動

cd /srv/gsession-nginx/gsession/
docker-compose up -d
cd /srv/gsession-nginx/nginx/
docker-compose up -d

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

GroupSessionの初期設定とか

https://gsession.domain.nya/gsession/(例) でGroupSessionにアクセス。
( 無料版の)ライセンス登録などの各種設定を行う。

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

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

logrotateの対象を確認

ll /etc/logrotate.d/

nginx用の設定を登録

cd /srv/gsession-nginx/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/gsession-nginx: Containers of GroupSession with Nginx on Podman
Containers of GroupSession with Nginx on Podman. Contribute to SlipperyRider/gsession-nginx development by creating an a...
タイトルとURLをコピーしました