2024年5月9日 Rocky Linux 9.4 がリリース されました。Rocky Linux 9.4 では Python 3.12 が利用可能になり、Ruby 3.3.0、PHP 8.2、nginx 1.24、MariaDB 10.11、PostgreSQL 16が新しいモジュールストリームとして追加されています。また、Git がバージョン 2.43.0 に、Git LFS がバージョン 3.4.1 にリベースされました。今回は、Rocky Linux 9.4 で LAMP環境を構築する手順をまとめてみました。
- Rocky Linux 9.4 のリリースノート
- Rocky Linux 9.4 のダウンロード
- Rocky Linux 9.4 のインストール
- rootユーザーの利用について
- ネットワーク関連設定の例
- 基本パッケージのインストール
- パッケージのアップデート
- 不要サービスの停止
- cockpit の削除
- firewalld設定
- Chrony設定(NTP)
- メール送信設定(Gmail経由)
- サードパーティリポジトリの追加
- Apache・PHP・MySQL のインストール
- PHPの設定
- Apache httpd の設定
- 自己署名のサーバー証明書の作成(HTTPS用)
- Apache HTTPS(SSL/TLS)の設定
- MySQL 8.0 の設定
- ログローテーション設定
- 自動起動の設定確認
Rocky Linux 9.4 のリリースノート
Rocky Linux 9.4 のダウンロード
Rocky Linux のダウンロードページ から インストール先マシンのアーキテクチャに合わせて「Default Images」の「Minimal ISO」イメージをダウンロードします。アーキテクチャは x86_64 のマシンが多いですが、Appleシリコンの macOS 上の仮想マシンにインストールする場合はARMアーキテクチャ(aarch64)の ISOイメージをダウンロードしてください。
ISOイメージのダウンロードが終わったら、チェックサムが一致していることを確認しましょう。
$ shasum -a 256 Rocky-9.4-aarch64-minimal.iso 0a3e9464fe3fb00ec04e3cce138ec4ccfdc2757e6eef50313fe52fe3332f46b5 Rocky-9.4-aarch64-minimal.iso $ grep Rocky-9.4-aarch64-minimal.iso CHECKSUM # Rocky-9.4-aarch64-minimal.iso: 1694892032 bytes SHA256 (Rocky-9.4-aarch64-minimal.iso) = 0a3e9464fe3fb00ec04e3cce138ec4ccfdc2757e6eef50313fe52fe3332f46b5
Rocky Linux 9.4 のインストール
ダウンロードした ISOイメージ(もしくはそれを書き込んだメディア)からマシンを起動します。
[↑]キーで「Install Rocky Linux 9.4」を選択して、エンターを押します。
GUI画面が表示されたら「日本語 Japanese」「日本語(日本)」を選択して「続行」をクリックします。
下のような表示になるまで少し待ってから「インストール先」をクリックします。
インストール先のハードディスクを選択して、「完了」をクリックします。
ソフトウェアの選択が「最小限のインストール」になっていることを確認してください。(もし違うようでしたら「最小限のインストール」に変更してください)
下にスクロールして「ユーザーの作成」をクリックします。Rocky Linux 9 では、セキュリティ対策のため root アカウントは無効になっていますので、root アカウントの代わりとなる管理者ユーザーを作成しておきましょう。
以下のように入力/選択して「完了」をクリックします。(必ず「このユーザーを管理者にする」にチェックを入れてください)下で入力しているユーザー名はあくまで例です、オリジナルのユーザー名を設定しましょう。
「インストールの開始」をクリックします。パーティションの作成とインストールが開始します。
インストールが完了するまでしばらく待ちます。
インストールが完了したら「システムの再起動」をクリックします。
再起動できない場合やインストーラーが起動してしまう場合は、マシンの電源を一度オフにして、ISOイメージ(もしくはそれを書き込んだメディア)を取り除いてから起動してください。
Rocky Linux 9.4 が起動したら作成した管理者ユーザーでログインします。
rootユーザーの利用について
この記事では rootユーザーで設定を行うことを前提にしています。これ以降の手順は、管理者ユーザーでログインしたら次のコマンドで rootユーザーになってから実施してください。
sudo -s
※通常の運用時は sudo <コマンド> を利用することをオススメします。
ネットワーク関連設定の例
ネットワーク関連の設定は、ご自分の環境に合わせて設定してください。
固定IPアドレスの設定
固定IPアドレスを設定する場合は、nmcli
コマンドでNICのコネクション名を確認します。(例えば以下の表示のコネクション名は「enp0s1」です。
nmcli dev s
DEVICE TYPE STATE CONNECTION
enp0s1 ethernet connected enp0s1
lo loopback connected (externally) lo
コネクション名指定して、固定IPアドレスを設定します。必要に応じてゲートウェイも設定してください。
nmcli con mod enp0s1 ipv4.method manual
nmcli con mod enp0s1 ipv4.gateway 192.0.2.1
NICを再起動して設定を反映させます。
nmcli con up enp0s1
DNSサーバの設定
DNSサーバを手動で設定する場合は、DHCPによるDNSサーバの自動設定を無効にします。
DNSサーバを設定し、NetworkManager を再起動します。
systemctl restart NetworkManager
DNSサーバが設定されていることを確認します。
-----(以下の表示があればOK)-----
# Generated by NetworkManager
nameserver 1.1.1.1
nameserver 8.8.8.8
ホスト名の設定
ホスト名「rocky9」を設定し、hostnamed を再起動します(一度ログアウトしログインすると設定したホスト名が反映されていることを確認できます)
systemctl restart systemd-hostnamed
基本パッケージのインストール
開発ツールなど、基本的なパッケージをインストールしておきます。
dnf -y groupinstall development
パッケージのアップデート
インストール済みのパッケージを、最新版にアップデートします。
不要サービスの停止
下記のコマンドを実行
systemctl disable kdump
systemctl disable mdmonitor
OSを再起動します
cockpit の削除
cockpit がインストールさてれいると SSHログイン時に、以下のようなメッセージが表示されます。
必要がなければ cockpit をアンインストールしてください。上のメッセージが表示されなくなります。
firewalld設定
・現在の設定の確認
firewall-cmd --list-all
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: cockpit dhcpv6-client ssh
ports:
(略)
初期設定では publicゾーンの cockpit、dhcpv6-client、ssh サービスが許可されています。
cockpit と dhcpv6-client を使わない場合は、削除しておきましょう。
firewall-cmd --remove-service=dhcpv6-client --permanent
追加で HTTP(80/tcp) と HTTPS(443/tcp) を許可しておきます
firewall-cmd --add-port=443/tcp --permanent
設定を読込みます
・設定を確認します
firewall-cmd --list-all
-----(以下の表示であればOK)-----
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: 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 -y install epel-release
dnf -y update
Remi
dnf -y config-manager --set-enabled remi
Remi リポジトリから PHP8.3 がインストールされるように php:remi-8.3 モジュールをインストールします。
dnf -y module install php:remi-8.3
【補足】
Remi リポジトリからは PHP8.3 以外に 以下のバージョンの PHPモジュールをインストールすることができます。
dnf module list php Remi's Modular repository for Enterprise Linux 9 - 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 [e] common [d] [i], devel, minimal PHP scripting language
Apache・PHP・MySQL のインストール
※バージョンは2024年5月28日時点のものです。
Apache httpd(2.4.57-8)
dnf -y install httpd-devel
dnf -y install mod_ssl
PHP(8.3.7-1)
dnf -y install php-devel
dnf -y install php-pdo
dnf -y install php-mysqlnd
dnf -y install php-mbstring
dnf -y install php-gd
dnf -y install php-pear
dnf -y install composer
dnf -y install php-pecl-apc-devel
MySQL(8.0.36-1)
dnf -y install mysql-server
PHPの設定
・PHPの設定
vi /etc/php.ini
↓
expose_php = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT (500行目付近)
↓
error_reporting = E_ALL & ~E_NOTICE
;date.timezone = (942行目付近)
↓
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 8.0 の設定
・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
skip-character-set-client-handshake
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 (365 rotations)
empty log files are rotated, 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 (365 rotations)
empty log files are rotated, 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
以上です。設定お疲れ様でした!
コメント