お名前.comでVPS+nginx+PHP7+MariaDB+WordPressでサイト構築1

VPSを使用する必要が出てきたので、お名前.comでドメイン取得+nginx+MariaDBをインストールし、WordPressでサイトを構築しました。

ftpユーザーがテーマはプラグインをアップロードしたり、アップロードしたプラグインを管理画面からアップデートできるようにするには、別途グループや、パーミッションの設定が必要です。

VPSの基本設定

OS再インストール

サーバーNAVIにログインし、画面左メニューの「ご利用サービス確認」から、作業を行うサーバーにログインします。

ログイン後、左のサーバーリストから、作業を行うサーバーが選ばれていることを確認し、初期セットアップを行います。

※他のOSを利用したい場合でも、最初は、指定のOSをインストールする事になります。

サーバーリストから、新しいOSをインストールしたいサーバーを選択し、「OS再インストール」タブから、再インストールしたいOSなどの設定を選択します。

※OS:CentOS7.1 / Virtio:ON / VNCコンソールキーマップ:en-us(USキーボード使用のため)/ ビデオデバイス:cirrus / ディスク構成:カスタムで、パーティションをまとめました。

「コンソール画面」タブをクリックし、インストール画面を表示させます。

※インストール画面が始まっていなかったら、タブ上の「起動」ボタンを押します。

※install CentOS7 をカーソルキー(矢印キー)で選択し、enterキーを押して、インストールを開始させます。

言語を選択します(日本語を選択)

いくつかの設定部分にオレンジ色の!マークがついていることがありますが、以下の項目について修正・設定を行います。

キーボード:自分は、英語キーボードを使用しているので、英語キーボードの追加および、優先順位を日本語キーボードより高くしました。

ネットワークとホスト名:接続を「オン」にします。

※新しいOSを繰り返してインストールする場合、「インストール先」を選択した時の残りの容量がごくわずかになっています。

その場合、不要な領域をすべて削除して、領域を確保します。

「キーボード」、「インストール先」、「ネットワークとホスト名」の設定が終了したら、インストールの開始をします。

インストール中に「rootパスワード」「ユーザーの作成」を行います。

※「ユーザーの作成」の設定では、「このユーザーを管理者にする」にチェックを入れておいてください。

再度までインストールが終わったら、再起動のボタンを押します。

TeraTermからアクセス

OSDN より最新版のTera Termをダウンロードして、インストールを行います。

インストールが完了したら、Tera Termを立ち上げ、

ホスト:サーバーのIPアドレス
サービス:SSH SSHバージョンSSH2

で、OKを押して、接続を開始します。

ユーザー名とパスフレーズには、CentOS7のインストール中に、「ユーザーの作成」で追加したユーザー名とパスワードを入力してください。

現段階では、RSA鍵を作っていないので、「プレインパスワードを使う」を選択してください。

接続後は、管理者権限が使えるようにsu rootしておいてください。

# su root
パスワード:(CentOS7のインストール中に設定したrootパスワード)

 

OSアップデート&Vim, zip, unzipインストール&SELinuxの停止

OSのアップデート

# yum -y update

wget, vim, zip, unzipのインストール

# yum -y install wget vim-enhanced zip unzip

SELinuxの停止

# setenforce 0

setenforce 0 <= これはゼロです

/etc/selinux/configファイルを開いて、enforcingをdisabledに変更

# vim /etc/selinux/config

+++++++++以下、修正箇所だけ+++++++++

SELINUX=enforcing //修正前
SELINUX=disabled //修正後

vimの使い方については、

・閲覧モード中に、/を押してからキーワードを入力し、Enterキーを押すとキーワード検索が可能。
・閲覧モード中に矢印キーでカーソルを合わせた後は、「i」キーで編集モードに。
・編集終了後は、Escを押して、編集モードから閲覧モードに切り替え
・:wq で上書き保存後にvim終了

です。詳細については、他のサイトをご確認ください。

rootでのsshログイン禁止&パスワード無しでのsshログイン禁止

rootユーザーで直接ログインしたり、パスワード無しでログインさせるのを禁止します。

# cd /etc/ssh
# cp sshd_config sshd_config_yyyymmdd
# vim sshd_config
+++++++++以下、修正箇所だけ+++++++++
#PermitRootLogin yes //変更前
PermitRootLogin no //変更後

#PermitEmptyPasswords no //変更前
PermitEmptyPasswords no //変更後

sshdを再起動させます。

# systemctl restart sshd

firewallの設定

現在の設定を確認

# firewall-cmd --list-all

httpとhttpsを追加して、firewallを再起動させます。

# firewall-cmd --zone=public --add-service=http --permanent
# firewall-cmd --zone=public --add-service=https --permanent
# firewall-cmd --reload

設定の確認

# firewall-cmd --list-all --zone=public

PHP7、nginxを使用するための準備

