- 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のリバースプロキシ経由、ローカルネットワークでは直接ホストへ接続するようなケース
- リバースプロキシから送られるヘッダを利用し、
home
とsiteurl
を動的に変更している
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のホスト]/;
}