2020年6月15日 CentOS 8.2(2004)がリリース されました。ちょうど5ヶ月ぶりのバージョンアップです。CentOS 8.2 では Python 3.8 が導入されました。また cloud-init を使用した Microsoft Azure での仮想マシンのプロビジョニングが正しく動作するようになっています。さっそく、CentOS8.2 で LAMP構成をインストールする手順をメモしておきました。
- CentOS 8.2 (2004) リリースノート
- CentOS 8.2 (2004) のダウンロード
- マシン構成
- CentOS 8.2 (2004) のインストール
- ネットワーク関連設定
- 基本パッケージのインストール
- yum アップデート
- 不要サービスの停止
- SELinux無効設定
- firewalld設定
- Chrony設定(NTP)
- Postfix設定(Gmailリレー)
- yum リポジトリの追加
- 各種ミドルウェアのインストール
- PHPの設定
- Apache httpd の設定
- 自己署名のサーバー証明書の作成(HTTPS用)
- Apache HTTPS(SSL/TLS)の設定
- MySQL 8.0 の設定
- ログローテーション設定
- 自動起動の設定確認
CentOS 8.2 (2004) リリースノート
CentOS 8.2 (2004) のダウンロード
はじめに、CentOSのダウンロードページ から CentOS-8.2.2004-x86_64-dvd1.iso をダウンロードしておきます。
マシン構成
○仮想マシン構成
メモリ:2048MB(CentOS8では、最低でも2GB以上のメモリが必要です。メモリ4GB以上を推奨)
HDD:20GB
CPU:2コア
○ネットワークデバイス
アダプター1:NAT
アダプター2:ホストオンリーアダプター
○ネットワーク構成(※ご自分の環境に書換えてください)
ホスト名: centos82
IPアドレス:192.168.56.201/24
DNSサーバ: 8.8.8.8
CentOS 8.2 (2004) のインストール
[↑]キーで「Install CentOS Linux 8」を選択して、エンターを押します。
GUI画面が表示されたら「日本語 Japanese」「日本語( 日本)」を選択して「続行」をクリックします。
下のような表示になるまで少し待ってから「インストール先」をクリックします。(これ以降、画面のリサイズがうまくいかないためか見切れています。ご了承ください)
インストール先のハードディスクを選択して、「完了」をクリックします。
続いて「ソフトウェアの選択」をクリックします。
「最小限のインストール」を選択して、「完了」をクリックします。(リリースノートには、VirtualBoxにインストールする場合は「サーバー (GUI使用)」は選択すべきではないと書いてありますので注意しましょう)
「インストールの開始」をクリックします。パーティションの作成とインストールが開始します。
「rootパスワード」をクリックします
root ユーザーに設定するパスワードを入力して「完了」をクリックします。
インストールが完了するまでしばらく待ちます。
インストールが完了したら「再起動」をクリックします。そのままだと再度インストーラーが起動してしまうので、再起動中にインストールメディアを取り出してください。(VirtualBoxの場合は、一度仮想マシンの電源をオフにして、ストレージに追加したISOイメージを削除してください)
CentOS8が起動したら root ユーザーでログインします。
ネットワーク関連設定
NICの設定
・ネットワークデバイス名の確認
nmcli dev s
DEVICE TYPE STATE CONNECTION enp0s3 ethernet disconnected -- enp0s8 ethernet disconnected --
アダプター1(NAT)は「enp0s3」、アダプター2(ホストオンリーアダプター)は「enp0s8」がネットワークデバイス名です。 ネットワークデバイス名は、環境によって異なりますので、ご自分の環境にあわせて設定してください。
アダプター1(NAT)の設定
アダプター2(ホストオンリーアダプター)の設定
nmcli con mod enp0s8 ipv4.addresses "192.168.56.201/24"
nmcli con mod enp0s8 ipv4.method manual
上記設定で sshログインができるようになります。※DNSサーバの設定前のため、ログインに時間がかかることがあります
DNSサーバの設定
手動で設定するため、DHCPでのDNSサーバ設定を無効にします。
DNSサーバを設定し、NetworkManager を再起動します。
systemctl restart NetworkManager
DNSサーバが設定されていることを確認します。
-----(以下の表示があればOK)-----
# Generated by NetworkManager
nameserver 8.8.8.8
ホスト名の設定
ホスト名「centos82」を設定し、hostnamed を再起動します(一度ログアウトしログインすると設定したホスト名が反映されていることを確認できます)
systemctl restart systemd-hostnamed
基本パッケージのインストール
開発ツールなど、基本的なパッケージをインストールしておきます。
yum -y groupinstall development
yum -y groupinstall network-tools
yum アップデート
インストール済みのパッケージを、最新版にアップデートします。
不要サービスの停止
下記のコマンドを実行
systemctl disable kdump
systemctl disable mdmonitor
SELinux無効設定
・下記を変更
vim /etc/sysconfig/selinux
↓
SELINUX=disabled
OSを再起動します
firewalld設定
・現在の設定の確認
firewall-cmd --list-all
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: cockpit dhcpv6-client ssh
(略)
初期設定では publicゾーンに ssh(22/tcp) と cockpit(9090/tcp) のみが許可されています。
追加で HTTP(80/tcp) と HTTPS(443/tcp) を許可しておきます
firewall-cmd --add-port=443/tcp --permanent
設定を読込みます
・設定を確認します
firewall-cmd --list-ports --zone=public
-----(以下の表示があればOK)-----
Chrony設定(NTP)
タイムゾーンを日本に変更
・NTPサーバーを変更します。
vim /etc/chrony.conf
↓
server ntp.nict.jp
server ntp.nict.jp
server ntp.nict.jp
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
chronyd はゆっくり時刻を同期します。時刻があまりにもズレている場合は、下記コマンドを実行して即時同期してください。(ntpdateコマンドは廃止されました)
Postfix設定(Gmailリレー)
Postfix と、テスト用に mailコマンドをインストールします。
yum -y install mailx
・GmailのSMTP認証情報ファイルの作成
vim /etc/postfix/gmail
パスワードを書いているので、パーミッションを変更(root のみアクセス可)
PostfixのDBファイルを生成
・Postfixの設定
vim /etc/postfix/main.cf
-----(下記を最終行に追加)-----
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
Postfix を起動します。
Postfix の自動起動を設定します。
・root宛メールの送信先を変更します
vim /etc/aliases
-----(下記を最終行に追加)-----
メールエイリアスのDBファイルを更新します
root宛のメールが、Gmailのアドレスに届くことを確認します
yum リポジトリの追加
CentOS-PowerTools
EPEL
dnf -y install epel-release
dnf -y update
Remi
rpm --import http://rpms.remirepo.net/RPM-GPG-KEY-remi
・Remi リポジトリを有効化
Remi リポジトリから PHP7.4 をインストールされるように php:remi-7.4 モジュールをインストールします。
yum -y module install php:remi-7.4
【補足】
CentOS8 ではパッケージ管理に Application Streams という機能が追加され、インストールするミドルウェアのバージョンを簡単に変更できるようになりました。特定のバージョン(例えば、PHP7.4)のパッケージをまとめたものを「モジュール(module)」と呼びます。
モジュールの一覧は以下のコマンドで確認できます。
各種ミドルウェアのインストール
※バージョンは2020年6月20日時点のものです。
Apache httpd(2.4.37-21)
yum -y install mod_ssl
PHP(7.4.7-1)
yum -y install php-devel
yum -y install php-pdo
yum -y install php-mysqlnd
yum -y install php-mbstring
yum -y install php-gd
yum -y install php-pear
yum -y install php-pecl-apc-devel
yum -y install zlib-devel
MySQL(8.0.17-3)
yum -y install mysql-server
Memcached(1.5.20-1)
yum -y install php-pecl-memcached
PHPの設定
・PHPの設定
vim /etc/php.ini
↓
expose_php = Off
;date.timezone =
↓
date.timezone = 'Asia/Tokyo'
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
↓
error_reporting = E_ALL & ~E_NOTICE
php-fpm を自動起動を設定し起動します。
CentOS8では PHP-FPM が使われるようになりました。注意点は以下の通りです。
- PHP はデフォルトで FastCGI Process Manager (FPM) を使用します (スレッド化された httpd で安全に使用できます)。
- php_value 変数および php-flag 変数は httpd 設定ファイルで使用されなくなり、代わりに プール設定の /etc/php-fpm.d/*.conf で設定する必要があります。
- PHP スクリプトのエラーと警告のログは、/var/log/httpd/error.log ではなく /var/log/php- fpm/www-error.log ファイルに記録されます。
- PHP の max_execution_time 設定変数を変更するときは、変更した値に合わせて httpd ProxyTimeout 設定を増やす必要があります。
- PHP スクリプトを実行するユーザーが、FPM プール設定 (/etc/php-fpm/d/www.conf ファイ ル、apache ユーザーがデフォルト) に設定されるようになりました。
- 設定を変更した場合、または新しい拡張機能をインストールした場合は、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
オリジナルのコンフィグをバックアップ
・コンフィグを作成します。
vim /etc/httpd/conf/httpd.conf
Apache httpd の自動起動を設定し起動ます。
自己署名のサーバー証明書の作成(HTTPS用)
秘密鍵の作成
・CSR(証明書署名要求)の作成(入力するのは2箇所だけです)
openssl req -new -key server.key > server.csr
State or Province Name (full name) []:<空エンター>
Locality Name (eg, city) [Default City]:<空エンター>
Organization Name (eg, company) [Default Company Ltd]:<空エンター>
Organizational Unit Name (eg, section) []:<空エンター>
Common Name (eg, your name or your server's hostname) []: www.example.com
Email Address []:<空エンター>
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<空エンター>
An optional company name []:<空エンター>
自己署名のサーバー証明書の作成(有効期限30年)
秘密鍵とサーバー証明書を適切な場所に移動
mv -i server.crt /etc/pki/tls/certs/
パーミッションを変更
chmod 600 /etc/pki/tls/certs/server.crt
CSRを削除
Apache HTTPS(SSL/TLS)の設定
SSL設定ファイルのオリジナルをバックアッップします
SSL設定ファイルを作成します。
vim /etc/httpd/conf.d/ssl.conf
関連記事:安全な SSL/TLS 設定にするための10のポイント(Apache httpd 2.4)
Apache httpd を再起動します。
WEBブラウザで HTTPSで接続できることを確認します。
【補足】
自己署名のサーバー証明書の場合は警告が表示され、接続できない場合があります。FireFox で「危険性を承知で続行」ボタンを押して接続するか、Google Chrome の場合は「thisisunsafe」とタイプすると接続できます。
MySQL 8.0 の設定
・MySQLの設定ファイルに以下を追加します。
vim /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 8.0 ではセキュリティ強化のためデフォルトの認証プラグインが「caching_sha2_password」に変更になっています。しかし、現状ではほとんどのWebアプリケーション(WordPressやZabbixなど)が caching_sha2_password に対応していません。
そのため CentOS 8.0 では以下の設定ファイルで、認証プラグインを「mysql_native_password」に変更してくれています。
cat /etc/my.cnf.d/mysql-default-authentication-plugin.cnf (略) default_authentication_plugin=mysql_native_password
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ログのローテーション設定
オリジナルの設定ファイルをバックアップします
・設定ファイルを作成します
vim /etc/logrotate.d/httpd
/var/log/httpd/*log { daily missingok dateext rotate 60 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 (60 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/httpd/access_log
(略)
MySQLログのローテーション設定
オリジナルの設定ファイルをバックアップします
・設定ファイルを作成します
vim /etc/logrotate.d/mysqld
/var/log/mysql/*log { daily missingok dateext rotate 60 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 ユーザのパスワードファイルを作成
vim /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 (60 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
-----(下記のような表示であればOKです)-----
httpd.service enabled
mysqld.service enabled
php-fpm.service enabled
一度OSを再起動して、各種サービスが起動している事を確認しましょう。
(再起動後に以下を実行)
ps aux | grep -e httpd -e php-fpm -e mysqld -e chronyd
以上です。設定お疲れ様でした!
コメント
初めまして。
掲載されてる手順で構築していたところ下記のコマンドでエラーが表示されました。
rpm –import http://rpms.remirepo.net/RPM-GPG-KEY-rem
curl: (22) The requested URL returned error: 404 Not Found
エラー: http://rpms.remirepo.net/RPM-GPG-KEY-rem: インポート読み込みに失敗しました(2)。
>通りすがりさん
コメントありがとうございます。
下記のコマンドをコピペして実行してみてください。(最後の i が抜けているようです)
rpm --import http://rpms.remirepo.net/RPM-GPG-KEY-remi