Podmanコンテナ環境にWordPressを導入の上、パーミッション等の各種設定を行う方法
Podmanコンテナ環境にWordPressを導入したい。何も考えずにWP関連のファイルをアップロードし、インストールすると恐らくパーミッションや所有者・グループの問題で面倒が起きそうなのでその辺りもまとめて設定したい。具体的にはWPダッシュボード、FTP接続どちらでも問題無く管理できるようにしたい。以下に対応方法をメモ。
環境について
VPS
今回はKAGOYA CLOUD VPSのCPU1コア / メモリ1GBプランで作業した。SSH接続は公式案内の通り以下でログインできる。
- 接続ポート -> 22
- ユーザ名 -> root
- パスワード or 秘密鍵 -> インスタンス作成時に選択したもの
ホスト(VPS)側
- AlmaLinux 8.10 (Cerulean Leopard)
- Nginx 1.14.1
コンテナ側
- PHP 8.4.24(cli)
- Apache 2.4.68 (Debian)
- MariaDB 11.4.12
対応方法
データベース関連
サーバにSSH接続し、以下でWordPress用のデータベースとユーザーを作成し、ユーザーには権限を付与する。
# DBコンテナにログイン podman exec -it 【データベース用コンテナ名】 mariadb -u root -ptest_root_pass # WordPress用データベースとユーザー作成し権限を付与(データベース名、ユーザー名、パスワードは適宜変更) CREATE DATABASE wp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'wp_user'@'%' IDENTIFIED BY 'wp_pass'; GRANT ALL PRIVILEGES ON wp_db.* TO 'wp_user'@'%'; FLUSH PRIVILEGES;
WordPressの導入
以下でファイルダウンロード及び展開する。
# WordPressを導入するディレクトリに移動 cd /var/www/html/container/wordpress # WordPressをダウンロード curl -O https://ja.wordpress.org/latest-ja.tar.gz # ダウンロードしたファイルを展開 tar -xvf latest-ja.tar.gz # 展開後のwordpressディレクトリ以下を移動 mv wordpress/* /var/www/html/container/wordpress # 不要なファイルを削除 rm -rf wordpress latest-ja.tar.gz
この時点でブラウザから「ドメイン/wordpress」にアクセスするとインストール画面が表示されるのでそのまま進める。
ホストはデータベース用コンテナ名になる点にだけ注意。
WordPress設定(wp-config.php)
WordPressのインストール完了後、wp-config.phpの「/* Add any custom values between this line and the "stop editing" line. */」より下に以下を追記。
# プロキシサーバ経由かつHTTPS接続の場合はPHPの環境変数を書き換え
if( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ){
$_SERVER['HTTPS'] = 'on';
}
# Webサーバ権限でファイル書き換え
define('FS_METHOD', 'direct');
# ディレクトリ・ファイルを作成した際のパーミッション
define('FS_CHMOD_DIR', 0775);
define('FS_CHMOD_FILE', 0664);
# 新規作成ファイルのデフォルトパーミッションを設定
umask(0002);
FTPサーバ(vsftpd)の設定
サーバにSSH接続し、設定ファイルを開く。
# 設定ファイルのバックアップ cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.yyyymmdd # 設定ファイルを開く vi /etc/vsftpd/vsftpd.conf
以下の通り書き換える。
# 変更前 local_umask=022 # 変更後 local_umask=002
上書き保存後、以下で再起動。
systemctl restart vsftpd
local_umaskについて
local_umaskの変更前後の違いは以下の通りで変更後は同グループも書き込みができるようになる。
- 022(変更前のデフォルト値) -> ファイル644 / ディレクトリ755
- 002(変更後) -> ファイル664 / ディレクトリ775
所有者とパーミッション設定
以下で所有者・グループとパーミッション設定を行う。
# ユーザーの作成とパスワード設定(既存のユーザーを使用する場合は不要)
useradd ftp_user
passwd ftp_user
# 33グループに副グループとして追加
usermod -aG 33 ftp_user
# FTPサーバの再起動
systemctl restart vsftpd
# ホスト側の所有者・グループを設定
chown -R ftp_user:nginx /var/www/html
# コンテナ側の所有者・グループを設定
chown -R ftp_user:33 /var/www/html/container
# 所有者・グループのパーミッションを設定
find /var/www/html/container -type d -exec chmod 775 {} +
find /var/www/html/container -type f -exec chmod 664 {} +
# 新規ファイル・フォルダ作成時にグループ権限を引き継ぐ(SGID)設定
find /var/www/html/container -type d -exec chmod g+s {} +
ここまでで設定完了。ダッシュボードから記事の作成やテーマ・プラグインのインストールや、FTPからファイルの書き換え等が行える筈。
補足
グループの「33」と所有者やパーミッション設定内容について
DebianだとWebサーバ(ApacheやNginx等)のデフォルトユーザーが「www-data」になり、この「www-data」のGIDが「33」になる。
また、AlmaLinuxだとGID「33」は「tape」という名前のグループに割り当てられており「ls -l /var/www/html」で一覧を表示すると「ftp_user:tape」となるが、コンテナ側では「ftp_user:www-data」として読み取られる。
ディレクトリ775 / ファイル664になっているため「ftp_user:www-data」だとFTP(ftp_user)からでもWordPress(www-data)からでもファイルの作成・編集が行えるようになる。
また、SGID設定しているので、今後新たにファイル・ディレクトリが作成されても所有グループは引き継ぐ。
Webサーバ・PHP・WordPress全部入りイメージ
Webサーバ・PHP・WordPress同梱公式イメージもある。私の場合、運用中WordPressとPHP&MySQLのプログラムを引っ越しする予定のためapache-phpイメージを使用しているが、そうじゃない場合は全部入りの方がよさそう。
ダミー記事
動作テストのためのダミー記事は「theme-test-data-ja」が便利。xmlファイルをダウンロードし「WordPressダッシュボード -> 左メニューのツール -> インポート -> WordPress」からインポートできる。
ログイン名・投稿者部分には触らず、「添付ファイルをダウンロードしてインポートする」にチェックを入れてインポートすること。
所感
Podmanコンテナ環境で色々構築、設定してきたがWordPressが正常に動作するのであれば自作のPHP&データベースもおおよそは動作する筈。
もう少し色々試してみて問題無ければ現在のLAMP環境からコンテナ環境へ移行してみたいところ。
関連記事
-
-
Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法
先日Podmanで作成したApache用コンテナに対してドメインを割り当てたが、 ...
-
-
Podmanで導入したapache-phpに各種PHPモジュールを追加する方法
先日Podmanでapache-php8.4を導入したが、phpinfoで確認す ...
-
-
Podmanで作成したApache用コンテナにドメインを割り当て、ポート指定なしでアクセス可能にする方法
先日PodmanでWebサーバ用コンテナを作成したが、ブラウザからアクセスする際 ...
-
-
CockpitとPodmanでWebサーバ用コンテナを作成しHello Worldページを表示する方法
Cockpitにはcockpit-podmanというPodman(Dockerの ...
-
-
docker-compose.ymlでまとめてコンテナ作成・起動・ネットワーク接続する方法
Podmanでコンテナを作成してネットワーク接続する際、Cockpit上やCUI ...