CentOS 7.1 (1503) LAMPサーバインストールメモ【CentOS7.1.1503+Apache+MySQL+PHP】

Linux
Linux
スポンサーリンク

2015年3月31日 RHEL 7.1 のリリースから約1ヶ月で CentOS 7.1(1503)がリリースされました。CentOS 7 では初のマイナーバージョンアップになりますね。初回のリリースから1年近く経ちましたので、CentOS 7系 への移行を検討されている方もいらっしゃるのではないでしょうか。さっそく、CentOS7.1 で LAMP構成をインストールする手順をメモしておきました。

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

CentOS 7.1 (1503) の主な変更点

今回のバージョンアップでは、セキュリティや開発関連機能が強化されています。脆弱性が報告されていた OpenSSH ライブラリが 6.6.1 にアップデートされました。開発関連では Docker が 1.4 へのアップデートや OpenJDK 8 がフルサポートになったようです。詳細はリリースノートをご参照ください。

バージョン名は「CentOS-7 (1503)」が正式なものになるようです。ただ CentOS 7.1 と呼ばれていることが多いようですので、この記事でも「7.1」の表記も使っています。

▽ CentOS-7 (1503) リリースノート
http://wiki.centos.org/Manuals/ReleaseNotes/CentOS7/Japanese

▽ Red Hat Enterprise Linux 7.1 リリースノート
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/7.1_Release_Notes/part-Red_Hat_Enterprise_Linux-7.1_Release_Notes-New_Features.html

また、CentOS 7.1 (1503) のネットワーク設定では「/etc/sysconfig/network-scripts/ifcfg-XXX」ファイルに、MACアドレス(HWADDR)を書かなくなったようです。バーチャルボックスなどで仮想マシンをコピーした時に、7.0まではMACアドレスを書き直す必要がありましたが、7.1では、IPアドレスを変えるだけでOKです。

CentOS 7.1(1503)のダウンロード

インストールにあたってダウンロードページから CentOS-7-x86_64-DVD-1503-01.iso をダウンロードしておきます。

マシン構成

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

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

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

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

CentOS 7.1(1503)のインストール

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

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

[インストールの概要]
・「ソフトウェアの選択」をクリックし、下記にチェックを入れて「完了」
 最小限のインストール>開発ツール

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

・「ネットワークとホスト名」をクリックし、ホスト名に下記を入力して「完了」
 ホスト名:centos71

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

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

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

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

ネットワーク関連設定

NICの設定

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

デバイス  タイプ    状態      接続   
enp0s3    ethernet  接続済み  enp0s3 
enp0s8    ethernet  接続済み  enp0s8 
lo        loopback  管理無し  -- 

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

・アダプター1(NAT)の設定
nmcli c m enp0s3 connection.autoconnect "yes"

・アダプター2(ホストオンリーアダプター)の設定
nmcli c m enp0s8 connection.autoconnect "yes"
nmcli c m enp0s8 ipv4.addresses "192.168.56.201/24"
nmcli c m enp0s8 ipv4.method manual

・ネットワークを再起動
systemctl restart network

・上記設定で sshログインができるようになります
ssh root@192.168.56.201

DNSサーバの設定

・NetworkManager がDNSサーバを書き換えないように変更
vi /etc/NetworkManager/NetworkManager.conf
---(下記を追加)---------------------------
dns=none
------------------------------

・NetworkManager を再起動
systemctl restart NetworkManager.service

・DNSサーバの設定
vi /etc/resolv.conf
---(全て削除して下記を追加)---------------------------
nameserver 8.8.8.8
------------------------------

基本コマンドのインストール

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

yumアップグレード

yum -y upgrade

不要サービスの停止

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 avahi-daemon
systemctl disable kdump
systemctl disable mdmonitor
systemctl disable dmraid-activation

SELinux無効設定

vi /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 と https を許可設定します
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent

・設定を読込みます
firewall-cmd --reload

・設定を確認します
firewall-cmd --list-services --zone=public
---(下記表示であればOKです)---------------------------
dhcpv6-client http https ssh
------------------------------

