お名前.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キーを押して、インストールを開始させます。
言語を選択します(日本語を選択)
いくつかの設定部分にオレンジ色の!マークがついていることがありますが、以下の項目について修正・設定を行います。
キーボード:自分は、英語キーボードを使用しているので、英語キーボードの追加および、優先順位を日本語キーボードより高くしました。
ネットワークとホスト名:接続を「オン」にします。
「キーボード」、「インストール先」、「ネットワークとホスト名」の設定が終了したら、インストールの開始をします。
インストール中に「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
# ここまで追記