CentOS Stream 10 LAMP環境構築メモ【Apache2.4+MySQL8.4+PHP8.4】

Linux
Linux
スポンサーリンク

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 では 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.addresses 192.168.56.201/24
nmcli con mod enp0s9 ipv4.method manual

NICを再起動して設定を反映させます。

nmcli con down enp0s9
nmcli con up enp0s9

以上で、仮想マシンに ssh ログインができるようになります。

ssh centos10@192.168.56.201

DNSサーバの設定

DNSサーバを手動で設定する場合は、DHCPによるDNSサーバの自動設定を無効にします。
(以下はアダプター1(NAT)のDNSサーバの設定例です)

nmcli con mod enp0s8 ipv4.ignore-auto-dns yes

DNSサーバを設定し、NetworkManager を再起動します。

nmcli con mod enp0s8 ipv4.dns '1.1.1.1 8.8.8.8'
systemctl restart NetworkManager

DNSサーバが設定されていることを確認します。

cat /etc/resolv.conf
-----(以下の表示があればOK)-----
# Generated by NetworkManager
nameserver 1.1.1.1
nameserver 8.8.8.8

ホスト名の設定

ホスト名「centos10」を設定し、hostnamed を再起動します(一度ログアウトしログインすると設定したホスト名が反映されていることを確認できます)

nmcli general hostname centos10
systemctl restart systemd-hostnamed

基本パッケージのインストール

開発ツールなど、基本的なパッケージをインストールしておきます。

dnf groupinstall base
dnf groupinstall development

パッケージのアップデート

インストール済みのパッケージを、最新版にアップデートします。

dnf update

OSを再起動します

shutdown -r now

cockpit の停止

必要がなければ cockpit(Webベースのサーバー管理ツール)を停止します。

systemctl stop cockpit.socket
systemctl disable cockpit.socket

firewalld設定

・現在の設定の確認
firewall-cmd --list-all

public (default, active)
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 を使わない場合は、削除しておきましょう。

firewall-cmd --remove-service=cockpit --permanent

追加で HTTP(80/tcp) と HTTPS(443/tcp) を許可しておきます

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent

設定を読込みます

firewall-cmd --reload

・設定を確認します
firewall-cmd --list-all
-----(以下の表示であればOK)-----

public (default, active)
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)

タイムゾーンを日本に変更

timedatectl set-timezone Asia/Tokyo

・参照先のNTPサーバーを変更します。
vi /etc/chrony.conf

pool 2.centos.pool.ntp.org iburst
 ↓
pool ntp.nict.jp iburst

chronyd を再起動

systemctl restart chronyd

自動起動設定

systemctl enable chronyd

・10分ほど経過したら動作を確認します。
chronyc sources -v
-----(以下のような表示があればOK)-----

^- ntp-k1.nict.jp 1 6 17 11 +849us[ +932us] +/- 11ms
^* 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コマンドで手動で時刻を合わせてください。

date -s 'YYYY/MM/DD hh:mm:ss'

メール送信設定(Gmail経由)

サーバーから Gmail 経由でメールを送信できるように設定します。(必要がなければこの設定は不要です)

Postfix をインストールします。

dnf install postfix

Googleアカウントの設定、および Postfix の設定手順は以下の記事をご参照ください。

PostfixからGmail経由でメールを送信するための設定メモ

メールが送信できることが確認できたら以下を設定します。

自動起動設定

systemctl enable postfix

・root宛メールの送信先を変更します
vi /etc/aliases
-----(下記を最終行に追加)-----

root: <自分のメールアドレス>

メールエイリアスのDBファイルを更新します

newaliases

root宛のメールが、自分のメールアドレス宛に届くことを確認します

echo test | sendmail root

サードパーティリポジトリの追加

EPEL

dnf config-manager --set-enabled crb
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm

Remi

dnf install https://rpms.remirepo.net/enterprise/remi-release-10.rpm
dnf config-manager --set-enabled remi

Remi リポジトリから PHP8.4 がインストールされるように php:remi-8.4 モジュールをインストールします。

dnf module reset php
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
dnf install httpd-devel
dnf install mod_ssl

PHP(8.4.6-1)

dnf install php
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
dnf install mysql-server

PHP の設定

・PHPの設定
vi /etc/php.ini