Chrony設定(NTP)

・初回は手動で時間合わせをします。
ntpdate ntp.nict.jp

・オリジナルのコンフィグをバックアップします。
mv -i /etc/chrony.conf /etc/chrony.conf.org

・コンフィグを作成します。
vi /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 8 377 80 -266us[ -266us] +/- 5154us
^* ntp-a2.nict.go.jp 1 8 377 80 -6797us[-6606us] +/- 11ms
------------------------------

Gmailリレー設定

・GmailのSMTP認証情報ファイルの作成
vi /etc/postfix/gmail
---(下記を追加)---------------------------
[smtp.gmail.com]:587 <Gmailのアドレス>:<Gmailのパスワード>
---------------------------
chmod 600 /etc/postfix/gmail
postmap /etc/postfix/gmail

・Postfixの設定
vi /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宛メールの送信先を変更します
vi /etc/aliases
---(下記を追加)---------------------------
root: <Gmailのアドレス>
---------------------------

・設定を反映させます。
newaliases

・メールが送信できる事を確認します

echo test | mail -s `hostname` root

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

・RPMForge

rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
 

・EPEL

rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.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
 

vi /etc/yum.repos.d/remi.repo
---(下記を変更)---------------------------
[remi]
name=Les RPM de remi pour Enterprise Linux 7 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/7/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/7/remi/mirror
enabled=0

enabled=1
------------------------------

・MySQL

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

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

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

・Apache(2.4.6-31)
yum -y install httpd-devel
yum -y install mod_ssl

・PHP(5.4.39-1)
yum -y install php
yum -y install php-devel
yum -y install php-pdo
yum -y install php-mysql
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.6.23-3)
yum -y install mysql-devel
yum -y install mysql-server

・memcached(1.4.22-1)
yum -y install memcached-devel
yum -y install php-pecl-memcache

リポジトリの無効化

vi /etc/yum.repos.d/rpmforge.repo
---(下記を変更)---------------------------
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el7/en/$basearch/rpmforge
mirrorlist = http://mirrorlist.repoforge.org/el7/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 1

enabled = 0
------------------------------

vi /etc/yum.repos.d/epel.repo
---(下記を変更)---------------------------
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1

enabled=0
------------------------------

vi /etc/yum.repos.d/remi.repo
---(下記を変更)---------------------------
[remi]
name=Les RPM de remi pour Enterprise Linux 7 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/7/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/7/remi/mirror
enabled=1

enabled=0
------------------------------

