2024年12月12日、CentOS Stream 10 がリリースされました。約3年ぶりのバージョンアップです。CentOS Stream 10 は、そのダウンストリームにあたる Red Hat Enterprise Linux(RHEL)10 に先駆けて、新機能の追加やバグ修正が行われるのが特徴です。そこで今回は、CentOS Stream 10 における LAMP 構成のインストール手順についてまとめました。
- CentOS Stream 10 のリリースノート
- サードパーティリポジトリの対応状況
- CentOS Stream 10 のダウンロード
- マシン構成
- CentOS Stream 10 のインストール
- rootユーザーの利用について
- ネットワーク関連設定の例
- 基本パッケージのインストール
- パッケージのアップデート
- cockpit の停止
- firewalld設定
- Chrony設定(NTP)
- メール送信設定(Gmail経由)
- サードパーティリポジトリの追加
- Apache・PHP・MySQL のインストール
- PHP の設定
- Apache httpd の設定
- 自己署名のサーバー証明書の作成(HTTPS用)
- Apache HTTPS(SSL/TLS)の設定
- MySQL の設定
- ログローテーション設定
- 自動起動の設定確認
CentOS Stream 10 のリリースノート
前バージョンからの変更点は以下のリリースノートを参照してください。CentOS Stream 10 では Xorgサーバー、GIMP、LibreOffice、Inkscape、Redis(Valkeyに変更)が削除されています。
CentOS Stream 10 のサポート期限
次バージョンがリリースされる2030年までサポートされる予定です。正確なサポート期限は RHEL 10 のフルサポートフェーズの終了日になります。
サードパーティリポジトリの対応状況
既に EPEL、Remi は CentOS Stream 10 に対応しています。インストール方法は次の通りです。
EPEL
EPEL は、標準の BaseOSリポジトリからもインストールできますが、公式パーマリンクをインストールすることが推奨されています。(EPELを利用する場合は、CRBリポジトリを有効化する必要があります)
参考資料:Getting started with EPEL
dnf config-manager --set-enabled crb dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
Remi
最新の PHP が利用できる Remiリポジトリは以下のコマンドでインストールできます。(Remiを利用する場合は、EPELリポジトリが必要になります)
参考資料:Repository Configuration - Remi's RPM repository
dnf install https://rpms.remirepo.net/enterprise/remi-release-10.rpm dnf config-manager --set-enabled remi
CentOS Stream 10 のダウンロード
CentOS Stream のダウンロードページ からインストール先マシンのアーキテクチャに合わせて CentOS Stream 10 の ISOイメージをダウンロードしてください。アーキテクチャは、一般的な Windows PC なら「x86_64」、Appleシリコン搭載の Mac なら「ARM64」になります。
マシン構成
システム要件
CentOS Stream 10(RHEL 10)を ISOイメージでインストールする場合のシステム要件は次の通りです。詳細は以下の資料をご参照ください。
参考資料:Chapter 1. System requirements and supported architectures | Red Hat Product Documentation
- ストレージ:10GB以上
- メモリ:1.5GB以上
今回のマシン構成
今回は、VirtualBox の仮想マシンに CentOS Stream 10 をインストールします。
VirtualBoxの仮想マシンのタイプに CentOS および RHEL はありませんので「Linux Fedora」を選択してください。
■仮想マシン構成
タイプ:Linux
subtype:Fedora
メモリ:2048MB
HDD:20GB
CPU:2コア
■ネットワーク
アダプター1:NAT
アダプター2:ホストオンリーネットワーク(固定IPアドレスを設定)
■ネットワーク設定(※ご自分の環境に合わせて設定してください)
ホスト名: centos10
固定IPアドレス:192.168.56.201/24
DNSサーバ: 1.1.1.1
DNSサーバ: 8.8.8.8
CentOS Stream 10 のインストール
ダウンロードした ISOイメージ(もしくはそれを書き込んだメディア)からマシンを起動します。
[↑]キーで「Install CentOS Stream 10」を選択して、エンターを押します。
GUI画面が表示されたら「日本語 Japanese」「日本語(日本)」を選択して「続行」をクリックします。
下のような表示になるまで少し待ってから「インストール先」をクリックします。
インストール先のハードディスクを選択して、「完了」をクリックします。
ソフトウェアの選択を「最小限のインストール」に変更します。
下にスクロールして「ユーザーの作成」をクリックします。セキュリティ対策のため root アカウントは無効になっていますので、root アカウントの代わりとなる管理者ユーザーを作成しておきましょう。
以下のように入力/選択して「完了」をクリックします。(必ず「このユーザーを管理者にする」にチェックを入れてください)下で入力しているユーザー名はあくまで例です、オリジナルのユーザー名を設定しましょう。
「インストールの開始」をクリックします。パーティションの作成とインストールが開始します。
インストールが完了するまでしばらく待ちます。
インストールが完了したら「システムの再起動」をクリックします。
再起動できない場合やインストーラーが起動してしまう場合は、マシンの電源を一度オフにして、ISOイメージ(もしくはそれを書き込んだメディア)を取り除いてから起動してください。
CentOS Stream 10 が起動したら作成した管理者ユーザーでログインします。
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
ホスト名の設定
ホスト名「centos10」を設定し、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-b3.nict.go.jp 1 6 17 10 +318us[ +401us] +/- 5021us
^+ ntp-a3.nict.go.jp 1 6 17 10 -109us[ -26us] +/- 4829us
^+ ntp-a2.nict.go.jp 1 6 17 10 +123us[ +206us] +/- 5250us
時刻があまりにもズレている場合は、dateコマンドで手動で時刻を合わせてください。
メール送信設定(Gmail経由)
サーバーから Gmail 経由でメールを送信できるように設定します。(必要がなければこの設定は不要です)
Postfix をインストールします。
Googleアカウントの設定、および Postfix の設定手順は以下の記事をご参照ください。
PostfixからGmail経由でメールを送信するための設定メモ
メールが送信できることが確認できたら以下を設定します。
自動起動設定
・root宛メールの送信先を変更します
vi /etc/aliases
-----(下記を最終行に追加)-----
メールエイリアスのDBファイルを更新します
root宛のメールが、自分のメールアドレス宛に届くことを確認します
サードパーティリポジトリの追加
EPEL
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
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年4月13日時点のものです。
Apache httpd(2.4.63-1)
dnf install httpd-devel
dnf install mod_ssl
PHP(8.4.6-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.2-5)
dnf install mysql-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
以上です。設定お疲れ様でした!
コメント