Edited at

Ubuntu 16.04 LTSへWordPressをインストール

More than 1 year has passed since last update.


  • Ubuntu 16.04 LTS へWordPressをインストールした際のメモ。


    • MySQL

    • Apache2

    • PHP7

    • インストール後にIPアドレスを変更し、サイト表示がおかしくなった場合の対処

    • 前段にリバースプロキシがある場合のwp-config.php




sysv-rc-confを導入

$ sudo apt install -y sysv-rc-conf


MySQL


インストール

$ sudo apt install -y mysql-server

$ sudo mysql_secure_installation



  • rootのパスワードを控えておく


セットアップ


  • rootユーザでログイン

$ mysql -u root -p


  • wordpressデータベースを作成する

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


  • サービスを自動起動にする

$ sudo sysv-rc-conf mysqld on


Apache2


インストール


  • WordpressはNginxよりApacheでの構築の方が楽っぽい。

$ sudo apt install -y apache2


PHP

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


  • 必要に応じてPHPのモジュールをインストール


    • php-mbstring: 日本語

    • php-mcrypt: 暗号化

    • php-curl: CURL

    • php-gd: 画像

    • php-xml: XML



$ sudo apt install -y php-mbstring php-mcrypt php-curl php-gd php-xml


  • 動作確認のためのファイルを作成


/var/www/html/info.php

<?php phpinfo();



  • Apacheを再起動

$ sudo systemctl restart apache2


  • サービスを自動起動にする

$ sudo sysv-rc-conf apache2 on


  • PHPの動作を確認
    http://[IP]/info.php


WordPress


Apacheの設定ファイルを変更


  • 設定ファイルをバックアップ

$ sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.original


  • WordPressのインストール先を追加


/etc/apache2/apache2.conf

<Directory /var/www/html/wordpress>

AllowOverride All
</Directory>


  • 設定ファイルのチェック



    • Syntax OKの出力を確認



$ sudo apache2ctl configtest


  • 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


Wordpressのインストール


  • WP-CLIで/var/www/html/wordpressにインストール

$ sudo su -

$ wp core download --locale=ja --path=/var/www/html/wordpress --allow-root
$ touch /var/www/html/wordpress/.htaccess
$ chmod 660 /var/www/html/wordpress/.htaccess
$ cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
$ mkdir /var/www/html/wordpress/wp-content/upgrade
$ sudo chown -R [作業ユーザ名]:www-data /var/www/html/wordpress
$ 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
$ sudo chmod -R g+w /var/www/html/wordpress/wp-content/upgrade
$ sudo chmod -R g+w /var/www/html/wordpress/wp-content/languages


wp-config.phpの変更


  • セキュアなランダム文字列の生成し、ファイルを編集する

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


  • データベース接続を変更


wp-config.php

define('DB_NAME', 'wordpress');

define('DB_USER', 'root');
define('DB_PASSWORD', 'password');


  • プラグイン更新時の問題を回避する


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




wp-config.php

define('FS_METHOD', 'direct');



WordPress用のApacheバーチャルホスト設定


  • 既存のファイルをコピーして新しいサイトの設定ファイルを作る

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


wordpress.confの変更



  • DocumentRoot/var/www/html/wordpressに変更する。


/etc/apache2/sites-available/wordpress.conf

<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>



  • 設定ファイルのチェック
      - Syntax OKの出力を確認

$ sudo apache2ctl configtest


  • デフォルトのサイトを無効化し、Wordpressのサイトを有効化

$ sudo a2dissite 000-default

$ sudo a2ensite wordpress
$ sudo systemctl restart apache2


インストール後にIPアドレスを変更し、サイト表示がおかしくなった場合の対処


  • インストール先のディレクトリでwpコマンドを利用する

$ cd /var/www/html/wordpress


  • 現在の設定を調べる

$ wp option get home

$ wp option get siteurl



  • wpコマンドで修正する


    • 旧IPアドレスのURLを、新IPアドレスのURLに置換する



$ wp search-replace 'http://[Old Ip Address]' 'http://[New Ip Address]'


リバースプロキシ配下での設定


  • 前段にNginxのリバースプロキシがある想定


    • インターネットからはNginxのリバースプロキシ経由、ローカルネットワークでは直接ホストへ接続するようなケース

    • リバースプロキシから送られるヘッダを利用し、homesiteurlを動的に変更している




wp-config.php

if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {

$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
define('WP_HOME', $_SERVER['HTTP_X_FORWARDED_PROTO'] . '://' . $_SERVER['HTTP_X_FORWARDED_HOST']);
define('WP_SITEURL', $_SERVER['HTTP_X_FORWARDED_PROTO'] . '://' . $_SERVER['HTTP_X_FORWARDED_HOST']);
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 1;
}


  • ちなみにNginxのWordPressホストへのプロキシ設定

    # HTTP -> HTTPS Redirect

location / {
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_redirect http:// https://;
proxy_pass http://[WordPressのホスト]/;
}