vi /etc/yum.repos.d/mysql-community.repo
---(下記を変更)---------------------------
[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/7/$basearch/
enabled=1
 ↓
enabled=0

(略)
[mysql-tools-community]
name=MySQL Tools Community
baseurl=http://repo.mysql.com/yum/mysql-tools-community/el/7/$basearch/
enabled=1
 ↓
enabled=0

(略)
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
enabled=1
 ↓
enabled=0
------------------------------

Apacheの設定

・不要なコンフィグを読込まないようにする
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
---(下記を追加)---------------------------
httpd.conf
------------------------------
アクセス制限の記述「Require all granted」を忘れずに! また、「NameVirtualHost *:80」は不要です。

・起動
systemctl start httpd

・自動起動設定
systemctl enable httpd

PHPの設定

・エラーログ出力先作成
mkdir /var/log/php
chown apache /var/log/php
chmod 755 /var/log/php

vi /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に設定
vi /etc/php.d/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"
 

vi /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の設定

vi /etc/sysconfig/memcached
運用で様子をみて適度に変更

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

・自動起動設定
systemctl enable memcached

・起動
systemctl start memcached
systemctl restart httpd

MySQLの設定

・ログの出力先作成
mkdir /var/log/mysql
chown -R mysql:mysql /var/log/mysql

・オリジナルのコンフィグをバックアップします。
mv -i /etc/my.cnf /etc/my.cnf.org

・コンフィグを作成します。
vi /etc/my.cnf
---(下記を追加)---------------------------
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION
user=mysql

skip-character-set-client-handshake
character-set-server = utf8

slow_query_log=1
slow_query_log_file=/var/log/mysql/slow_query.log
long_query_time=1
min_examined_row_limit=1000

[client]
default-character-set = utf8

[mysqld_safe]
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
------------------------------

・起動 
systemctl start mysqld

・自動起動設定
systemctl enable mysqld

・初期設定
mysql_secure_installation
対話式で設定が始まります。
rootにパスワードを設定する以外は、すべて空エンター[Y]でOKです。(不要なユーザ等を削除してくれます)
---------------------------
(略)
Set root password? [Y/n]
New password: <パスワード>
Re-enter new password:<パスワード>
(略)
---------------------------

ログローテーション設定

・設定ファイルのバックアップ用ディレクトリを作成しておきます
mkdir /etc/logrotate.off

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

・オリジナルの設定ファイルをバックアップします
mv -i /etc/logrotate.d/httpd /etc/logrotate.off/

・設定ファイルを作成します
vi /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
considering log /var/log/httpd/access_log
log does not need rotating
(略)
------------------------------

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

・オリジナルの設定ファイルをバックアップします
mv -i /etc/logrotate.d/mysql /etc/logrotate.off/

・設定ファイルを作成します
vi /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 ユーザのパスワードファイルを作成
vi /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
considering log /var/log/mysql/mysqld.log
log does not need rotating
considering log /var/log/mysql/slow_query.log
log does not need rotating
not running postrotate script, since no logs were rotated
------------------------------

自動起動設定確認

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

・一度システムを再起動して各種サービスが自動起動している事を確認します。
shutdown -r now
ps aux | grep -e httpd -e mysqld -e memcached -e chronyd

サーバー用秘密鍵・自己署名証明書の作成(SSL用)

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

・作成用ディレクトリに移動します
cd /etc/pki/tls/certs/

・オリジナルのMakeファイルをバックアップします
cp -ip Makefile Makefile.org

・サーバー用証明書有効期限を1年から10年に変更します
sed -i 's/365/3650/g' Makefile

・サーバー用秘密鍵・自己署名証明書の作成
make server.crt
---下記を入力---------------------------
Enter pass phrase:1234(←表示されません)
Verifying - Enter pass phrase:1234(←表示されません)
Enter pass phrase for server.key:1234(←表示されません)
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) []:centos71
Email Address []:<空エンター>
------------------------------

・サーバー用秘密鍵からパスワード削除
openssl rsa -in server.key -out server.key
---下記を入力---------------------------
Enter pass phrase for server.key:1234(←表示されません)
------------------------------

・サーバー用秘密鍵の場所を変更
mv -i server.key /etc/pki/tls/private/

Apacheの設定(SSL)

・SSL設定ファイルのオリジナルをバックアッップします
mv -i /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.org

・コンフィグを作成します。
vi /etc/httpd/conf.d/ssl.conf
---(下記を追加)---------------------------
ssl.conf
------------------------------
SSL3.0には脆弱性がありますので「SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2」として必ずSSL3.0を無効にしてください。

・httpd再起動
systemctl restart httpd

・httpsで接続できることを確認(自己署名証明書なので警告が表示されます)

以上です。

コメント

  1. CentOS 7.1 (1503) LAMPサーバインストールメモ【Apache+MySQL+PHP】 | Apple FAN|macやiPhoneなどアップル製品のニュースサイト より:

    […] ましたので、CentOS 7系 への移行を検討されている方もいらっしゃるのではないでしょうか。さっそく、CentOS 7.1 で LAMP構成をインストールする手順をメモしておきました。…[続きを読む] […]

  2. alderson より:

    Hello, is mariadb default in centos? i have problem in installing mysql

    • Hello Mr alderson.
      Questions Thank you.

      CentOS default mariadb does not install.
      MySQL will work without problems.

      Would it be an answer?
      I’m sorry, but I’m not good at English.

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