「php7」「nginx」などCentSO7の標準リポジトリに無いパッケージを使用するので、「epel」と「remi」の外部リポジトリを使用できるように設定する必要があります。

epel nginxとremiリポジトリインストールに必要
remi php7とphp-fpmのインストールに必要

epelレポジトリとremiレポジトリの追加

epelレポジトリをインストールしなくても、yumコマンドの依存関係でremiレポジトリをインストールする際に、同時にepelレポジトリもインストールされるようになりました。

remiレポジトリの追加

# yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

nginxのインストールと起動

nginxインストール

# yum -y install nginx

ファイルのアップロード上限を設定します。(デフォルトでは2Mまで) nginx.confのhttp, server,locationのどこかに、client_max_body_sizeでアップロードできるサイズ上限を設定してください。

# cd /etc/nginx
# cp -p nginx.conf nginx.conf_20170518
# vim nginx.conf

+++++++++以下、修正箇所だけ+++++++++

http {
  client_max_body_size 128M; //追加
  log_format main.....
...
}

nginx起動

# systemctl start nginx

nginx自動起動設定

# systemctl enable nginx

PHP7のインストールと設定

php7はCentOS7のリポジトリには無いので、「remi」リポジトリを使用してインストールしていきます。

PHP7に合わせて、他にも必要な「php-fpm」なんかも一緒にインストールしてしまいます。

# yum install --enablerepo=remi,remi-php72 php php-mbstring php-pdo php-pear php-fpm php-mcrypt php-mysql php-gd

インストールが完了しましたら、「php -v」でバージョンの確認を行ってください。

# php -v
PHP 7.1.5 (cli) (built: May 9 2017 18:30:17) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

php7の設定ファイルphp.iniを編集します。

# cd /etc/
# vim php.ini

修正箇所

;バージョンを隠す
expose_php = Off

;ファイルアップロードの上限サイズを変更

post_max_size = 20M
upload_max_filesize = 20M

;タイムゾーンの指定
date.timezone = "Asia/Tokyo"

;文字コードの指定
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto

php-fpm設定

php-fpmの実行ユーザとグループは初期設定は「apache」となっているので、「nginx」と連携させるために「/etc/php-fpm.d/www.conf」を編集して、実行ユーザとグループを「nginx」に変更していきます。

# cd /etc/php-fpm.d/
# cp -p www.conf www.conf_yyyymmdd
# vim www.conf

変更箇所

www.confの中にある、

user = apache
group = apache

の2か所を、

user = nginx
group = nginx

に変更します

実行ユーザとグループの変更が完了しましたら、php-fpmを起動させます。

# systemctl start php-fpm

また、sessionの保存先の所有者:グループもnginx:nginxに変更しておきます。

# cd /var/lib/php
# chown nginx:nginx session

最後に自動起動の設定を行っておきます。

# systemctl enable php-fpm

SFTPとNginxのumask設定

WordPressを後で利用する際、メンテナンスのためWordPress管理画面上でインストールしたプラグインなどのファイルを メンテナンス用のユーザーでSFTPで上書・編集したいといった場合があると思います。

詳細は後で書くとして、行う事は以下の3点です。
・SFTPのユーザーのプライマリグループをNginxユーザーグループに変更する
・SFTP(sshd)のUmaskを設定する
・NginxのUmaskを設定する

MariaDBのインストールと設定

CentOS7からはデータベースサーバが「MySQL」からMySQL互換の「MariaDB」に変更されていますので、こちらのインストールと設定を行っていきます。

MariaDBリポジトリ情報の生成

/etc/yum.repos.d/MariaDB.repoが無ければ新規作成

# MariaDB 10.1 CentOS repository list - created 2017-02-07 07:13 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

MariaDBインストール

# yum install -y MariaDB-server MariaDB-client

MariaDBのインストールが完了しましたら、まずは起動させます。

# systemctl start mariadb

自動起動の設定も忘れずに行います。

# systemctl enable mariadb

「mysql_secure_installation」を実行し初期設定を行っていきます。

これを実行することで、「MariaDB」の「root」ユーザパスワード設定や、最初から設定されている「anonymous」ユーザや、「test」データベースなどを削除することが出来ます。

# mysql_secure_installation

Enter current password for root (enter for none):

=>MariaDBのrootユーザパスワードは、インストール直後は何も設定されていないので、そのまま「Enter」キーを押す。

Set root password?

=>rootユーザパスワード設定するので、「y」を入力して、「Enter」キーを押し、パスワードを設定する。

Remove anonymous users?

=>初期設定で作成されている「anonymous」ユーザを削除するので、「y」を入力し、「Enter」キーを押す。

Remove test database and access to it?

=>初期設定で作成されている「test」データベースを削除するので、「y」を入力し、「Enter」キーを押す。

Reload privilege tables now?

