CentOS 7.3 (1611) LAMPサーバインストールメモ【Apache2.4+MySQL5.7+PHP7.1】

Linux
Linux
スポンサーリンク

2016年12月12日 CentOS7.3 (1611) がリリースされました。RHEL 7.3 (11/3)から約40日でのリリースになります。前バージョンCentOS7.2(1511)のリリースからは約1年ぶりのバージョンアップです。最近ちらほら CentOS7 を使っているプロジェクトを見かけるようになりました、CentOS6 の完全更新期限が、2017年前半を予定しているので、そろそろ CentOS7 に移行したいところですね。さっそく、CentOS7.3 で LAMP構成をインストールする手順をメモしておきました。

(2020年11月29日追記)CentOS7 の最新バージョンのインストールメモは「CentOS 7.9 (2009) LAMPサーバインストールメモ【Apache2.4+MySQL8.0+PHP7.4】」です。そちらをご参照ください。

CentOS 7.3 (1611) リリースノート

CentOSのリリースノートを見ると、タイトルに「7.3」という表記は無く、CentOS-7 (1611) となっていますが、この記事では都合上、CentOS7.3と表記しています。

CentOS 7.3 (1611) のダウンロード

はじめに、CentOSのダウンロードページから CentOS-7-x86_64-DVD-1611.iso をダウンロードしておきます。

マシン構成

VirtualBoxの仮想マシンにインストール

○仮想マシン構成
メモリ:1024MB

○ネットワークデバイス
アダプター1:NAT
アダプター2:ホストオンリーアダプター

○ネットワーク構成(※ご自分の環境に書換えてください)
ホスト名: centos73
IPアドレス:192.168.56.201/24
DNSサーバ: 8.8.8.8

CentOS 7.3 (1611) のインストール

[CentOS 7]
[↑]キーで「Install CentOS 7」を選択して、エンターを押します

[WELCOME TO CENTOS 7.]
「日本語 Japanese」「日本語」を選択して「続行」をクリックします

[インストールの概要]
「インストール先」をクリックし、インストール先のデバイスを選択して「完了」

上記の設定が済んだら「インストールの開始」をクリック
パーティションの作成とインストールが開始します

[ユーザーの設定]
「rootパスワード」をクリックし、パスワードを設定したら「完了」

~~~ インストールが完了するまでしばらく待ちます ~~~

[完了しました!]
「再起動」をクリックします

ネットワーク関連設定

NICの設定

・ネットワークデバイス名の確認
nmcli dev s

DEVICE    TYPE      STATE         CONNECTION
enp0s3    ethernet  disconnected  -- 
enp0s8    ethernet  disconnected  --
 

 
アダプター1(NAT)は「enp0s3」、アダプター2(ホストオンリーアダプター)は「enp0s8」がネットワークデバイス名です。 ネットワークデバイス名は、環境によって異なるようです。ご自分の環境にあわせて設定してください。

アダプター1(NAT)の設定

nmcli con mod enp0s3 connection.autoconnect "yes"

アダプター2(ホストオンリーアダプター)の設定

nmcli con mod enp0s8 connection.autoconnect "yes"
nmcli con mod enp0s8 ipv4.addresses "192.168.56.201/24"
nmcli con mod enp0s8 ipv4.method manual

上記設定で sshログインができるようになります。※DNSサーバの設定前のため、ログインに時間がかかることがあります

ssh root@192.168.56.201

DNSサーバの設定

手動で設定するため、DHCPでのDNSサーバ設定を無効にします。

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

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

nmcli con mod enp0s3 ipv4.dns 8.8.8.8
systemctl restart NetworkManager

・DNSサーバが設定されていることを確認します
cat /etc/resolv.conf

# Generated by NetworkManager
nameserver 8.8.8.8

ホスト名の設定

ホスト名「centos73」を設定し、hostnamed を再起動します

nmcli general hostname centos73
systemctl restart systemd-hostnamed

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

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

yum -y groupinstall base
yum -y groupinstall development
yum -y groupinstall network-tools

yum アップデート

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

yum -y update

不要サービスの停止

下記のコマンドを実行

systemctl disable abrt-ccpp
systemctl disable abrt-oops
systemctl disable abrt-vmcore
systemctl disable abrt-xorg
systemctl disable abrtd
systemctl disable atd
systemctl disable auditd
systemctl disable kdump
systemctl disable mdmonitor
systemctl disable dmraid-activation

SELinux無効設定

・下記を変更
vim /etc/sysconfig/selinux

SELINUX=enforcing
 ↓
SELINUX=disabled

OSを再起動します

shutdown -r now

firewalld設定

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

public (default, active)
interfaces: enp0s3 enp0s8
sources:
services: dhcpv6-client ssh
(略)

