AlmaLinux 10 サーバ構築ガイド

このガイドは、VMware Workstation Pro 17上でAlmaLinux 10を使用したWebサーバ構築の手順をまとめたものです。

AlmaLinux 10 Apache PHP 8.x Memcached Postfix

初期設定

リポジトリ追加

必要なリポジトリを追加します。

リポジトリ一覧確認
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になる原因と対策

原因 対策
AllowOverrideNone <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 の設定ファイルでパスフレーズなしの証明書を使用する