expose_php = On (400行目付近)
 ↓
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 を自動起動を設定し起動します。

systemctl enable --now php-fpm

Apache httpd の設定

不要なコンフィグを読込まないようにしておきます。

mv -i /etc/httpd/conf.d/autoindex.conf /etc/httpd/conf.d/autoindex.conf.org
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

オリジナルのコンフィグをバックアップ

mv -i /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org

・コンフィグを作成します。
vi /etc/httpd/conf/httpd.conf

Apache httpd の自動起動を設定し起動ます。

systemctl enable --now httpd

自己署名のサーバー証明書の作成(HTTPS用)

公開サーバーであれば、簡単に Let's Encrypt のサーバー証明証を取得することができます。詳細は以下の記事をご参照ください。
Let's Encrypt サーバー証明書の取得と自動更新設定メモ

秘密鍵の作成

openssl ecparam -name prime256v1 -genkey -out server.key

SSLサーバー証明書の作成(有効期限30年)
-subjオプションで C(Country Name)に2文字の国名コード、CN(Common Name)にサイトのドメイン名(FQDN)を指定してください。

openssl req -new -x509 \
-days 10950 \
-key server.key \
-subj '/C=JP/CN=www.example.com' \
-out server.crt

秘密鍵とSSL証明書を移動

mv -i server.key /etc/pki/tls/private/
mv -i server.crt /etc/pki/tls/certs/

パーミッションを変更

chmod 600 /etc/pki/tls/private/server.key
chmod 600 /etc/pki/tls/certs/server.crt

SELinux を有効にしている場合は、秘密鍵とSSL証明書に正しいセキュリティコンテキストをつけておきましょう。(Apache httpd 起動時にエラーが発生することがあります)

restorecon /etc/pki/tls/private/server.key
restorecon /etc/pki/tls/certs/server.crt

Apache HTTPS(SSL/TLS)の設定

SSL設定ファイルのオリジナルをバックアッップします

mv -i /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.org

SSL設定ファイルを作成します。
vi /etc/httpd/conf.d/ssl.conf

Apache httpd を再起動します。

systemctl restart httpd

WEBブラウザで HTTPSで接続できることを確認します。

【補足】
自己署名のサーバー証明書の場合は警告が表示され、接続できない場合があります。FireFox で「危険性を承知で続行」ボタンを押して接続するか、Google Chrome の場合は「thisisunsafe」とタイプすると接続できます。

MySQL の設定

・MySQLの設定ファイルに以下を追加します。
vi /etc/my.cnf.d/mysql-server.cnf

slow_query_log=ON
slow_query_log_file=/var/log/mysql/slow_query.log
long_query_time=1.0
 
log_timestamps=SYSTEM

MySQL の自動起動を設定し起動します。

systemctl enable --now mysqld

mysql_secure_installation の実行

初期状態では、rootユーザーがパスワードなしで MySQLに接続できるようになっていますのでパスワードを設定しておきます。

mysql_secure_installation コマンドを実行すると、root ユーザーのパスワードを変更し、不要なユーザーやDBも削除してくれます。パスワードは、8文字以上で英数大文字小文字と記号が含まれていないとポリシー違反で弾かれてしまいますので注意です。パスワードポリシーを変更したい場合は「--use-default」オプションなしで実行してください。

mysql_secure_installation --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!

ログローテーション設定

設定ファイルのバックアップ用ディレクトリを作成しておきます。

mkdir /etc/logrotate.off

Apacheログのローテーション設定

オリジナルの設定ファイルをバックアップします

mv -i /etc/logrotate.d/httpd /etc/logrotate.off/

・設定ファイルを作成します
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ログのローテーション設定

オリジナルの設定ファイルをバックアップします

mv -i /etc/logrotate.d/mysqld /etc/logrotate.off/

・設定ファイルを作成します
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

[mysqladmin]
user=root
password="<パスワード>"

パスワードを書いているのでパーミッションを変更

chown root:root /root/.my.cnf
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を再起動して、各種サービスが起動している事を確認しましょう。

shutdown -r now
(再起動後に以下を実行)
ps aux | grep -e httpd -e php-fpm -e mysqld -e chronyd

以上です。設定お疲れ様でした!

コメント

タイトルとURLをコピーしました