=>今設定したユーザ設定をすぐに反映させるので、「y」を入力し、「Enter」キーを押す。

/etc/my.cnf.d/server.cnfでMariaDBで使用する文字コードをutf-8に設定します。

# cd /etc/my.cnf.d/
# cp -p server.cnf server.cnf_yyyymmdd
# vim server.cnf

設定内容

server.cnfの[mysqld]の部分に「character-set-server = utf8」を追加します。

[mysqld]
character-set-server = utf8

MariaDB」を再起動し設定を反映させます。

# systemctl restart mariadb

次にWordPress用のデータベースと、データベース管理ユーザを作成ます。 mysql_secure_installationで設定したrootユーザでMariaDBに接続

# mysql -u root -p
Enter password:

CREATE DATABASEコマンドでWordPressで使用するデータベース(例:wordpressdb)を作成します。

MariaDB [(none)]> CREATE DATABASE wordpressdb;

次に「wordpressdb」データベースの、管理ユーザを作成します。

MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpressdb.* TO "testuser"@"localhost" IDENTIFIED BY "hogehogehogehoge";

最後に、FLUSH PRIVILEGESコマンドで作成したユーザ情報を即時反映させます

MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit;

WordPressのインストール(?)と設定

/usr/share/nginx/がnginxの通常の公開ディレクトリ(?)なので、この中に、WordPressのディレクトリを作成することになります。 まずは、WordPressのダウンロード

# cd /usr/share/nginx/
# wget https://ja.wordpress.org/latest-ja.tar.gz

ダウンロードした圧縮ファイルを解凍します。

# tar -zxvf latest-ja.tar.gz

解凍すると、wordpressというディレクトリができるので、ディレクトリ名と所有者:グループの変更をします。

#mv wordpress testsite.com
# chown -R nginx:nginx testsite.com

※後程FTPを使えるようにした後、グループ名をFTPユーザー名に変更します。

testsite.comのログ保存用ディレクトリを作成します。

# mkdir /var/log/nginx/testsite.com

wordpressをバーチャルホストとして運用させるため、「/etc/nginx/conf.d」ディレクトリ内に、新規に設定ファイルを作成します。

# cd /etc/nginx/conf.d
# vim testsite.com.conf

+++++++以下、testsite.com.confの中身+++++++

server {
  listen 80;
  server_name testsite.com;
  root /usr/share/nginx/testsite.com;
  index index.php index.html index.htm;
  charset utf-8;

  access_log /var/log/nginx/testsite.com/access.log;
  error_log /var/log/nginx/testsite.com/error.log;

  #.phpで終わらない場合は、ここで分岐処理
  location / {
    try_files $uri $uri/ @wordpress;
  }

  location ~* /wp-config.php {
    deny all;
  }

  location ~ \.php$ {
    try_files $uri @wordpress;
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME /usr/share/nginx/testsite.com$fastcgi_script_name;
    include fastcgi_params;
  }

  #WordPressコンテンツの動的処理
  location @wordpress {
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME /usr/share/nginx/testsite.com/index.php;
    include fastcgi_params;
  }
}

「nginx -t」コマンドで設定ファイルの文法をチェックしてから、nginxを起動させます。

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

nginx起動

# systemctl start nginx

nginxの自動起動設定を行います。

# systemctl enable nginx

wp-config.phpファイルの作成

# cd /usr/share/nginx/testsite.com/
# cp wp-config-smaple.php wp-config.php
#vim wp-config.php

wp-config.phpに、データベース、ユーザーID、パスワードなどを入力し、http://testsite.comnにアクセスすると、WordPressのインストール画面が表示されます。

※testsite.comについて、DNSの設定を行っておく必要があります。

【補足】MariaDBのログ設定

データベースのバックアップ用に様々なログを保存するように設定してみた。
※バージョンによって設定する.cnfが色々違うようで、一つの参考にしてください。

server.cnfへの追記

まず初めに、ログ出力用のディレクトリを作成

# mkdir /var/log/mariadb
# chown mysql:mysql /var/log/mariadb

/etc/my.cnf.d/server.cnfの中身に追記して、ログを保存するように設定します。

# cd /etc/my.cnf.d/
# cp server.cnf server.cnf_yyyymmdd

+++++++以下、server.cnfの中身+++++++

[mysqld]

# ここから追記
# Error Log
log_error=/var/log/mariadb/error.log
log_warnings=1

# Query Log
general_log = ON
general_log_file=/var/log/mariadb/bin.log

# Binary Log
log_bin=/var/log/mariadb/bin.log
log_bin_index=/var/log/mariadb/bin.list
max_binlog_size=100M
expire_logs_days=7
sync_binlog=1
binlog_format=mixed

# Slow Query
slow_query_log=1
slow_query_log_file=/var/log/mariadb/slow.log
log_queries_not_using_indexes
log_slow_admin_statements
long_query_time=5
# ここまで追記