カテゴリー
Linux

【VirtualBox】【Mac】【CentOS7】LAMP (ただし Nginx) 環境を整える

環境

  • MacBook Pro (Retina, 13-inch, Late 2012)
  • OS X El Capitan 10.11.3(15D21)
  • VirtualBox バージョン 5.0.14 r105127

構築するもの

  • CentOS7 仮想マシン
  • 仮想マシン IP アドレス: 192.168.56.111
  • 仮想マシンへの SSH 接続環境
  • chrony (インターネット時刻同期) と Vim
  • ファイアウォールは SSH と HTTP のみ開放
  • Nginx ← 最新版
    • ドキュメントルートは /var/www/html/ とする。
    • PHP-FPM を導入する。
    • プロキシキャッシュ設定は行わない。
  • MariaDB ← 最新版
    WordPress 用に次の内容の DB を作る。

    • データベース: wpdb
    • ユーザー: wpuser
    • パスワード: wppass
  • PHP ← 最新版
    最低限と思われる次をインストールする。

    • php: PHP 本体
    • php-gd: 画像処理
    • php-mbstring: マルチバイト文字取り扱い
    • php-mysqlnd: MariaDB 接続
    • php-opcache: キャッシュ
  • WordPress
    • http://192.168.56.111
    • リビジョンは 3 に設定
    • WordPress ユーザー名: wploginuser
    • WordPress パスワード: wploginpass

全体の参考ページ

1. VirtualBox インストール

通常のインストール方法

または、Homebrew Cask でインストール。

  • brew cask install virtualbox

2. 仮想マシンの作成、ssh 接続する

仮想マシンの IP アドレスは、192.168.56.111 といたしました。

これ以降の作業はターミナルなどから SSH 接続で行います。

3. アップデートと最低限のアプリのインストール、設定

最低限のアプリとして、Vim、chrony をインストールします。

# アップデート
yum update -y
# 最低限のアプリインストール
yum install -y chrony vim-enhanced

# chrony 起動・確認
systemctl start chronyd.service
systemctl status chronyd.service
chronyc sources

4. ファイアウォール設定

SSH と HTTP のみ開放いたします。

といいましても、SSH は既に開放されておりますので、HTTP を開放し、確認いたします。

# 全状態の確認
firewall-cmd --list-all
# 開放サービス (ポート) 確認
firewall-cmd --list-service
# 開放ポート確認
firewall-cmd --list-ports

# HTTP の永続的な開放
firewall-cmd --permanent --zone=public --add-service=http

# 変更の反映
firewall-cmd --reload

参考ページです。

おまけ。以前 (CentOS5) では行っていたが、やらなくなったこと。

  • 不要なサービスの停止設定
    Blutooth など明らかに不要なサービスなどはなかったため、不要なサービス停止は行いませんでした。
  • 要らないコンソールを無効
    /etc/inittab を見てみると、このファイルで管理しなくなったことが判明。そして調べてみると特に設定不要と考えられた。

  • SELinux の無効化。これは作業がうまく行かなくなったら無効にしようかと考えておりました。ところが、最後まで無効化せずに行けてしまいましたので、SELinux は有効のままです。

5. Nginx

5-1. Nginx リポジトリ追加

を参考に、リポジトリを追加しました。 enabled=1 → enabled=0 に変更しております。
リポジトリは明示的に指定した時にのみ有効にしたいと思います。したがいまして、デフォルトでは無効となるように設定いたします。

# Nginx リポジトリ追加
vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=0

5-2. Nginx インストール・確認

# Nginx インストール
yum --enablerepo=nginx install nginx

# 起動と自動起動設定
systemctl start nginx
systemctl enable nginx

# 状態確認
# Loaded: enabled; であれば自動起動状態
# Active: active (running) であれば起動中
systemctl status nginx

ウェブブラウザから http://192.168.56.111 にアクセスし、[Welcome to nginx!] ページが表示されることを確認しました♪

5-3. 設定とその確認

ドキュメントルートの変更とその確認です。コメントもできるだけ削除しましたら、随分とすっきりしました♪

# バックアップ
cp -a /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.org
# 設定編集
vim /etc/nginx/conf.d/default.conf

次のように書き換えました。

server {
    # ポート
    listen       80;
    # サーバ名
    server_name  localhost;
    # ドキュメントルート設定
    root /var/www/html;
    # /で終わるURI時に返すファイルを指定
    index  index.html index.htm;
}    