初期設定では publicゾーンに ssh のみ許可されています。

追加で 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-ports --zone=public
-----(以下のような表示があればOK)-----

443/tcp 80/tcp

Chrony設定(NTP)

初回は手動で時間合わせをします

ntpdate ntp.nict.jp

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

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

・コンフィグを作成
vim /etc/chrony.conf

server ntp.nict.jp
server ntp.nict.jp
server ntp.nict.jp

起動

systemctl restart chronyd

自動起動設定

systemctl enable chronyd

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

^+ ntp-a3.nict.go.jp 1 6 77 59 +972us[ +972us] +/- 5667us
^- ntp-b2.nict.go.jp 1 6 77 61 +1423us[+1423us] +/- 3830us
^* ntp-a2.nict.go.jp 1 6 77 62 +269us[ +547us] +/- 4458us

Gmailリレー設定

・GmailのSMTP認証情報ファイルの作成
vim /etc/postfix/gmail

[smtp.gmail.com]:587 <Gmailのアドレス>:<Gmailのパスワード>

パスワードを書いているので、パーミッションを変更(root のみアクセス可)

chmod 600 /etc/postfix/gmail

PostfixのDBファイルを生成

postmap /etc/postfix/gmail

・Postfixの設定
vim /etc/postfix/main.cf
-----(下記を最終行に追加)-----

relayhost = [smtp.gmail.com]:587
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

設定した内容を読込みます

systemctl reload postfix

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

root: <Gmailのアドレス>

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

newaliases

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

echo test | mail -s "test mail" root

yum リポジトリの追加

EPEL

rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7

Remi

rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi

MySQL

rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

・Remi リポジトリを有効化
vim /etc/yum.repos.d/remi.repo

[remi]
(略)
enabled=0
 ↓
enabled=1

vim /etc/yum.repos.d/remi-php71.repo

[remi-php71]
(略)
enabled=0
 ↓
enabled=1

【補足】
現時点で一番サポート期間の長いPHP7.1をインストールします。PHP5.6をインストールしたい場合は、remi-php56 リポジトリを有効にしてください。

vim /etc/yum.repos.d/remi.repo

[remi-php56]
(略)
enabled=0
 ↓
enabled=1

▽ PHP: Supported Versions
http://php.net/supported-versions.php

各種ミドルウェアインストール

※バージョンは2016年12月13日時点のものです。

Apache httpd(2.4.6-45)

yum -y install httpd-devel
yum -y install mod_ssl

PHP(7.1.0-1)

yum -y install php
yum -y install php-devel
yum -y install php-pdo
yum -y install php-mysqlnd
yum -y install php-mbstring
yum -y install php-mcrypt
yum -y install php-gd
yum -y install php-pear
yum -y install php-pear-DB
yum -y install php-pear-Auth-*
yum -y install php-pecl-apc-devel
yum -y install zlib-devel

MySQL(5.7.17-1)

yum -y install mysql-devel
yum -y install mysql-server

Memcached(1.4.33-1)

yum -y install memcached-devel
yum -y install php-pecl-memcache

yum リポジトリの無効化

vim /etc/yum.repos.d/epel.repo

[epel]
(略)
enabled=1
 ↓
enabled=0

vim /etc/yum.repos.d/remi.repo

[remi]
(略)
enabled=1
 ↓
enabled=0

vim /etc/yum.repos.d/remi-php71.repo

[remi-php71]
(略)
enabled=1
 ↓
enabled=0

vim /etc/yum.repos.d/mysql-community.repo

[mysql-connectors-community]
(略)
enabled=1
 ↓
enabled=0
 
[mysql-tools-community]
(略)
enabled=1
 ↓
enabled=0
 
[mysql57-community]
(略)
enabled=1
 ↓
enabled=0

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

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

起動

systemctl start httpd

自動起動設定

systemctl enable httpd

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

正規の認証局が発行した、サーバー証明書を無料で取得できるようになりました。よければご参照ください → Let's Encrypt サーバー証明書の取得と自動更新設定メモ

秘密鍵の作成

openssl genrsa 2048 > server.key

・CSR(証明書署名要求)の作成(入力するのは2箇所だけです)
openssl req -new -key server.key > server.csr

Country Name (2 letter code) [XX]: JP
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) []: centos73
Email Address []:<空エンター>
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<空エンター>
An optional company name []:<空エンター>

自己署名のサーバー証明書の作成(有効期限10年)

openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

秘密鍵とサーバー証明書を適切な場所に移動

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

CSRを削除

rm server.csr

Apache HTTPS(SSL/TLS)の設定

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

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

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

SSL3.0には脆弱性があります。「SSLProtocol All -SSLv3」を設定して必ずSSL3.0を無効にしてください。

