2025年5月27日、AlmaLinux 10.0 がリリース されました。約3年ぶりのメジャーバージョンアップです。AlmaLinux 10.0 では、各種ミドルウェアが更新され Python 3.12、PHP 8.3、Apache HTTP 2.4.62、MySQL 8.4 などが利用できるようになっています。また、AlmaLinux 10.0 から x86-64-v2 という新しいアーキテクチャが追加されています。基本的には RHEL10 に準じて x86-64-v3 に最適化しますが、AlmaLinux 10.0 では古いハードウェア用に x86-64-v2 対応のバイナリも提供されます。そこで今回は、AlmaLinux 10.0 で LAMP環境を構築する手順をまとめてみました。
- AlmaLinux 10.0 のリリースノート
- AlmaLinux 10.0 のダウンロード
- マシン構成
- AlmaLinux 10.0 のインストール
- rootユーザーの利用について
- ネットワーク関連設定の例
- 基本パッケージのインストール
- パッケージのアップデート
- cockpit の停止
- firewalld設定
- Chrony設定(NTP)
- メール送信設定(Gmail経由)
- サードパーティリポジトリの追加
- Apache・PHP・MySQL のインストール
- PHP の設定
- Apache httpd の設定
- 自己署名のサーバー証明書の作成(HTTPS用)
- Apache HTTPS(SSL/TLS)の設定
- MySQL の設定
- ログローテーション設定
- 自動起動の設定確認
AlmaLinux 10.0 のリリースノート
AlmaLinux 10.0 の全ての変更点は、アップストリームとなる Red Hat Enterprise Linux 10.0 のリリースノートをご参照ください。
AlmaLinux 10.0 のダウンロード
AlmaLinuxのダウンロードページ から インストール先マシンのアーキテクチャに合わせて 「AlmaLinux OS 10.0 Minimal ISO」のISOイメージをダウンロードします。アーキテクチャは Intel/AMD(x86_64)のマシンが多いですが、Appleシリコンの macOS 上の仮想マシンにインストールする場合は ARM64(AArch64)の ISOイメージをダウンロードしてください。
ISOイメージのダウンロードが終わったら、以下の手順を参考にしてチェックサムを確認しましょう。
Installation instructions | AlmaLinux 10.0 Release Notes
マシン構成
システム要件
AlmaLinux 10.0 を ISOイメージでインストールする場合のシステム要件は次の通りです。
- ストレージ:10GB以上(推奨20GB以上)
- メモリ:1.5GB以上
参考資料:AlmaLinux installation guide (ISOs)
今回のマシン構成
今回は、VirtualBox の仮想マシンに AlmaLinux 10.0 をインストールします。
VirtualBoxの仮想マシンのタイプに AlmaLinux および RHEL はありませんのでアップストリームの「Linux Fedora」を選択してください。
■仮想マシン構成
タイプ:Linux
subtype:Fedora
メモリ:2048MB
HDD:20GB
CPU:2コア
■ネットワーク
アダプター1:NAT
アダプター2:ホストオンリーネットワーク(固定IPアドレスを設定)
■ネットワーク設定(※ご自分の環境に合わせて設定してください)
ホスト名: alma10
固定IPアドレス:192.168.56.201/24
DNSサーバ: 1.1.1.1
DNSサーバ: 8.8.8.8
AlmaLinux 10.0 のインストール
ダウンロードした ISOイメージ(もしくはそれを書き込んだメディア)からマシンを起動します。
[↑]キーで「Install AlmaLinux 10.0」を選択して、エンターを押します。
GUI画面が表示されたら「日本語 Japanese」「日本語(日本)」を選択して「続行」をクリックします。
下のような表示になるまで少し待ってから「インストール先」をクリックします。
インストール先のハードディスクを選択して、「完了」をクリックします。
ソフトウェアの選択が「最小限のインストール」になっていることを確認してください。(もし違うようでしたら「最小限のインストール」に変更してください)
下にスクロールして「ユーザーの作成」をクリックします。セキュリティ対策のため root アカウントは無効になっていますので、root アカウントの代わりとなる管理者ユーザーを作成しておきましょう。
以下のように入力/選択して「完了」をクリックします。(必ず「このユーザーを管理者にする」にチェックを入れてください)下で入力しているユーザー名はあくまで例です、オリジナルのユーザー名を設定しましょう。
「インストールの開始」をクリックします。パーティションの作成とインストールが開始します。
インストールが完了するまでしばらく待ちます。
インストールが完了したら「システムの再起動」をクリックします。
再起動できない場合やインストーラーが起動してしまう場合は、マシンの電源を一度オフにして、ISOイメージ(もしくはそれを書き込んだメディア)を取り除いてから起動してください。
AlmaLinux 10.0 が起動したら作成した管理者ユーザーでログインします。
rootユーザーの利用について
この記事では rootユーザーで設定を行うことを前提にしています。これ以降の手順は、管理者ユーザーでログインしたら次のコマンドで rootユーザーになってから実施してください。
sudo -s
※通常の運用時は sudo <コマンド> を利用することをオススメします。
ネットワーク関連設定の例
ネットワーク関連の設定は、ご自分の環境に合わせて設定してください。
固定IPアドレスの設定
固定IPアドレスを設定する場合は、nmcli
コマンドでNICのコネクション名を確認します。
以下は VirtualBox 仮想マシンの出力例ですが、アダプター1(NAT)はのコネクション名は「enp0s8」、アダプター2(ホストオンリーネットワーク)のコネクション名は「enp0s9」であることが確認できます。(コネクション名に対応するアダプターは ip addr の出力などを参考にして判断してください)
nmcli dev s DEVICE TYPE STATE CONNECTION enp0s8 ethernet connected enp0s8 enp0s9 ethernet connected enp0s9 lo loopback connected (externally) lo
アダプター2(ホストオンリーネットワーク)のコネクション名指定して、固定IPアドレスを設定します。
nmcli con mod enp0s9 ipv4.method manual
NICを再起動して設定を反映させます。
nmcli con up enp0s9
以上で、仮想マシンに ssh ログインができるようになります。
DNSサーバの設定
DNSサーバを手動で設定する場合は、DHCPによるDNSサーバの自動設定を無効にします。
(以下はアダプター1(NAT)のDNSサーバの設定例です)
DNSサーバを設定し、NetworkManager を再起動します。
systemctl restart NetworkManager
DNSサーバが設定されていることを確認します。
-----(以下の表示があればOK)-----
# Generated by NetworkManager
nameserver 1.1.1.1
nameserver 8.8.8.8
ホスト名の設定
ホスト名「alma10」を設定し、hostnamed を再起動します(一度ログアウトしログインすると設定したホスト名が反映されていることを確認できます)
systemctl restart systemd-hostnamed
基本パッケージのインストール
開発ツールなど、基本的なパッケージをインストールしておきます。
dnf groupinstall development
パッケージのアップデート
インストール済みのパッケージを、最新版にアップデートします。
OSを再起動します。
cockpit の停止
必要がなければ cockpit(Webベースのサーバー管理ツール)を停止します。
systemctl disable cockpit.socket
firewalld設定
・現在の設定の確認
firewall-cmd --list-all
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: enp0s8 enp0s9
sources:
services: cockpit dhcpv6-client ssh
ports:
(略)
初期設定では publicゾーンの cockpit、dhcpv6-client、ssh サービスが許可されています。
cockpit を使わない場合は、削除しておきましょう。
追加で HTTP(80/tcp) と HTTPS(443/tcp) を許可しておきます
firewall-cmd --add-port=443/tcp --permanent
設定を読込みます
・設定を確認します
firewall-cmd --list-all
-----(以下の表示であればOK)-----
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: enp0s8 enp0s9
sources:
services: dhcpv6-client ssh
ports: 80/tcp 443/tcp
(略)
Chrony設定(NTP)
タイムゾーンを日本に変更
・参照先のNTPサーバーを変更します。
vi /etc/chrony.conf
↓
pool ntp.nict.jp iburst
chronyd を再起動
自動起動設定
・10分ほど経過したら動作を確認します。
chronyc sources -v
-----(以下のような表示があればOK)-----
^- ntp-b2.nict.go.jp 1 6 77 61 +1423us[+1423us] +/- 3830us
^* ntp-a2.nict.go.jp 1 6 77 62 +269us[ +547us] +/- 4458us
時刻があまりにもズレている場合は、dateコマンドで手動で時刻を合わせてください。
メール送信設定(Gmail経由)
サーバーから Gmail 経由でメールを送信できるように設定します。(必要がなければこの設定は不要です)
Postfix をインストールします。
Googleアカウントの設定、および Postfix の設定手順は以下の記事をご参照ください。
PostfixからGmail経由でメールを送信するための設定メモ
メールが送信できることが確認できたら以下を設定します。
自動起動設定
・root宛メールの送信先を変更します
vi /etc/aliases
-----(下記を最終行に追加)-----
メールエイリアスのDBファイルを更新します
root宛のメールが、自分のメールアドレス宛に届くことを確認します
サードパーティリポジトリの追加
EPEL
dnf install epel-release
dnf update
Remi
dnf config-manager --set-enabled remi
Remi リポジトリから PHP8.4 がインストールされるように php:remi-8.4 モジュールをインストールします。
dnf module install php:remi-8.4
【補足】
Remi リポジトリからは PHP8.4 以外に 以下のバージョンの PHPモジュールをインストールすることができます。
dnf module list php Remi's Modular repository for Enterprise Linux 10 - aarch64 Name Stream Profiles Summary php remi-7.4 common [d], devel, minimal PHP scripting language php remi-8.0 common [d], devel, minimal PHP scripting language php remi-8.1 common [d], devel, minimal PHP scripting language php remi-8.2 common [d], devel, minimal PHP scripting language php remi-8.3 common [d], devel, minimal PHP scripting language php remi-8.4 [e] common [d] [i], devel, minimal PHP scripting language ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Apache・PHP・MySQL のインストール
※バージョンは2025年7月14日時点のものです。
Apache httpd(2.4.63-1)
dnf install httpd-devel
dnf install mod_ssl
PHP(8.4.10-1)
dnf install php-devel
dnf install php-pdo
dnf install php-mysqlnd
dnf install php-mbstring
dnf install php-gd
dnf install php-pear
dnf install composer
dnf install php-pecl-apc-devel
MySQL(8.4.4-2)
dnf install mysql8.4-server
PHP の設定
・PHPの設定
vi /etc/php.ini
↓
expose_php = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT (491行目付近)
↓
error_reporting = E_ALL & ~E_NOTICE
;date.timezone = (933行目付近)
↓
date.timezone = 'Asia/Tokyo'
php-fpm を自動起動を設定し起動します。
Apache httpd の設定
不要なコンフィグを読込まないようにしておきます。
mv -i /etc/httpd/conf.d/userdir.conf /etc/httpd/conf.d/userdir.conf.org
mv -i /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.org
オリジナルのコンフィグをバックアップ
・コンフィグを作成します。
vi /etc/httpd/conf/httpd.conf
Apache httpd の自動起動を設定し起動ます。
自己署名のサーバー証明書の作成(HTTPS用)
Let's Encrypt サーバー証明書の取得と自動更新設定メモ
秘密鍵の作成
SSLサーバー証明書の作成(有効期限30年)
-subjオプションで C(Country Name)に2文字の国名コード、CN(Common Name)にサイトのドメイン名(FQDN)を指定してください。
-days 10950 \
-key server.key \
-subj '/C=JP/CN=www.example.com' \
-out server.crt
秘密鍵とSSL証明書を移動
mv -i server.crt /etc/pki/tls/certs/
パーミッションを変更
chmod 600 /etc/pki/tls/certs/server.crt
SELinux を有効にしている場合は、秘密鍵とSSL証明書に正しいセキュリティコンテキストをつけておきましょう。(Apache httpd 起動時にエラーが発生することがあります)
restorecon /etc/pki/tls/certs/server.crt
Apache HTTPS(SSL/TLS)の設定
SSL設定ファイルのオリジナルをバックアッップします
SSL設定ファイルを作成します。
vi /etc/httpd/conf.d/ssl.conf
Apache httpd を再起動します。
WEBブラウザで HTTPSで接続できることを確認します。
【補足】
自己署名のサーバー証明書の場合は警告が表示され、接続できない場合があります。FireFox で「危険性を承知で続行」ボタンを押して接続するか、Google Chrome の場合は「thisisunsafe」とタイプすると接続できます。
MySQL の設定
・MySQLの設定ファイルに以下を追加します。
vi /etc/my.cnf.d/mysql-server.cnf
slow_query_log_file=/var/log/mysql/slow_query.log
long_query_time=1.0
log_timestamps=SYSTEM
MySQL の自動起動を設定し起動します。
mysql_secure_installation の実行
初期状態では、rootユーザーがパスワードなしで MySQLに接続できるようになっていますのでパスワードを設定しておきます。
mysql_secure_installation コマンドを実行すると、root ユーザーのパスワードを変更し、不要なユーザーやDBも削除してくれます。パスワードは、8文字以上で英数大文字小文字と記号が含まれていないとポリシー違反で弾かれてしまいますので注意です。パスワードポリシーを変更したい場合は「--use-default」オプションなしで実行してください。
(略)
Please set the password for root here.
New password: <新しいパスワード>
Re-enter new password: <新しいパスワード>
(略)
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y ←入力してエンター
(不要なユーザーやDBを削除)
All done!
ログローテーション設定
設定ファイルのバックアップ用ディレクトリを作成しておきます。
Apacheログのローテーション設定
オリジナルの設定ファイルをバックアップします
・設定ファイルを作成します
vi /etc/logrotate.d/httpd
/var/log/httpd/*log { daily missingok dateext rotate 365 create 644 apache apache sharedscripts postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }
・確認します
logrotate -v /etc/logrotate.d/httpd
-----(下記のような表示があればOKです)-----
(略) rotating pattern: /var/log/httpd/*log after 1 days empty log files are rotated, (365 rotations), old logs are removed considering log /var/log/httpd/access_log (略)
MySQLログのローテーション設定
オリジナルの設定ファイルをバックアップします
・設定ファイルを作成します
vi /etc/logrotate.d/mysqld
/var/log/mysql/*log { daily missingok dateext rotate 365 sharedscripts postrotate if test -x /usr/bin/mysqladmin && \ /usr/bin/mysqladmin --defaults-extra-file=/root/.my.cnf ping &>/dev/null then /usr/bin/mysqladmin --defaults-extra-file=/root/.my.cnf flush-logs fi endscript }
・MySQL の root ユーザのパスワードファイルを作成
vi /root/.my.cnf
user=root
password="<パスワード>"
パスワードを書いているのでパーミッションを変更
chmod 600 /root/.my.cnf
・確認します
logrotate -v /etc/logrotate.d/mysqld
-----(下記のような表示があればOKです)-----
(略) rotating pattern: /var/log/mysql/*log after 1 days empty log files are rotated, (365 rotations), old logs are removed considering log /var/log/mysql/mysqld.log (略)
自動起動の設定確認
systemctl list-unit-files | grep -e httpd.service -e php-fpm.service -e mysqld.service -e chronyd.service -e 'UNIT FILE '
-----(STATE列がすべて「enabled」であればOKです)-----
UNIT FILE STATE PRESET chronyd.service enabled enabled httpd.service enabled disabled mysqld.service enabled disabled php-fpm.service enabled disabled
一度OSを再起動して、各種サービスが起動している事を確認しましょう。
(再起動後に以下を実行)
ps aux | grep -e httpd -e php-fpm -e mysqld -e chronyd
以上です。設定お疲れ様でした!
コメント