Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
46
Help us understand the problem. What is going on with this article?
@ryo511

さくら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

46
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ryo511
Software Engineer

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
46
Help us understand the problem. What is going on with this article?