Edited at

さくらVPSでUbuntu 16.04のサーバにWordpress環境を作る

More than 3 years have passed since last update.


さくらVPSのセットアップ

1Gプラン(メモリ1GB、CPU 仮想2コア、SSD 30GB)で契約。

Ubuntu 16.04のインストール方法は、公式にカスタムOSインストールガイドがあるので割愛。

ハマりどころとして、HTML5コンソールがFirefoxでLoading中のまま固まってしまうという現象があった。Chromeだとちゃんと動いた。あと、HTML5コンソールだと、クリップボードの文字列をペーストできない問題があり、シリアルコンソールを使う必要があった。


下準備

シリアルコンソール等を使って、/home/ログインユーザ/.ssh/authorized_keysに公開鍵を登録し、SSH接続できる状態にしておく。SSHのデフォルトポート(22番)に対する攻撃は非常に多いので、SSHのログインポート変更と、パスワードによるログインの無効化はやっておいたほうがいい。

ログインしたら、パッケージマネージャ(apt)の情報を最新に更新する。

$ sudo apt update

ついでにvim、curl、gitも入れておく。

$ sudo apt install vim curl git


Apacheのインストール

WebサーバはApacheを導入する。Nginxでもいいけど、Wordpressの構築はApacheの方が簡単。

$ sudo apt install apache2

ファイアウォールの設定を確認しておく。以下のようになればOK(80と443が開いてる)。

$ sudo ufw app list

Available applications:
Apache
Apache Full
Apache Secure
OpenSSH

この段階で、サーバに設定されたIPアドレスを確認すれば、Apache2のデフォルトページが表示されるはず。


MySQLのインストール

Wordpressが前提としているDBサーバはMySQLかMariaDB。Ubuntu 16.04ではMySQLを使うのが手軽。

$ sudo apt install mysql-server

インストール中にrootユーザのパスワードの設定を促されるので、設定する。

インストールが終わったら、MySQLの初期設定を行う。

$ sudo mysql_secure_installation

はじめに、VALIDATE PASSWORDプラグインを有効にするか聞かれる。これを有効にすると、弱いパスワードを設定しようとするとエラーになる。セキュリティを重視するなら有効にしたほうがいいかも。

その後もいくつか質問される。Yesの方がセキュアな答えなので、迷ったらYesを選んでおけばよい。


  • rootのパスワードを変更するか?

  • 匿名ユーザを削除するか?

  • リモートからのrootでのログインを禁止するか?

  • testデータベースを削除するか?

  • テーブルのアクセス権をいますぐリロードするか?


MySQLのセットアップ

以下のコマンドでMySQLにログインできる。パスワードを聞かれるので、先ほど設定したパスワードを入力する。

$ mysql -u root -p

ログインするとmysql>というプロンプトが表示される。以下のSQLで、Wordpress用のデータベースを作成する。名前はなんでも良いけど、ここでは「wordpress」としている。

mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;


PHPのインストール

PHP本体と、PHPをApacheモジュールとして動かすためのライブラリ、PHPからMySQLに接続するためのライブラリをインストールする。

$ sudo apt install php libapache2-mod-php php-mysql

この他、以下のようなライブラリもあらかじめ入れておくとよいかも。


  • php-mbstring: 日本語を扱うなら必須

  • php-mcrypt: 暗号化

  • php-curl: 外部サービスのAPIを使う際に使うことがある

  • php-gd: 画像処理

  • php-xml: XMLを扱う

インストールに成功すれば、phpコマンドが使えるようになっているはず。

$ php -v

PHP 7.0.4-7ubuntu2.1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

Apacheモジュールとして動作することも確認するため、テスト用ファイルを/var/www/html/info.phpというパスに作成する。

<?php phpinfo();

Apacheを再起動しておく。

$ sudo systemctl restart apache2

http://IPアドレス/info.phpにアクセスして、PHPの設定情報が表示されればOK。


Apache設定

.htaccessによってApacheの設定をディレクトリ単位で変更できるよう、Apacheの設定を変更する。ここでは、/var/www/html以下にwordpressのディレクトリを作成することを前提にしている。

# 編集前の状態に戻せるようにバックアップしておく

$ sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bk
$ sudo vim /etc/apache2/apache2.conf

以下のような設定があるはず。

<Directory /var/www/>

Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

上記設定の下に、以下を追記する。ドキュメントルートの設定は後で行うので省略。

<Directory /var/www/html/wordpress>

AllowOverride All
</Directory>

設定ファイルを書き換えたら、以下のコマンドでエラーがないか確認しておく。

$ sudo apache2ctl configtest

「Syntax OK」と表示されればOK。エラーが出たら編集前の状態に戻す。

次に、URLの書き換えを行うmod_rewriteを有効化し、Apacheを再起動する。

$ sudo a2enmod rewrite

$ sudo systemctl restart apache2


WP-CLIの導入

必須ではないが、便利に使えるかもしれないので入れておく。

$ cd

$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
$ chmod +x wp-cli.phar
$ sudo mv wp-cli.phar /usr/local/bin/wp
$ wp --info
PHP binary: /usr/bin/php7.0
PHP version: 7.0.4-7ubuntu2.1
php.ini used: /etc/php/7.0/cli/php.ini
WP-CLI root dir: phar://wp-cli.phar
WP-CLI packages dir: /home/ryo/.wp-cli/packages/
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 0.23.1


