CentOS 6.9 LAMPサーバ インストールメモ【Apache2.2+MySQL5.7+PHP7.1】

Linux
Linux
スポンサーリンク

2017年4月5日 CentOS6.9 がリリースされました、RHEL6.9(3/21)から約二週間でのリリースになります。最近ではCentOS7を使うプロジェクトが増えてきていますが、WEBアプリケーションの互換性の問題や色々なしがらみなどで(^^;) まだまだ CentOS6 も現役です。さっそく、CentOS 6.9 で LAMP構成をインストールする手順をメモしておきました。

(2018年8月1日追記)最新バージョンのインストールメモは「CentOS 6.10 LAMPサーバ インストールメモ【Apache2.2+MySQL5.7+PHP7.2】」です。 よければそちらをご参照ください。

CentOS 6.9 の主な変更点

CentOS6.9 では GnuTLS が TLSv1.2 をサポートするようになり、これによりべて CentOS パッケージで TLSv1.2 が利用できるようになりました。また、OpenStack や Amazon Web Services などのクラウド環境でサーバーの設定に使用される cloud-init の追加(ベースチャネルに移動)、Microsoft Azure クラウド向け DDNS 用の DHCP クライアントフック例を追加など、クラウドサービス向けの機能も強化されています。詳細はリリースノートをご参照ください。

レッドハットのプレスリリースでは、RHEL6 は2017年5月10日に Production Phase 3 に移行するとのことです。これにより今後 RHEL6 は、重要なセキュリティの修正や直接ビジネスに影響があるような不具合の修正アップデートに限定されることになり、レッドハットは RHEL7 へのアップグレードを推奨しています。

https://www.redhat.com/en/about/press-releases/red-hat-launches-latest-version-red-hat-enterprise-linux-6-pairing-production-stability-it-modernization

CentOS は RHEL の完全互換を目指していますので CentOS6 にも同様のことが言えます。そろそろ CentOS7 への移行を検討しておくのが良いかもしれませんね。

CentOS 6.9 のダウンロード

はじめに、CentOSのダウンロードページから「CentOS-6.9-x86_64-bin-DVD1.iso」をダウンロードしておきます。今回は64bit版をインストールします。

マシン構成

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

○仮想マシン構成
メモリ:1024MB
NIC1:NATアダプター
NIC2:ホストオンリーアダプター

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

CentOS 6.9 のインストール

[Welcom to CentOS 6.9!]
一番上の「Install or upgrade an existing system」を選択して、エンターを押します。

[Disc Found]
Tabキーで「SKIP」を選択して、エンターを押します。

[CentOS6]
NEXT

[What language 〜]
Japanese(日本語)

[このシステム用の適切なキーボードを選択します]
日本語

[どちらのタイプのストレージデバイスにインストールしますか?]
基本ストレージデバイス

[ストレージでバイスの警告]
はい。含まれていません。どのようなデータであっても破棄してください
(※警告の通りです。ご注意下さい)

[ホスト名]
centos69

[使用するタイムゾーン〜]
アジア/東京
「システムクロックでUTCを使用」のチェックを外す

[rootパスワード]
<パスワード>

[どのタイプのインストールをしますか?]
すべての領域を使用する

[ストレージ構成をディスクに書き込み中]
(データがすべて失われる旨の警告が表示されます)
データが削除されても問題がなければ「変更をディスクに書込む」を押します

[CentOSのデフォルトインストールは最小限インストールです〜]
「Minimal」を選択して「次へ」

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

[おねでとうございます。CentOSのインストールが完了しました]
再起動してください。

ネットワーク関連設定

NICの設定

・NIC1の設定(NATアダプター)
vi /etc/sysconfig/network-scripts/ifcfg-eth0

ONBOOT=no
NM_CONTROLLED=yes
 ↓
ONBOOT=yes
NM_CONTROLLED=no

・NIC2の設定(ホストオンリーアダプター)
vi /etc/sysconfig/network-scripts/ifcfg-eth1
---(HWADDRの行以外を削除して下記を追加)-------

DEVICE=eth1
HWADDR=08:00:27:XX:XX:XX  ←【この行は残す】
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=192.168.56.201
NETMASK=255.255.255.0

ネットワークサービス再起動

service network restart

DNSサーバの設定

vi /etc/resolv.conf
---(全て削除して下記を追加)-------

nameserver 8.8.8.8

以上の設定で、手元のPCから ssh ログインができるようになります。

ssh root@192.168.56.201

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

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

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

yum アップデート

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

yum -y update

不要サービスの停止

下記のコマンドを実行