ではいよいよ確認です。簡単に確認用 HTML ファイルを作成し、そこにアクセスします。

# 設定のリロード
systemctl reload nginx
# 確認用 HTML ファイル
echo "zuwai" > /var/www/html/zuwai.html

ウェブブラウザから http://192.168.56.111/zuwai.html にアクセスし、[zuwai] と表示されるページが現れることを確認しました♪

6. PHP

6-1. EPEL、Remi リポジトリ追加

# EPEL、Remi リポジトリ追加
yum install epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum --enablerepo=remi update remi-release
# 無効化。EPEL のみ。Remi は最初から無効
# [epel] の enabled=1 → enabled=0
vim /etc/yum.repos.d/epel.repo

6-2. PHP インストール

# php7 と図形、日本語、キャッシュをインストール
yum --enablerepo=epel,remi,remi-php70 install php php-gd php-mbstring php-mysqlnd php-opcache
# インストール確認
# opcache 有効の確認などは、php -i | grep opcache で実施
php -v

7. PHP-FPM

今の nginx では HTML ファイルは返すことができても、PHP と連携しておらず、PHP プログラムが実行できません。

そこで、 nginx で PHP を実行できるように連携するパッケージとして PHP-FPM を使用いたします。

まずはインストールです。

# インストール
yum --enablerepo=remi,remi-php70 install php-fpm
# 設定ファイル編集
cp -a /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.org
vim /etc/php-fpm.d/www.conf

続いて設定ファイルの編集です。

を参考にしました。修正点のみ記載します。

listen = /var/run/php-fpm/php-fpm.sock
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

最後に、自動起動の設定です。

# 起動と自動起動設定
systemctl start php-fpm.service
systemctl enable php-fpm.service

# 状態確認
# Loaded: enabled; であれば自動起動状態
# Active: active (running) であれば起動中
systemctl status php-fpm.service

8. Nginx から PHP が動くことを確認

8-1. Nginx 設定の編集