Wordpressのインストール

WP-CLIを使い、Wordpressのソースコードをダウンロードする。--locale=jaを設定すると、日本語用のパッチが当たった状態のWordpressがダウンロードできる。

$ wp core download --locale=ja --path=/tmp/wordpress

ここでは、/tmp/wordpressでセットアップして、最後に/var/www/html/wordpressにコピーを行う。/tmpはパーミッションが緩いので一時的な作業ディレクトリに向いている。なお、サーバを再起動すると/tmpの中身は消去される。

設定ファイルを準備する(.htaccessはWordpressのインストール時に勝手に設定されるので、ファイルだけ用意して権限を設定しておく)。

$ touch /tmp/wordpress/.htaccess

$ chmod 660 /tmp/wordpress/.htaccess
$ cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

upgradeディレクトリもあらかじめ作っておくのがおすすめ。これがないと、パーミッションの問題で自動アップグレードに失敗することがある。

$ mkdir /tmp/wordpress/wp-content/upgrade

終わったら、ディレクトリを丸ごとコピーする。コピー元の末尾に.を入れることで、.から始まるファイル名のファイルもコピーされる。

$ sudo cp -a /tmp/wordpress/. /var/www/html/wordpress

ディレクトリのオーナーを設定する。自分の作業ユーザで読み書きでき、apacheユーザ(www-data)から読み取り可能な設定が望ましい。

$ sudo chown -R 作業ユーザ名:www-data /var/www/html/wordpress

wp-contentディレクトリについては、ファイルアップロード等に使うため、www-dataユーザでも書き込めるようにする。

$ sudo chmod g+w /var/www/html/wordpress/wp-content

$ sudo chmod -R g+w /var/www/html/wordpress/wp-content/themes
$ sudo chmod -R g+w /var/www/html/wordpress/wp-content/plugins

次に、wp-config.phpの設定を行う。まず、以下のコマンド等を使用して、セキュアなランダム文字列を生成する。

$ curl -s https://api.wordpress.org/secret-key/1.1/salt/

取得した文字列を、wp-config.phpdefine('AUTH_KEY', '...');といった設定が並んでいるセクションに設定する。

次に、MySQLのDB接続設定を行う。以下の箇所に、必要な文字列を設定する。

define('DB_NAME', 'wordpress'); # 本記事の手順通りならwordpress

define('DB_USER', 'root'); # 本記事の手順通りならrootだけど、別ユーザを作ったほうがセキュア
define('DB_PASSWORD', 'password'); # パスワードを設定する

以下の設定の追記も推奨。この設定が無い場合、プラグインの更新時等にFTPのログイン情報が求められることがある。ここでは、wp-content配下のプラグイン・テーマのディレクトリへのwww-dataユーザへの書き込みを許可しているので、Apacheに直接書き込ませる(FS_METHOD = direct)。

define('FS_METHOD', 'direct');

最後に、Wordpressサイト用のApache設定ファイルを用意する。まず。既存のファイルをコピーして新しいサイトの設定ファイルを作る。

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/010-wordpress.conf


Wordpress用のVirtualHost設定

/etc/apache2/sites-available/010-wordpress.confを編集して、DocumentRootを/var/www/html/wordpressに変更する。他は変更しなくてもOK。

<VirtualHost *:80>

# ドメインがあれば設定、無い場合はコメントアウトのまま
#ServerName www.example.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/wordpress

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

sudo apache2ctl configtestして、Syntax OKか確認する。

次に、デフォルトのサイトを無効化し、Wordpressのサイトを有効化する。

$ sudo a2dissite 000-default

$ sudo a2ensite 010-wordpress
$ sudo systemctl restart apache2

ここまで終われば、http://サイトのIPアドレスにアクセスると、Wordpressの初回セットアップ画面が表示されるはず。

以降はユーザ設定だけでインストール完了です。


SSLの導入(Let's Encrypt)

無料SSLのLet's Encryptを使用。なお、下記手順は 初回セットアップ方法ではない。すでにLet's Encryptのセットアップが済んでいる状態で、別のサーバを立ててLet's Encryptの証明書を取得する手順。

初回セットアップに関しては、以下の記事がおすすめ。

Let's Encrypt の使い方


クライアント(certbot)のインストール

$ mkdir ~/bin

$ cd ~/bin
$ git clone https://github.com/certbot/certbot
$ cd certbot

下記コマンドを初めて実行すると、パスワードを聞かれ、その後依存パッケージ(Python等)がインストールされる。

$ ./certbot-auto

自分の環境では、上記コマンドの実行時に、OSError: Command ~/.local/...ncrypt/bin/python2.7 - setuptools pkg_resources pip wheel failed with error code 1というエラーが出て終了してしまった。

export LC_ALL="C"してから再度コマンドを打つと上手くいった。ロケールがja_JPになっていたのがまずかった模様。

参考: OSError: Command ~/.local/...ncrypt/bin/python2.7 - setuptools pkg_resources pip wheel failed with error code 1