AlmaLinux 10 サーバ構築ガイド
このガイドは、VMware Workstation Pro 17上でAlmaLinux 10を使用したWebサーバ構築の手順をまとめたものです。
AlmaLinux 10
Apache
PHP 8.x
Memcached
Postfix
2025 nanomix, ltd.
初期設定
リポジトリ追加
必要なリポジトリを追加します。
リポジトリ一覧確認
dnf repolist
EPEL & CRB リポジトリ
# AlmaLinux / RockyLinux 用
# crb(codeready-builder) = CentOS PowerTools = devel required
sudo dnf install epel-release
sudo dnf config-manager --set-enabled epel
sudo dnf config-manager --set-enabled crb
REMI リポジトリ
sudo rpm --import https://rpms.remirepo.net/RPM-GPG-KEY-remi
sudo rpm -ivh https://rpms.remirepo.net/enterprise/remi-release-10.rpm
sudo dnf config-manager --set-enabled remi
sudo dnf update remi
# ※必要に応じてRemiリポジトリの優先度を上げます
sudo vi /etc/yum.repos.d/remi.repo
> priority=1 #追加 デフォルトは99 小さい程優先順位が高い
ロケールの設定
ロケール確認と設定
# OSバージョン確認
cat /etc/redhat-release
# ロケール確認
localectl
date
# 日本語ロケールがあるか確認
localectl list-locales | grep -i ja
# 無い場合は言語パックを導入して変更する
sudo dnf install langpacks-ja
localectl set-locale LANG=ja_JP.utf8
source /etc/locale.conf
echo $LANG #確認
アップデート&必須パッケージのインストール
システムアップデート
# 既存パッケージをアップデート
sudo dnf update -y
# 必須ツールのインストール
sudo dnf install -y wget curl vim git unzip
VMware Tools (Open VM Tools)
VMware Tools インストール
sudo dnf install -y open-vm-tools open-vm-tools-desktop
sudo systemctl enable --now vmtoolsd
ユーザーとグループの設定
webadmin グループ作成
# webadmin グループを作成
sudo groupadd webadmin
# ユーザーを webadmin グループに追加
sudo usermod -aG webadmin $USER
sudo usermod -aG webadmin apache
# 確認
groups $USER
id apache
SELinux 設定
開発環境の場合、SELinuxを無効化することもありますが、本番環境では適切に設定することを推奨します。
SELinux 状態確認
getenforce
sestatus
SELinux を Permissive に設定(一時的)
sudo setenforce 0
SELinux を恒久的に無効化(開発環境のみ推奨)
sudo vi /etc/selinux/config
# SELINUX=enforcing を以下に変更
SELINUX=disabled
# 再起動後に反映
sudo reboot
WEB環境構築
WEBディレクトリ作成
/home/ 以下でも良いのだけど、HGFSマウントした場合に読み書き権限がおかしくなるので/var以下で作成します。
ディレクトリ作成
# WEBサイト設置ディレクトリを作成
sudo mkdir /var/home/www/
sudo chown root:webadmin /var/home/www/
sudo chmod g+s /var/home/www/
# マウントフォルダを割り当てる場合
sudo mkdir /var/home/nfsmount/
sudo chown root:webadmin /var/home/nfsmount/
sudo chmod g+s /var/home/nfsmount/
Apache
特別な理由が無い限りOS標準版でOK
インストール
Apache インストール
# 最低限必要なものをいれるよ
sudo dnf install httpd httpd-devel mod_ssl mod_wsgi mod_proxy_fcgi
# 自動起動設定
sudo systemctl enable httpd.service
sudo systemctl start httpd.service
# Firewallを空けるよ
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# homeにショートカット作っておくよ
sudo ln -s /etc/httpd/ /home/httpd
# 失敗する場合は強制終了もね
apachectl -k stop # 一旦強制終了
.htaccess を使えるようにする
httpd.conf 編集
sudo vi /etc/httpd/conf/httpd.conf
# AllowOverride None を AllowOverride All に置換
Python (wsgi)
Pythonを使う場合はインストールします
mod_wsgi インストール
sudo dnf install mod_wsgi
conf.d/wsgi.conf
# 通常は不要。
# /etc/httpd/conf.modules.d/10-wsgi-python3.conf が作成されているはず
<IfModule !wsgi_module>
LoadModule wsgi_module modules/mod_wsgi_python3.so
</IfModule>
WSGIDaemonProcess wsgi_app user=apache group=apache
WSGIProcessGroup wsgi_app
WSGISocketPrefix /var/run/wsgi
#WSGIScriptAlias /wsgi /var/www/html/wsgi/
.htaccess 設定例
Options ExecCGI
AddHandler wsgi-script .py
AddHandler wsgi-script .wsgi
DirectoryIndex index.html index.php index.py index.wsgi
Python仮想環境
sudo dnf install python-pip
cd /var/www/html/
python -m venv env
pip install openpyxl
PHP
複数のPHPをremiリポジトリからインストールして、php-fpmで同時に複数起動して.htaccessで切り替えられるようにします。
準備
前述の初期設定でEPEL、CRB、REMIリポジトリを追加している必要があります。
PHPをインストール
使用可能なPHPバージョン確認
dnf module list php
PHP 8.3 インストール例
# PHP 8.3 をインストール
sudo dnf module reset php
sudo dnf module enable php:remi-8.3
sudo dnf install php php-fpm php-cli php-common php-mbstring php-gd \
php-mysqlnd php-pdo php-xml php-opcache php-zip \
php-json php-curl php-bcmath php-intl
# PHP-FPM 起動
sudo systemctl enable --now php-fpm
sudo systemctl restart httpd
複数バージョン同時インストール
# PHP 8.2 も同時にインストール
sudo dnf install php82-php-fpm php82-php-cli php82-php-common \
php82-php-mbstring php82-php-gd php82-php-mysqlnd \
php82-php-pdo php82-php-xml php82-php-opcache
# PHP 8.2 FPM 起動
sudo systemctl enable --now php82-php-fpm
PHP-FPM 設定
PHP バージョン確認
php -v
php-fpm -v
PHP-FPM 設定ファイル編集
# PHP 8.3 の FPM 設定
sudo vi /etc/php-fpm.d/www.conf
# 主要な設定項目
user = apache
group = apache
listen = /run/php-fpm/www.sock
listen.owner = apache
listen.group = apache
listen.mode = 0660
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
php.ini 設定
sudo vi /etc/php.ini
# 主要な設定項目
upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 300
memory_limit = 256M
date.timezone = Asia/Tokyo
# 設定反映
sudo systemctl restart php-fpm
.htaccess でバージョン切り替え
# PHP 8.3 を使用
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
# PHP 8.2 を使用
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php82-php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
# PHP 8.1 を使用
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php81-php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
Apache で PHP-FPM を有効化
# httpd.conf または VirtualHost 設定
<Directory /var/home/www>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
</Directory>
# 設定反映
sudo systemctl restart httpd
PHP 拡張モジュール確認
# インストール済み拡張一覧
php -m
# 特定の拡張を検索
dnf search php | grep extension
# よく使う拡張モジュール
sudo dnf install php-pecl-apcu php-pecl-memcached php-pecl-redis \
php-pecl-imagick php-pecl-zip
複数バージョンの切り替え(alternatives)
# デフォルトの php コマンドを変更
sudo alternatives --config php
# 手動で設定
sudo alternatives --set php /usr/bin/php8.3
# 確認
php -v
which php
Memcached
インストールと設定
Memcached インストール
sudo dnf install memcached libmemcached
設定ファイル編集
sudo vi /etc/sysconfig/memcached
# 設定、デフォルトでOKなはず
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1"
# OPTIONSを自身のIPアドレスにすれば他のサーバから接続可能
起動とファイアウォール設定
# 自動起動・サービス起動
sudo systemctl enable --now memcached
# ファイアーウォール
sudo firewall-cmd --add-service=memcache --permanent
sudo firewall-cmd --reload
# 動作テスト
sudo systemctl status memcached
echo "stats settings" | nc 127.0.0.1 11211
メール送信設定
Postfix
インストール
sudo dnf install postfix
systemctl enable --now postfix
設定変更 - 送信専用シンプル設定
sudo vi /etc/postfix/main.cf
# 最後に追記
myhostname = mail.example.com
mydomain = example.com
masquerade_domains = example.com
myorigin = $myhostname
inet_interfaces = loopback-only
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
SMTP経由で送る場合(Gmail例)
sudo vi /etc/postfix/main.cf
# 追記
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = lmdb:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
SMTP認証情報設定
sudo vi /etc/postfix/sasl_passwd
# 以下を書く、謎の文字列は「アプリパスワード」
# https://myaccount.google.com/
[smtp.gmail.com]:587 your-email@gmail.com:your-app-password
# postmap でファイル作成
postmap /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd*
# 設定確認、反映
postfix check
systemctl restart postfix
送信テスト
メール送信テスト
# mailコマンドをインストール
sudo dnf install mailx
# 送信テスト
echo "テストメール本文" | mail -s "テスト件名" recipient@example.com
メール送信ログ確認
# メール送信ログ
sudo tail -n 100 /var/log/maillog
# キューを確認
mailq
# キューを削除
postsuper -d ALL
運用コマンド
🔍 ログ関連
ログサイズ確認
sudo du -sh /var/log/* | sort -hr | head -n 20
Apacheログの確認
sudo tail -f /var/log/httpd/access_log
sudo tail -f /var/log/httpd/error_log
Postfixログ確認
sudo tail -f /var/log/maillog
🔀 サービス操作
起動・停止・再起動
sudo systemctl start <サービス名>
sudo systemctl stop <サービス名>
sudo systemctl restart <サービス名>
ステータス確認
sudo systemctl status <サービス名>
自動起動設定
sudo systemctl enable <サービス名>
sudo systemctl disable <サービス名>
🔧 ネットワーク・ポート確認
ポートリスン状況
sudo ss -tuln
接続テスト (telnet / nc)
telnet 127.0.0.1 11211
# または
nc -zv 127.0.0.1 11211
🔥 ファイアウォール
ポート開放 & リロード
sudo firewall-cmd --add-service=<サービス名> --permanent
sudo firewall-cmd --add-port=<ポート番号>/tcp --permanent
sudo firewall-cmd --reload
# 確認
sudo firewall-cmd --list-all
トラブルシューティング
Apache × VMware HGFS 開発環境構築まとめ
✅ Apache の起動失敗の原因
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUNDが$OPTIONS未定義で失敗
→$OPTIONSを削除 or 定義が必要Alias警告:複数の設定ファイルが存在(無害だが整理推奨)ErrorLog,CustomLogの出力先が 書き込み不可(HGFS) だとhttpdが起動できない
📁 VMware 共有フォルダ(HGFS)の特性
/home/nfsmountなどに.host:/をfuse.vmhgfs-fuseでマウント- 所有者が
rootになりやすく、Apache(apacheユーザー)から書き込み不可 .htaccessが効かない、パーミッションでエラーになる等の影響あり
📜 .htaccess が効かない・500になる原因と対策
| 原因 | 対策 |
|---|---|
AllowOverride が None |
<Directory> に AllowOverride All を設定 |
RewriteEngine 等で 500 |
mod_rewrite 有効化 & AllowOverride All |
<IfModule>, <FilesMatch> 使用で 500 |
.htaccess で許可されていない指令 |
<DirectoryMatch> がマッチしない |
<Directory> を使う方が確実 |
🛡 SSL 証明書パスフレーズ問題
- Apache 自動起動時にパスフレーズ入力が必要 → 自動起動不可
- 対策:
パスフレーズを削除した証明書を作成
openssl rsa -in xxx.key -out xxx.nopass.key - Apache の設定ファイルでパスフレーズなしの証明書を使用する