Nginx 設定に、PHP と連携するための設定 [# PHP-FPM 設定] を追記します。 これも、最低限の設定を追加しています。

server {
    # ポート
    listen       80;
    # サーバ名
    server_name  localhost;
    # ドキュメントルート設定
    root /var/www/html;
    # /で終わるURI時に返すファイルを指定
    index index.php index.html index.htm;

    # PHP-FPM 設定
    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

8-2. Nginx での PHP 動作を確認

その後、Nginx 設定のリロードです。

# 確認用の PHP 作成
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
# Nginx 設定再読み込み
systemctl reload nginx

http://192.168.56.111/phpinfo.php にアクセスして、無事 PHP の情報ページが表示されました。OK です!

8-3. おまけ。OK となるまでのエラー対処

実は PHP の確認ページにアクセスしても File Not Found で、ログを見ると次のようなエラーが出ていました。

2016/02/20 20:30:51 [error] 10971#0: *13 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.56.1, server: localhost, request: "GET /phpinfo.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "192.168.56.111"

これは、試行錯誤の中で、次の設定が抜けていたからでした。

なお、最終的には次のコード内容からは変わっております。

server {
# ... 略 ...
    # ドキュメントルート設定
    root /usr/share/nginx/html;

(試行錯誤していた当時は) location に root がありましたので、ドキュメントルート設定は終わっていたものとばかり思い込んでおりました><。

エラー解消には、次のページが参考になりました!

9. MariaDB

9-1. リポジトリ追加

必要なときだけ有効にしたいため、enabled=0 を追加しています。

# MariaDB 10.1 CentOS repository list - created 2016-02-21 01:37 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=0

9-2. インストール・起動設定

# インストール
yum --enablerepo=mariadb install MariaDB-server MariaDB-client
# 起動設定
systemctl start mariadb.service
systemctl enable mariadb.service
# 確認
systemctl status mariadb.service

9-3. MariaDB 設定ファイル編集

文字コードを utf8mb4 に設定します。絵文字も扱える、WordPress でのデフォルトの文字セットです。

[client]
default-character-set = utf8mb4
[server]
character-set-server = utf8mb4

設定を反映、確認します。

# 設定の反映
systemctl restart mariadb.service
# 確認
mysql -u root -p
status

9-4. MariaDB セキュアインストール

# 下記の質問に答えることでセキュアインストールを行う。
# Enter current password for root (enter for none): <Enter>
# Set root password? [Y/n] y
# Remove anonymous users? [Y/n] y
# Disallow root login remotely? [Y/n] y
# Remove test database and access to it? [Y/n] y
# Reload privilege tables now? [Y/n] y
mysql_secure_installation

9-5. MariaDB に DB 作成

mysql -u root -p で MariaDB へログインしてから、次のコマンドで DB、ユーザー、パスワードを作成します。

  • データベース: wpdb
  • ユーザー: wpuser
  • パスワード: wppass
# DB、ユーザ、パスワードの作成・設定
GRANT ALL PRIVILEGES ON wpdb.* TO wpuser@localhost IDENTIFIED BY 'wppass';
FLUSH PRIVILEGES;
CREATE DATABASE wpdb CHARACTER SET utf8;

そして、作成した DB 等を確認です♪

# データベースの一覧表示
show databases;
# ユーザの確認(パスワードは異なるテキストで表示されます)
select user, host, password from mysql.user;

10. WordPress

10-1. Nginx 設定

try_files 行と、WordPress パーマリンク設定を利用可能にする部分を追加して、全体は次のようになりました。

これも上記ページを参考にしました。全体を記載します。

server {
    # ポート
    listen       80;
    # サーバ名
    server_name  localhost;
    # ドキュメントルート設定
    root /var/www/html;
    # /で終わるURI時に返すファイルを指定
    index index.php index.html index.htm;
    # 実ファイルがない場合のアクセスファイル
    try_files $uri $uri/ /index.php;

    location / {
        # WordPress パーマリンク設定を利用可能にする
        if (!-e $request_filename) {
            rewrite ^.+?(/wp-.*) $1 last;
            rewrite ^.+?(/.*\.php)$ $1 last;
            # ドキュメントルートから WordPress までの相対パス
            # (ドキュメントルートにインストールしたため相対パスは記入なし)
            rewrite ^ /index.php last;
        }
    }

    # PHP-FPM 設定
    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}    

設定がおわりましたら、再読込いたします。ここで、PHP-FPM も再起動しているのがポイントです!

systemctl restart nginx
systemctl restart php-fpm

10-2. WP-CLI インストールと確認

# インストール
cd /root
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
# インストール確認
php wp-cli.phar --info
# wp コマンドで使用可能にする(実行権限付与とパスを通す)
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp
# wp コマンド使用確認
wp --info

# WordPress ダウンロード
cd /var/www/html/
wp core download --locale=ja
# wp-config.php のセットアップ
wp core config --dbname=wpdb --dbuser=wpuser --dbpass=wppass --locale=ja --extra-php <<PHP
define('WP_POST_REVISIONS', 3);
PHP
# WordPress 初期設定
wp core install --url=http://192.168.56.111/ --title=test --admin_user=wploginuser --admin_password=wploginpass --admin_email=test@example.com
# WordPress 設定したもの確認
wp user list
wp option get siteurl
wp option get blogname
wp option get admin_email
# オプション設定全部を表示
wp option list

参考

10-3. 確認

http://192.168.56.111 にアクセスし、WordPress トップページが表示されることを確認いたしました!

さらに、http://192.168.56.111/wp-admin/ でログイン画面となり、ユーザ名とパスワードを入れて管理画面へとアクセスできることを確認いたしました♪

10-4. トラブルシューティング

http://192.168.56.111

にアクセスしても何も表示されません><。

http://192.168.56.111/index.php

にアクセスすると変化がありました。[お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。] とエラー表示!進展がありました♪

yum list installed | grep php で調べてみても、php i | gerp mysql で調べてみても、mysql (MariaDB)関係は設定されておりました。。。わかりません><。

結局、ふと思いついて次のことをしたら解決できました!

systemctl restart nginx

だけではダメで、

systemctl restart php-fpm

と PHP-FPM も再起動したら解決、WordPress のトップページが表示されました!

おわりに

本ブログを CentOS7 で動かしたいですの!と思ってから、はや 1 年くらいが経とうとしております><。Mac の VirtualBox での CentOS7 インストール途中でなぜか必ずフリーズしてすっかり気持ちがしぼんでおりました。。。

そんな理由でほったらかしにしておりましたけれども、Mac OS をクリーンインストールしたためなのか、いつの間にか CentOS7 を VirtualBox にインストール、その後の作業もできるようになっておりました♪

そこで、本ブログの引越前に練習とテストとして今回の投稿をいたしました。特に、メモリを消費するソフトを探すことに神経質にならなくてもよくなったり、ファイアウォールが使いやすくなったりと、良くなっている印象ですの♪

以上です。

コメントを残す