設定ファイルを再読込します

systemctl reload httpd

WEBブラウザで HTTPSで接続できることを確認します(自己署名のサーバー証明書の場合は警告が表示されます)

PHPの設定

エラーログの出力先を作成

mkdir /var/log/php
chown apache /var/log/php
chmod 755 /var/log/php

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

expose_php = On
 ↓
expose_php = Off
 
;date.timezone =
 ↓
date.timezone = 'Asia/Tokyo'
 
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
 ↓
error_reporting = E_ALL & ~E_NOTICE
 
;error_log = php_errors.log
 ↓
error_log = "/var/log/php/php_errors.log"

・セッションの保存先をmemcacheに設定
vim /etc/php.d/40-memcache.ini

;session.save_handler=memcache
 ↓
session.save_handler=memcache
 
;session.save_path="tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
 ↓
session.save_path="tcp://localhost:11211"

vim /etc/httpd/conf.d/php.conf

php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"
 ↓
#php_value session.save_handler "files"
#php_value session.save_path "/var/lib/php/session"

Memcachedの設定

vim /etc/sysconfig/memcached
運用で様子をみて適度に変更(CACHESIZEの単位はMBです)

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

起動

systemctl start memcached
systemctl reload httpd

自動起動設定

systemctl enable memcached

MySQL 5.7 の設定

ログの出力先を作成

mkdir /var/log/mysql
chown -R mysql:mysql /var/log/mysql

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

mv -i /etc/my.cnf /etc/my.cnf.org

・コンフィグを作成します。
vim /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
 
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow_query.log
long_query_time=1
min_examined_row_limit=1000
 
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 
log_timestamps=SYSTEM
explicit_defaults_for_timestamp=TRUE
skip-character-set-client-handshake
character-set-server=utf8

起動

systemctl start mysqld

自動起動設定

systemctl enable mysqld

・root の初期パスワードの確認
grep password /var/log/mysql/mysqld.log

2016-12-13T05:58:37.406203+09:00 1 [Note] A temporary password is generated for root@localhost: <初期パスワード>

mysql_secure_installation
対話式で設定が始まります。(不要なユーザやDBを削除してくれます)設定するパスワードは、8文字以上、英数大文字小文字と記号が含まれていないと、ポリシー違反で弾かれてしまいます。

Securing the MySQL server deployment.
 
Enter password for user root: <初期パスワード>
 
The existing password for the user account root has expired. Please set a new password.
 
New password: <パスワード>
 
Re-enter new password: <パスワード>
 
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <空エンター>
(略)
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
(略)
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
(略)
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
(略)
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
 
All done!

MySQL5.7は、いくつかの設定デフォルト値が変わっていますので、リファレンスマニュアルを確認しておくことをオススメします。
5.1.4 Server System Variables | MySQL 5.7 Reference Manual

ログローテーション設定

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

mkdir /etc/logrotate.off

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

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

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

・設定ファイルを作成します
vim /etc/logrotate.d/httpd

/var/log/httpd/*log /var/log/php/*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 -dv /etc/logrotate.d/httpd
-----(下記のような表示であればOKです)-----

reading config file /etc/logrotate.d/httpd
 
Handling 1 logs
 
rotating pattern: /var/log/httpd/*log /var/log/php/*log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
(略)

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

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

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

・設定ファイルを作成します
vim /etc/logrotate.d/mysql

/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

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

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

chown root:root /root/.my.cnf
chmod 600 /root/.my.cnf

・確認します
logrotate -dv /etc/logrotate.d/mysql
-----(下記のような表示であればOKです)-----

reading config file /etc/logrotate.d/mysql
 
Handling 1 logs
 
rotating pattern: /var/log/mysql/*log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
(略)

自動起動の設定確認

systemctl list-unit-files | grep -e httpd -e mysqld -e memcached -e chronyd
-----(下記のような表示であればOKです)-----

chronyd.service enabled
httpd.service enabled
memcached.service enabled
mysqld.service enabled
mysqld@.service disabled

一度OSを再起動して、各種サービスが起動している事を確認しましょう。

shutdown -r now
ps aux | grep -e httpd -e mysqld -e memcached -e chronyd

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

コメント

  1. 大澤克巳 より:

    ものすごい役に立ちました。
    本当にありがとうございました。
    不要サービスの停止で
    systemctl disable avahi-daemon⏎
    のところで
    Failed to execute operation: No such file or directory
    が表示されて停止できませんでした。

    55才のLinux初学者より

    • あぱーブログ あぱーブログ より:

      >大澤克巳さん
      こちらこそコメントありがとうございます!
      この記事がお役にたてて嬉しいです。

      ご指摘いただいた箇所を修正いたしました。

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