AlmaLinux9系にホスト側NginxとPodmanコンテナ環境を構築する方法
AlmaLinux8系から9系に移行し、さらにLAMP環境からPodmanコンテナ環境に変更したい。ホスト側にはNginx / Cockpit / FTPサーバを、コンテナ側はapache-php / mariadb / mailpitを導入したい。あとは時刻同期等の細かい所も設定する方法をまとめてメモ。
やりたいこと
- AlmaLinux8系から9系に移行
- OS側は時刻同期やkdumpのメモリ確保停止等、細かい設定も分かる範囲で全部行う
- Cockpitを導入し、セキュリティ対応と必要なアプリケーションも導入したい
- コンテナ側はapache-php(同梱版) / mariadb / mailpitを導入
- メモリ1GBのVPSなのでサーバが落ちないようにチューニングしたい
環境について
VPS
今回はKAGOYA CLOUD VPSのCPU1コア / メモリ1GBプランで作業した。SSH接続は公式案内の通り以下でログインできる。
- 接続ポート -> 22
- ユーザ名 -> root
- パスワード or 秘密鍵 -> インスタンス作成時に選択したもの
ホスト(VPS)側
- AlmaLinux release 9.8 (Olive Jaguar)
各種サーバ構築・設定
SELinuxの無効化
# SELinuxの設定状況を確認 getenforce # 以下出力内容 Enforcing # grubbyコマンドでSELinuxを無効化 grubby --update-kernel ALL --args selinux=0 # SELinuxの設定ファイルを開く vi /etc/selinux/config
以下変更を行い「:wq」で上書き保存。
# 変更前 SELINUX=enforcing # 変更後 SELINUX=disabled
以下で再起動及び設定状況を確認する。
# サーバの再起動 reboot # SELinuxの設定状況を確認 getenforce # 以下出力内容 Disabled
コマンド履歴のログ化
過去にメモしたがSSH接続後のコマンド履歴を以下でログ化する。
# ログ保存用ディレクトリの作成 mkdir -p /var/log/ssh_session # パーミッション変更 chmod 777 /var/log/ssh_session # スティッキービートの設定 chmod +t /var/log/ssh_session # シェルスクリプトを作成 vi /etc/profile.d/ssh_script.sh
シェルスクリプトは以下内容で作成する。
# SSH接続されているもしくはローカルログイン時に実行
if [ -n "$SSH_CONNECTION" ] || [ "$TERM" != "" ]; then
# ログの保存場所
LOG_DIR="/var/log/ssh_session"
# SSH接続元IPを取得。もしローカルログインで空なら "local" という文字にする
CLIENT_IP=$(echo "$SSH_CLIENT" | awk '{print $1}')
: "${CLIENT_IP:=local}"
# ログディレクトリ及びファイル名
LOG_FILE="$LOG_DIR/${USER}_${CLIENT_IP}.log"
# コマンド実行直前にログを記録する関数
log_ssh_command() {
# 現在実行しようとしているコマンド($BASH_COMMAND)がプロンプト表示処理や自分自身の関数ではない場合
if [ "$BASH_COMMAND" != "$PROMPT_COMMAND" ] && [ "$BASH_COMMAND" != "log_ssh_command" ]; then
# ログファイルにコマンド内容を書き込み
echo "$(date "+%Y-%m-%d %H:%M:%S") [${USER}] $BASH_COMMAND" >> "$LOG_FILE"
fi
}
# ユーザーがコマンドを実行する直前にlog_ssh_commandを実行
trap 'log_ssh_command' DEBUG
fi
引き続き以下の通り進める。
# 全てのユーザーにシェルスクリプトの実行権限を追加 chmod +x /etc/profile.d/ssh_script.sh # 一旦SSH接続を終了 exit
SSHで再接続すると以下ディレクトリ内にログが保存されるようになっている筈。
/var/log/ssh_session
Swap領域の追加
Kagoyaサーバでメモリ1GB / AlmaLinux9の場合、Swap領域は1GBで設定されていた。ここに2GB追加する。
# swapファイルの作成
dd if=/dev/zero of=/swapfile2 bs=1M count=2048
# 作成したファイルをswap領域に指定
mkswap /swapfile2
# 設定ファイルに追記
echo '/swapfile2 swap swap defaults 0 0' >> /etc/fstab
# 再起動
reboot
# 認識されているか確認
free -m
# 以下のようにSwap欄が3GBになっていればOK
total used free shared buff/cache available
Mem: 763 272 403 8 210 490
Swap: 3071 0 3071
ユーザー追加・設定
# ユーザーの追加 useradd test_user # パスワード設定 passwd test_user # スーパーユーザー権限追加 usermod -aG wheel test_user # (必要に応じて)rootユーザーのパスワード設定 passwd root
SSH接続用のポートを変更
# SSH接続用ポートのファイアウォール開放 firewall-cmd --permanent --add-port=7777/tcp # ファイアウォール再起動 firewall-cmd --reload # 設定確認 firewall-cmd --list-all # ports欄に7777があればOK public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client ssh ports: 7777/tcp protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: # SSH設定ファイルを開く vi /etc/ssh/sshd_config
以下変更を行い「:wq」で上書き保存。
#書き換え前 #Port 22 #書き換え後 Port 7777
以下で再起動。
# SSH再起動 systemctl restart sshd
尚、この時点で設定したポートでSSH接続できるが、念のため起動中のRLoginは開いたまま、新しいタブ等で接続を試みること。
時刻同期設定
# dnfのアップデート dnf -y update # chronyのインストール dnf -y install chrony # 設定ファイルを開く vi /etc/chrony.conf
以下変更を行い「:wq」で上書き保存。
# 2行目の以下をコメントアウト pool 2.cloudlinux.pool.ntp.org iburst # 以下を追記 pool ntp.nict.jp iburst
以下でアスタリスク(*)が付いている項目があるか確認する。尚、反映されるまで数秒~数十秒程度がかかる場合あり。
# chronyの再起動 systemctl restart chronyd # 設定状況確認 chronyc sources MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^+ ntp-a2.nict.go.jp 1 6 17 41 +59us[ +62us] +/- 4697us ^* ntp-k1.nict.jp 1 6 17 41 -38us[ -36us] +/- 2069us ^+ ntp-b3.nict.go.jp 1 6 17 41 +58us[ +58us] +/- 4644us ^- ntp-b2.nict.go.jp 1 6 17 41 +128us[ +128us] +/- 4716us
タイムゾーン設定
# タイムゾーン設定 timedatectl set-timezone Asia/Tokyo # 日時確認 date
kdumpのメモリ確保停止
以下のどちらかのパターンでkdumpのメモリ確保を停止する。ちなみにメモリ確保のみを停止してもカーネル更新後にrebootすると書き換えられる可能性があるため、削除した方がいいかも。
kexex-tools自体を削除するパターン
dnf remove -y kexec-tools
kdump用のメモリを確保しないように設定するパターン
# kdumpを停止
systemctl disable --now kdump.service
# OS起動時にkdump用のメモリを確保しないように設定
grubby --update-kernel=ALL --args="crashkernel=0"
# 設定を反映
grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline
# サーバ再起動
reboot
# 設定状況を確認(Active: inactive (dead)になっていればOK)
systemctl status kdump
○ kdump.service - Crash recovery kernel arming
Loaded: loaded (/usr/lib/systemd/system/kdump.service; disabled; preset: enabled)
Active: inactive (dead)
# メモリ使用状況を確認(Memのtotalが900以上ならOK)
free -m
total used free shared buff/cache available
Mem: 955 288 670 6 137 666
Swap: 3071 0 3071
dnf makecacheの自動更新を停止
メモリ1GBのサーバだとdnf makecacheの自動更新時にスワップになりやすいので以下で停止する。
# 現在動作中のタイマーを停止の上、自動起動も無効化 systemctl disable --now dnf-makecache.timer # サービス自体が勝手に呼び出されないようマスク systemctl mask dnf-makecache.service # タイマーが停止しているかチェック(Active: inactiveならOK) systemctl status dnf-makecache.timer # サービスが停止しているかチェック(Loaded: maskedならOK) systemctl status dnf-makecache.service
Nginx設定
# Nginxのインストール dnf -y install nginx # 起動設定 systemctl enable --now nginx # ステータス確認 systemctl status nginx # 自動起動確認 systemctl is-enabled nginx # ファイアウォール開放 firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
この時点でブラウザからサーバIPアドレスにアクセスするとNginxのデフォルトのウェルカムページが表示される筈。
尚、コンテナへの接続テスト用に/etc/nginx/nginx.confのserver {}ブロック内に以下リバースプロキシ設定を追記しておく。
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
追記後は以下で再起動。
# 構文チェックし、問題無ければ再起動 nginx -t systemctl reload nginx
basic認証
basic認証も必要な場合は.htpasswdファイルを作成し、「/etc/nginx/.htpasswd」のように設置しておく。
また、/etc/nginx/nginx.confのserver {}ブロック内に以下を追記しておく。
location = /path/to/admin {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /path/to/admin/ {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
vsFTPd(FTPサーバ)設定
# FTPサーバのインストール dnf -y install vsftpd #設定ファイルを開く vi /etc/vsftpd/vsftpd.conf
以下変更、コメントアウト解除、追記を行い「:wq」で上書き保存する。
# --------------既存の箇所を変更もしくはコメントアウトを解除-------------- # 匿名ログインを禁止 anonymous_enable=NO # ローカルユーザーのログインを許可 local_enable=YES # 書き込み(アップロード)を許可 write_enable=YES # 初期パーミッションをファイル664 / ディレクトリ775に変更 local_umask=002 # ユーザーをホームより上に行かせない chroot_local_user=YES # 上層に行けるユーザーリストを有効化 chroot_list_enable=YES # 階層移動を許可するユーザーリストファイル chroot_list_file=/etc/vsftpd/chroot_list # ls -Rコマンドの実行の許可 ls_recurse_enable=YES # --------------以下を追記-------------- # chroot制限下での書き込みを許可 allow_writeable_chroot=YES # ログイン時の初期ディレクトリを固定 local_root=/var/www/html # .htaccessなどの隠しファイルを表示 force_dot_files=YES # タイムゾーンを日本時間にする use_localtime=YES
以下で自動起動設定まで行う。
#上層へのcdを許可するユーザーを設定する vi /etc/vsftpd/chroot_list # 許可するユーザー名を追記して:wqで上書き保存 test_user # ファイアウォールの開放 firewall-cmd --permanent --add-service=ftp firewall-cmd --reload # FTPサーバの起動と自動起動設定 systemctl enable --now vsftpd # ステータス確認 systemctl status vsftpd # 自動起動確認 systemctl is-enabled vsftpd
Cockpit設定
# Cockpitのインストール dnf -y install cockpit # 起動設定 systemctl enable --now cockpit.socket # (必要に応じて)ファイアウォール設定 firewall-cmd --add-service=cockpit --permanent firewall-cmd --reload
この時点でブラウザから「IPアドレス:9090」でCockpitにアクセスできる筈。
また、Podman本体とCockpit上でPodmanを操作できるようにしたいので以下でインストールする。
# Podman本体とcockpit-podmanのインストール dnf -y install podman cockpit-podman # Cockpitを再起動 systemctl restart cockpit
Cockpitにアクセスすると「Podmanコンテナー」のメニューが追加される筈。
尚、Cockpit関連では必要に応じて以下設定を行っていく。
アクセスIP制限
過去記事のようにワンタイムパスワード認証を導入しようとしたが、正常に認証できなかったので以下でアクセスIP制限をかける。
# 自身のIPアドレスの確認
w -i
# 以下のように出力されるのでIPアドレスをコピーしておく
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user pts/0 xxx.xxx.xxx.xxx 22:54 1.00s 0.00s 0.00s w -i
# ファイアウォールのCockpit設定を削除
firewall-cmd --permanent --remove-service=cockpit
# 指定したドメインのみCockpitにアクセスできるよう設定
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.xxx" port port="9090" protocol="tcp" accept'
# ファイアウォール再起動
firewall-cmd --reload
# 設定確認
firewall-cmd --list-all
# services欄からcockpitが消え、rich rulesにIP制限設定が追加されていればOK
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports: 7777/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="xxx.xxx.xxx.xxx" port port="9090" protocol="tcp" accept
ちなみにIPアドレスの追加や削除は以下で行える。
# 特定のIP制限設定を削除 firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.xxx" port port="9090" protocol="tcp" accept' # アクセス可能なIPを追加 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.xxx" port port="9090" protocol="tcp" accept'
cockpit-pcpのインストール
メトリックス(CPU / メモリ / ディスク / ネットワークの負荷状況確認)の履歴を残すためにcockpit-pcpを以下でインストール及び起動設定する。
# cockpit-pcpのインストール dnf install -y pcp python3-pcp # 起動・有効化設定 systemctl enable pmlogger.service systemctl start pmlogger.service # 設定状況の確認 systemctl status pmlogger.service # Cockpitを再起動 systemctl restart cockpit
cockpit-filesのインストール
AlmaLinux8のCockpitだとファイルマネージャにcockpit-navigatorを導入していたが、AlmaLinux9だと導入できなかった。ただ、Cockpit公式が開発したcockpit-filesが使えるようなのでこちらを使用する。
# cockpit-filesのインストール dnf install -y cockpit-files # Cockpitを再起動 systemctl restart cockpit
ディレクトリの整理・各種設定
Web公開用ディレクトリ
Web公開用は以下のようなディレクトリ構成にしたい。
/var/www/html/podman/ # コンテナ側からマウントするディレクトリ
├── sub.test.com # (必要に応じて)サブドメイン
│ └── public # (必要に応じて)サブドメインの公開ディレクトリ
└── test.com # メインドメイン
├── public # メインドメインの公開ディレクトリ
│ └── wordpress # wordpress
└── vendor # (必要に応じて)composer関連
└── composer
以下のように設定していく。setfaclコマンドについてはこちらの記事が参考になった。
# ディレクトリ作成(ドメイン部分は適宜変更)
mkdir -p /var/www/html/podman/test.com/public
# ホスト側の所有者・グループ設定
chown -R test_user:nginx /var/www/html
# ディレクトリとファイルのパーミッション一括設定
find /var/www/html -type d -exec chmod 775 {} +
find /var/www/html -type f -exec chmod 664 {} +
# SGID設定
find /var/www/html -type d -exec chmod g+s {} +
# 現在あるファイル・フォルダに対し、uid33(www-data)のユーザーに全権限を付与
setfacl -R -m u:33:rwx /var/www/html
# 今後作られるファイル・フォルダに対しても上記設定が引き継がれるよう設定
setfacl -R -d -m u:33:rwx /var/www/html
コンテナ関連設定ファイル用ディレクトリ
コンテナ関連設定ファイル用ディレクトリは以下のようなディレクトリ構成にしたい。
/opt/podman
├── apache
│ ├── mpm_prefork.conf
│ └── vhost.conf
├── docker-compose.yml
├── mailpit
│ └── .htpasswd
├── mariadb
│ ├── custom-mariadb.cnf
│ └── data
└── php
├── Dockerfile
└── custom-php.ini
以下で各ディレクトリを作成。
mkdir -p /opt/podman/apache mkdir -p /opt/podman/mailpit mkdir -p /opt/podman/mariadb/data mkdir -p /opt/podman/php
各種設定ファイルは以下内容のものをアップロードしておく。
/opt/podman/apache/mpm_prefork.conf
<IfModule mpm_prefork_module>
# 起動時に生成される子プロセス数
StartServers 2
# アイドル状態の子プロセスの最小数
MinSpareServers 2
# アイドル状態の子プロセスの最大数
MaxSpareServers 4
# 最大同時リクエスト数
MaxRequestWorkers 4
#子プロセスが稼働中に扱うリクエスト数の上限
MaxConnectionsPerChild 300
</IfModule>
/opt/podman/apache/vhost.conf
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
LoadModule expires_module /usr/lib/apache2/modules/mod_expires.so
# IP接続用(テスト接続のため)
<VirtualHost *:80>
ServerName xxx.xxx.xxx.xxx
DocumentRoot /var/www/html/test.com/public
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1 10.0.2.2 172.17.0.1 10.89.0.0/16
<Directory /var/www/html/test.com/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
/opt/podman/docker-compose.yml
services:
# Webコンテナ用設定
web:
container_name: web-container
image: web-server:latest
restart: always
ports:
- "8080:80"
volumes:
- /var/www/html/podman:/var/www/html:Z
- /opt/podman/php/custom-php.ini:/usr/local/etc/php/conf.d/custom-php.ini:ro
- /opt/podman/apache/mpm_prefork.conf:/etc/apache2/mods-available/mpm_prefork.conf:ro
- /opt/podman/apache/vhost.conf:/etc/apache2/sites-available/000-default.conf:ro
environment:
TZ: "Asia/Tokyo"
networks:
- web-db-net
- web-mailpit-net
deploy:
resources:
limits:
memory: 384M
# コンテナ起動順序設定(db起動後にwebコンテナ起動)
depends_on:
- db
# DBコンテナ用設定
db:
container_name: db-container
image: mariadb:11.4
restart: always
volumes:
- /opt/podman/mariadb/data:/var/lib/mysql:Z
- /opt/podman/mariadb/custom-mariadb.cnf:/etc/mysql/conf.d/custom-mariadb.cnf:ro
environment:
TZ: "Asia/Tokyo"
MARIADB_ROOT_PASSWORD: xxxxxxxxxxx
MARIADB_DATABASE: xxxxxxxxxxx
MARIADB_USER: xxxxxxxxxxx
MARIADB_PASSWORD: xxxxxxxxxxx
networks:
- web-db-net
deploy:
resources:
limits:
memory: 256M
# Mailpitコンテナ用設定
mailpit:
container_name: mailpit-container
image: axllent/mailpit:latest
# ブラウザでアクセスするポートは19980
ports:
- "19980:8025"
volumes:
- /opt/podman/mailpit:/data:Z
- /opt/podman/mailpit/.htpasswd:/data/.htpasswd:ro
environment:
TZ: Asia/Tokyo
MP_MAX_MESSAGES: 1000
MP_DATABASE: /data/mailpit.db
MP_SMTP_AUTH_ACCEPT_ANY: 1
MP_SMTP_AUTH_ALLOW_INSECURE: 1
MP_UI_AUTH_FILE: /data/.htpasswd
networks:
- web-mailpit-net
deploy:
resources:
limits:
memory: 32M
# ネットワーク設定
networks:
web-db-net:
web-mailpit-net:
/opt/podman/mailpit/.htpasswd
Basic認証用のファイルをhtpasswd生成ツール等で作成し、.htpasswdをアップロードしておく。
/opt/podman/mariadb/custom-mariadb.cnf
[mysqld] # InnoDBのデータやインデックスのバッファ用メモリのサイズ innodb_buffer_pool_size = 64M # InnoDBのトランザクションのためのバッファのサイズ innodb_log_buffer_size = 2M # 同時接続数 max_connections = 20 # すべての接続で同時に開けるテーブル合計数 table_open_cache = 100 # スレッドキャッシュ保持最大数 thread_cache_size = 4 # フルスキャン用のバッファ read_buffer_size = 256K # ソート後にレコードを読むときに使用されるバッファ read_rnd_buffer_size = 256K # ソート時に使用されるバッファ sort_buffer_size = 512K # インデックス未使用でのJOIN時に使用するバッファ join_buffer_size = 512K # 文字コード設定 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
/opt/podman/php/custom-php.ini
; タイムゾーン設定 date.timezone = "Asia/Tokyo" ; ファイルアップロード上限 upload_max_filesize = 64M post_max_size = 64M ; メモリ上限 memory_limit = 128M ; opcache設定 [opcache] ; ophacheを有効化 opcache.enable = 1 ; CLIやバックグランド処理時でも有効化 opcache.enable_cli = 1 ; キャッシュ保存用のメモリ opcache.memory_consumption = 32 ; 文字列の格納に使用するメモリサイズ opcache.interned_strings_buffer = 8 ; キャッシュ可能なファイル最大数 opcache.max_accelerated_files = 4000 ; ファイル更新時に自動でチェック opcache.validate_timestamps = 1 ; ファイル更新チェックの2秒間隔に設定 opcache.revalidate_freq = 2 ; apcu設定 [apcu] ; apcuを有効化 apc.enabled = 1 ; CLIやバックグランド処理時でも有効化 apc.enable_cli = 1 ; メモリ割り当て apc.shm_size = 32M
/opt/podman/php/Dockerfile
# Docker公式PHP8.4&Apache同梱版イメージを指定
FROM docker.io/library/php:8.4-apache
# PHP拡張機能インストーラーをダウンロードして配置
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
# 実行権限を与え、必要なモジュールを一括インストール
RUN chmod +x /usr/local/bin/install-php-extensions && \
install-php-extensions \
apcu \
bcmath \
curl \
dom \
exif \
gd \
gmp \
imagick \
intl \
mbstring \
memcache \
memcached \
mysqli \
opcache \
pcntl \
pdo_mysql \
redis \
simplexml \
sockets \
sysvsem \
xml \
xmlwriter \
zip \
zlib
# composerのコピー
COPY --from=docker.io/library/composer:latest /usr/bin/composer /usr/bin/composer
# apache-php8.4はDebian系のためdnfではなくapt-getで必要なコマンドを導入
RUN apt-get update && apt-get install -y git zip unzip
# Apacheのrewriteモジュールとremoteipモジュールを有効化
RUN a2enmod rewrite remoteip
Podman設定
以下でpodman-composeをインストール。
# Pythonパッケージをインストール dnf install -y python3 python3-pip # pip経由でpodman-composeをインストール pip3 install podman-compose python-dotenv # バージョンの確認 podman-compose version # 以下出力内容 podman-compose version 1.6.0 podman version 5.8.2
Podmanとコンテナ自動起動用サービスの有効化と起動設定を行う。これを設定していないとdocker-compose.ymdで「restart: always」を指定していてもサーバ再起動時にコンテナが自動で立ち上がらない点に注意。
# Podmanを有効化・起動 systemctl enable --now podman.socket podman.service # コンテナ自動再起動を有効化・起動 systemctl enable --now podman-restart.service # 設定確認 systemctl status podman.service podman-restart.service
次にapache-php用イメージのビルドと各コンテナの作成・起動を行う。
# ディレクトリ移動 cd /opt/podman/php # ビルド podman build -t web-server . # ディレクトリ移動 cd /opt/podman # 構文チェック podman compose config # コンテナ作成・起動 podman-compose up -d
コンテナ起動後「/var/www/html/podman/test.com/public」に何らかのファイルをアップロードし「IPアドレス/ファイル名」にアクセスするとページが表示される筈。また、web -> dbコンテナやweb -> mailpitコンテナへの接続も確認できる筈。
尚、mailpitテスト用にphpmailerをインストールしたい場合は以下。
podman exec \
-w /var/www/html/test.com \
web-container \
composer require phpmailer/phpmailer
その他
個人的に必須と思われるツール類の導入と設定はできたので、ここからはなくても問題無いがあった方が便利なツールの導入方法になる。
Lazydocker
コンテナのログや負荷状況を見るのに便利。あとPortainerよりも省メモリなのも助かる。
# Go言語をインストール dnf -y install golang # Goを使ってLazydockeをインストール go install github.com/jesseduffield/lazydocker@latest # 実行ファイルを共通ディレクトリに移動 mv ~/go/bin/lazydocker /usr/local/bin/ # Podmanのシステムソケットを起動・有効化 systemctl enable --now podman.socket # podmanとdockerの互換ツールをインストール(ソケット通信に必要) dnf -y install podman-docker # Lazydockeの起動 lazydocker
所感
OSのバージョンが変わると色々大変
AlmaLinux8系から9系に変わるだけでも結構大変だった。OS / ホスト / コンテナ設定は一通りできた筈。
WordPressの移行やチューニングに関しては別記事でメモしたいところ。
ストレージについて
ここまでの設定を行い「df -h」コマンドでストレージを確認したところ8GBほど使用していた。移行前のサーバがMySQLのバイナリログ等を含めると10GBほど使用している状態。
その辺りを考えるとIndigo VPSのメモリ1GB / ストレージ20GBプランに移るのは厳しそう。
Kagoyaがメモリ1GBでもストレージ100GBと余裕があるのでこちらに移行しようと思う。
参考サイト
https://www.linuxmaster.jp/linux_skill/2026/04/setfacllinuxaclgetfacl.html
関連記事
-
-
Cockpitにリンク集(ブックマーク)のようなページを作成し、メニューにも追加する方法
Cockpitにリンク集(ブックマーク)のようなカスタムページを作成し、左メニュ ...
-
-
Cockpitでプログラムの自動実行(systemd timer)設定を行う方法
Cockpitでプログラムの自動実行設定を行いたい。調べたところCronは難しそ ...
-
-
サーバ管理ツール「Cockpit」にファイルマネージャー用プラグインを導入する方法
先日メモしたサーバ管理ツール「Cockpit」にブラウザ上からファイルの作成や編 ...
-
-
Podmanでイメージのビルド中に「Writing manifest to ~~」表示で処理が止まる場合の対応方法
Podmanでイメージのビルド中に「Writing manifest to im ...
-
-
Cockpitにrootユーザでのログインを禁止する方法
先日CockpitにGoogle Authenticatorを用いたワンタイムパ ...