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

  • 3
    いいね
  • 0
    コメント
  • Ubuntu 16.04 LTS へWordPressをインストールした際のメモ。
    • MySQL
    • Apache2
    • PHP7
    • インストール後にIPアドレスを変更し、サイト表示がおかしくなった場合の対処
    • 前段にリバースプロキシがある場合のwp-config.php

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;
  • サービスを自動起動にする
$ chkconfig 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
  • サービスを自動起動にする
$ chkconfig nginx 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にインストール
$ wp core download --locale=ja --path=/var/www/html/wordpress
$ 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

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のホスト]/;
    }