2016/07/20 修正:nginx.confを直接書き換えていたところを、conf.d/blog.confを作成して設定するようにしました。
「ConoHa - GMOの高性能オールSSDクラウド」のConoHaのVPSで、CentOS 7 + nginx + WordPress 環境を構築します。慣れると30分の作業です。
前提
ConoHa標準のCent OS 7は、最初からSELinuxが切られており、またEPELが使えるといった特徴があるので、他のVPSでは初期設定の部分で必要なところがあると思います。
また、サーバーの構築、起動については省きます。また、sshでrootでログインできる状態から始めるものとします。また、使用するドメイン名をexample.comとします。
sshユーザーの作成
rootログインは嫌なので、sshでログインするユーザーを作成します。ここでは、仮にtestユーザーとします。
ssh [email protected]
useradd test
passwd test
# testユーザーでsudoを使えるようにする
visudo
----
# 以下を追記
test ALL=(ALL) ALL
----
# testユーザーに切り替え
su - test
# 秘密鍵を作成. ここではパスフレーズ使用しないのでエンターキー連打
ssh-keygen -t rsa
# rootの許可リストをtestユーザー
sudo cp /root/.ssh/authorized_keys ~/.ssh/
sudo chown test:test ~/.ssh/authorized_keys
chmod 644 ~/.ssh/authorized_keys
# ここでいったんログアウト
# testユーザーでログインできることを確認する
ssh [email protected]
# sshのrootログインを禁止する
sudo vi /etc/ssh/sshd_config
sudo sed -i "s/PermitRootLogin yes/PermitRootLogin no/" /etc/ssh/sshd_config
sudo grep -i permitrootlogin /etc/ssh/sshd_config
-> no になっていることを確認
# sshサービスを再起動し、rootでログインできないことを確認。
sudo systemctl restart sshd.service
# ログアウトして、rootログインができないことを確認
ssh [email protected]
-> Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
# testユーザーならばログインできることを確認
ssh [email protected]
-> ログイン
以後、testユーザーでログインして操作するものとします。
必要なソフトウェアをインストールする
各種ソフトウェアをインストールします。nginx、mariadbを含みます。byobuを使っていますが、別に使わなくても問題ありません。個人的には、途中で接続が切断されても大丈夫なので、リモートログイン先ではよく使っています。
sudo yum install byobu
# 以後、byobu上で実行します。
byobu
# 基本的なソフトウェア
sudo yum update -y
sudo yum groupinstall -y "開発ツール"
sudo yum install -y bash-completion unzip
# 個人的な趣味で入れているもの
sudo yum install -y emacs tig etckeeper ruby gnuplot
# 個人的な趣味で入れているもの2, python関係のインストールで必要だから
sudo yum install -y bzip2 bzip2-devel openssl-devel readline readline-devel sqlite-devel freetype* libpng-devel
# nginx, php, mariadb
# php-fpm は WordPress で必要
sudo yum install -y nginx php php-gd php-mbstring php-mysql php-pspell php-xml php-xmlrpc php-fpm mariadb mariadb-server
# 実行
sudo systemctl start nginx.service
sudo systemctl start php-fpm.service
sudo systemctl start mariadb.service
# 有効化(起動時にON)
sudo systemctl enable nginx.service
sudo systemctl enable php-fpm.service
sudo systemctl enable mariadb.service
# ステータスの確認
systemctl status nginx.service
systemctl status php-fpm.service
systemctl status mariadb.service
以上で、基本的なソフトウェアをインストールしました。
各種設定
さまざまな設定。
ファイアウォールの設定
ファイアウォールの設定をします。具体的には、httpで利用するポート80を開放します。
firewall-cmd --list-services
sudo firewall-cmd --add-service=http --zone=public
sudo firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --list-services
データベースの準備
WordPressで用いるデータベースを準備します。ここではMariaDBを利用していますが、MySQLでも同様かと。データベース名、ユーザー名、パスワードを決めておきます。
# データベース名 wpdata, ユーザー名 wpdbuser, パスワード pass とする
sudo mysql
> create database wpdata;
> grant all on wpdata.* to wpdbuser@'localhost' identified by 'pass';
> flush privileges;
nginxの設定
nginxの設定をします。大元の設定ファイルは /etc/nginx/nginx.conf ですが、ここでは /etc/nginx/conf.d/blog.conf を新たに作成し、そこに以下の内容を記述します。パーマリンク設定を変更することを前提とした設定になっています。参考記事は本記事の最後にのっけています。
なお、基本的な設定ファイルの読み方については「nginxの設定ファイル nginx.conf の読み方 超入門」という記事を書きました。よければ御覧ください。
sudo nginx -t で設定ファイルの文法をチェックできます。変更したら忘れずに確認しましょう。
server {
listen 80;
listen [::]:80;
# ドメインに合わせて適宜変更
server_name example.com;
index index.php;
# ドキュメントルートに合わせて適宜変更
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# 設定ファイルを見られないように
location ~* /wp-config.php { deny all; }
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location / {
try_files $uri $uri/ @wordpress;
}
location @wordpress {
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
include fastcgi_params;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
php-fpmの設定
userとgroupをnginxに変更します。
sudo sed -i "s/user = apache/user = nginx/" /etc/php-fpm.d/www.conf
sudo sed -i "s/group = apache/group = nginx/" /etc/php-fpm.d/www.conf
サービスの再起動
ここまでの設定を反映させるために、サービスを再起動します。
sudo systemctl restart nginx.service
sudo systemctl restart php-fpm.service
WordPressのインストール
WordPressをインストールします。最新版のURLは「日本語 — WordPress」で確認。また、ここではドキュメントルートをデフォルトである/usr/share/nginx/htmlとしています。
インストールと設定ファイルの編集
cd
WPVER=4.6.1
wget https://ja.wordpress.org/wordpress-${WPVER}-ja.zip
unzip wordpress-${WPVER}-ja.zip
sudo cp -a wordpress/* /usr/share/nginx/html/
# ディレクトリ所有権の変更
sudo chown -R nginx:nginx /usr/share/nginx/html
# WordPressの設定
cd /usr/share/nginx/html
sudo cp -a wp-config-sample.php wp-config.php
# wp-config.php を編集して、前節のデータベース名、ユーザー名、パスワードを反映
# 認証用ユニークキーの設定
sudo vi wp-config.php
サイトにアクセス
ここまでできたら、ブラウザからアクセスできるようになります。アクセスして、初期設定を行い、またパーマリンクの設定やプラグインの導入などを行います。これで、一通り完成です。
参考リンク
多くの記事を参考にさせていただきました。ありがとうございます。
- 「nginxでwordpressを動かすには - Qiita」…基本的な流れ
- 「nginxでwordpressのパーマリンクをデフォルト以外に対応する - Qiita」…パーマリンクの設定
- 「nginx連載5回目: nginxの設定、その3 - locationディレクティブ - インフラエンジニアway - Powered by HEARTBEATS」nginxの設定ファイルの理解
また、CentOS 7の基本的な操作については、下記の本を大いに参考にしました。
コメント