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とかも設定した方がいいかも。