さくら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.php
のdefine('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の証明書を取得する手順。
初回セットアップに関しては、以下の記事がおすすめ。
クライアント(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になっていたのがまずかった模様。