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

OCIのARMインスタンスの無料枠で、Nginxをフリバースプロキシに使用したWordPressを、podmanなコンテナで実行したかった。
んだけど、NginxのコンテナとWordPressのコンテナとを別個のdocker-composeにしている事例を見つけられなかったから、自分でまとめてみた。

はじめに

Nginxコンテナでリバースプロキシして、サブドメインごとに複数のコンテナに振り分ける構成を想定。
この構成で複数サイトを運用する場合は、サイトごとにWPコンテナを追加する。

今回はarm64のインスタンスだったけど、x64/amd64な環境でも同じ手順でいけそうな気はする。

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

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

VCNの設定

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

実行環境等

インスタンス

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

主要なアプリケーション

Podman
docker-compose
Nginxのコンテナ
MySQLのコンテナ
PHP+WordPressのコンテナ

手順

初期設定

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

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

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

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

podman network create containya-network

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

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

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

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

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

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

podman volume create nginx-html-wp
podman volume create wp-db-data

各コンテナを起動

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

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

WordPressの初期設定とか

https://wordpress.domain.nya/(例) でWordPressにアクセス。
以降は、いつものWordPressの設定。

データベースへの接続設定を要求された場合は、.envの記述に合わせる事。

cat wp-nginx/wp/.env

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

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

logrotateの対象を確認

ll /etc/logrotate.d/

nginx用の設定を登録

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