chkconfig --level 0123456 abrt-ccpp off
chkconfig --level 0123456 abrtd off
chkconfig --level 0123456 acpid off
chkconfig --level 0123456 atd off
chkconfig --level 0123456 auditd off
chkconfig --level 0123456 blk-availability off
chkconfig --level 0123456 cpuspeed off
chkconfig --level 0123456 haldaemon off
chkconfig --level 0123456 ip6tables off
chkconfig --level 0123456 kdump off
chkconfig --level 0123456 mdmonitor off
chkconfig --level 0123456 messagebus off
chkconfig --level 0123456 netfs off

SELinux無効設定

vim /etc/sysconfig/selinux

SELINUX=enforcing
 ↓
SELINUX=disabled

OSを再起動します

shutdown -r now

iptables設定

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

mv -i /etc/sysconfig/iptables /etc/sysconfig/iptables.org

・ssh と httpd のみ許可設定
vim /etc/sysconfig/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

iptables を再起動します

service iptables restart

NTP設定

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

ntpdate ntp.nict.jp

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

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

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

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

起動

service ntpd start

自動起動設定

chkconfig ntpd on

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

+ntp-b3.nict.go. .NICT. 1 u 48 64 377 10.132 -16.359 10.411
*ntp-b2.nict.go. .NICT. 1 u 51 64 377 8.455 -7.501 7.912
+ntp-a2.nict.go. .NICT. 1 u 49 64 377 7.472 -12.039 7.470

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

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

service postfix reload

・root宛メールの転送先を設定します
vim /etc/aliases
---(下記を追加)-------

root: <Gmailのアドレス>

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

newaliases

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

echo test | mail -s "test mail" root

yum リポジトリの追加(64bit)

EPEL

yum -y install epel-release

Remi

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

MySQL

rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el6-9.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

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

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

Apache(2.2.15-59)

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

PHP(7.1.3-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-pecl-apc-devel
yum -y install zlib-devel

MySQL(5.7.18-1)

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

Memcached(1.4.36-1)

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

Apacheの設定

不要なコンフィグを読込まないようにする

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

起動

service httpd start

自動起動設定

chkconfig httpd on

自己署名のサーバー証明書の作成(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) []: centos69
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 +TLSv1 +TLSv1.1 +TLSv1.2」として必ずSSL3.0を無効にしてください。

Apacheを再起動します

service httpd restart

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

PHPの設定

エラーログの出力先作成

mkdir /var/log/php
chown apache /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"

Apacheを再起動

service httpd restart

Memcachedの設定

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

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

起動

service memcached start

自動起動設定

chkconfig memcached on

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.0
min_examined_row_limit=0
 
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

MySQL5.7.4から5.7.10までは、パスワードの有効期限のデフォルト値が360日でしたが、これには問題があったため(Bug #77277)MySQL5.7.11以降、有効期限のデフォルト値が「default_password_lifetime=0」となり無期限になりました。
7.3.6 Password Expiration Policy | MySQL 5.7 Reference Manual

起動

service mysqld start

自動起動設定

chkconfig mysqld on

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

2017-04-11T05:53:54.364306+09:00 1 [Note] A temporary password is generated for root@localhost: <初期パスワード>

セキュリティ設定

これから設定するパスワードは、8文字以上、英数大文字小文字と記号が含まれていないと、ポリシー違反で弾かれてしまいます。オススメはしませんが、my.cnf に以下を追加して PasswordValidationプラグインを無効にしておく方法もあります。
6.1.2.5 The Password Validation Plugin | MySQL 5.7 Reference Manual

validate-password=OFF

・以下のコマンドを実行
mysql_secure_installation
対話式で設定が始まります。(不要なユーザやDBを削除してくれます)

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
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

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

reading config file /etc/logrotate.d/httpd
reading config info for /var/log/httpd/*log /var/log/php/*log

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="<パスワード>"

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

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

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

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

自動起動設定確認

chkconfig --list | grep :on
下記のような表示であればOKです

abrt-oops      	0:off	1:off	2:off	3:on	4:off	5:on	6:off
crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
httpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off
irqbalance     	0:off	1:off	2:off	3:on	4:on	5:on	6:off
lvm2-monitor   	0:off	1:on	2:on	3:on	4:on	5:on	6:off
memcached      	0:off	1:off	2:on	3:on	4:on	5:on	6:off
mysqld         	0:off	1:off	2:on	3:on	4:on	5:on	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
ntpd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off
postfix        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
rdma           	0:off	1:on	2:on	3:on	4:on	5:on	6:off
rsyslog        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
sshd           	0:off	1:off	2:on	3:on	4:on	5:on	6:off
sysstat        	0:off	1:on	2:on	3:on	4:on	5:on	6:off
udev-post      	0:off	1:on	2:on	3:on	4:on	5:on	6:off

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

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

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

コメント

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