環境
- 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
全体の参考ページ
- 【VirtualBox】◆Mac◆★LAMP★ローカル開発環境構築【WordPress】 – oki2a24
全外の流れの参考にした。 - さくらのVPSを使うときに最初にやっておきたいこと(CentOS 7編) | レンタルサーバー・自宅サーバー設定・構築のヒント
CentOS7 インストール直後の全体設定の参考にした。 - CentOS 7 でLAMP(Nginx+MariaDB(MySQL)+PHP)インストールからWordPressを動かすまで(Nginx編) | レンタルサーバー・自宅サーバー設定・構築のヒント
CentOS7 での LAMP 構築の参考にした。
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. リポジトリ追加
- MariaDB – Setting up MariaDB Repositories – MariaDB
- CentOS
- CentOS 7 (64-bit)
- 10.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
参考
- Command line interface for WordPress | WP-CLI
- コマンドラインから WordPress を操作する wp-cli 初級編 | dogmap.jp
- WP-CLIの使い方 – Qiita
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 にインストール、その後の作業もできるようになっておりました♪
そこで、本ブログの引越前に練習とテストとして今回の投稿をいたしました。特に、メモリを消費するソフトを探すことに神経質にならなくてもよくなったり、ファイアウォールが使いやすくなったりと、良くなっている印象ですの♪
以上です。