K4750.NET

Ubuntuバージョンアップに伴うWordPressの移行

さくらのVPSのUbuntu 12.04を14.04へバージョンアップ(OS再インストール)した際のメモ。データ移行については、主にWordPressについて記述した。なお、データ移行を行ったWordPressサイトは、投稿数が50にも満たない、プラグインはほとんど使用していないといった極小規模なサイトであるため、もっと規模が大きかったり、複雑なことをしているサイトではこんな単純な作業では済まないだろう。


1.WordPressのバックアップ

WordPressの管理画面(/wp-admin)にて、「ツール」→「エクスポート」を選択。エクスポートサブパネルにて「すべてのコンテンツ」を選択し「エクスポートファイルをダウンロード」をクリックし、XMLファイルを保存しておく。このXMLファイルには「投稿、ページ、コメント、カスタムフィールド、カテゴリー、タグ」が含まれているらしいが、テーマ(独自に作成したもの)、アップロードしたメディアファイル、WordPressの設定情報といったものは含まれないようだ。

テーマやメディアファイルについては、サーバ上のファイル(/var/www配下のすべてのファイル)をローカルに保存しておくこととした。WordPressの設定情報については、データベース(MySQL)内に保存されていると思われるが、大した変更を行っていないので、手順で復旧することとして、MySQLの残りのデータはすべて捨てることとした。


2.ファイルのバックアップ

サーバ上のファイルのうち、/etc/home配下のファイルについては、ローカルに保存しておくこととした。


3.さくらVPS再インストール

SAKURA InternetのカスタムOSインストールガイド内にある「Ubuntu 12.04/14.04」を参考に、OS起動までの作業を行う。インストールするOSはもちろん「Ubuntu 14.04 amd64」だ。OS起動後は、TeraTerm SSHにて接続確認および作業を行う。


4.Webサーバ構築

Ubuntu 14.04のOfficial Documentation「Ubuntuサーバーガイド」を参考に、apache2、php5、MySQLのインストールを行う。

apache2のインストールおよび設定は以下のとおり。忘れずにrewriteモジュールを有効にしておく。

$ sudo apt-get install apache2
$ sudo a2enmod ssl
$ sudo a2enmod rewrite
$ sudo a2ensite default-ssl
$ vi /etc/apache2/apache2.conf → /var/wwwについてAllowOverride Allとしておく。
$ sudo service apache2 restart

php5のインストールは以下のとおり。特段設定は不要で、apache2の再起動のみ行う。

$ sudo apt-get install php5 libapache2-mod-php5 php5-mysql
$ sudo service apache2 restart

MySQLのインストールは以下のとおり。インストール後のデータベースとデータベース用のユーザの作成については、WordPress Codex「WordPress のインストール」を参考に作業を行う。下記passwd部分は適当に決める。

$ sudo apt-get install mysql-server
$ mysql -u root -p
mysql> CREATE DATABASE wp;
mysql> GRANT ALL PRIVILEGES ON wp.* TO "wp"@"localhost" IDENTIFIED BY "passwd";
mysql> FLUSH PRIVILEGES;
mysql> EXIT

WinSCPにてローカルPCからサーバへファイルをアップロード等行うために、www-dataユーザをログイン可能にしておく。

$ sudo passwd www-data
$ sudo usermod -s /bin/bash www-data

6.WordPressインストール

ubuntuのパッケージは使用せず、tar.gzファイルをWordPressの日本語サイトからダウンロードして/var/www/htmlへインストールする。

$ su -
# cd /var/www
# mv html html.old → デフォルトのファイルを保存しておく。
# wget http://ja.wordpress.org/wordpress-3.9-ja.tar.gz
# tar xvfz wordpress-3.9-ja.tar.gz
# mv wordpress html
# chown -R www-data.www-data html
# cd html
# mv wp-config-sample.php wp-config.php

wp-config.phpの内容を以下に書き換える。データベース作成時に設定した値を使用する。

define('DB_NAME', 'wp');
define('DB_USER', 'wp');
define('DB_PASSWORD', 'passwd');
define('DB_HOST', 'localhost');

7.WordPressのテーマ、メディアファイル等のアップロード

保存しておいた以下のフォルダ、ファイルをサーバ上の同フォルダへアップロードする。

.htaccess
favicon.ico
wp-content/uploads
wp-content/themes/k4750v1 → 本サイト独自のテーマ。

8.WordPressの初期設定

ブラウザにて「/wp-admin/install.php」へアクセスし、サイト名等を入力し、初期設定を完了させる。また、管理画面へログイン後、テーマの設定、パーマリンクの設定(本サイトでは「日付と投稿名」を使用している)を元の設定に手動で戻す。

最後に、管理画面から「ツール」→「インポート」→「WordPress」を選択し、WordPress Importerのインストール後に「1.WordPressのバックアップ」にてバックアップしておいたXMLファイルをインポートする。なお、インポート時の「Download and import file attachments」は、チェックを入れるとメディアファイルのリンクがおかしくなってしまったので、チェックを入れずにインポートを実施した。

以上で、一通りの作業は完了。ブラウザにて問題なくWordPressサイトが表示されることを確認する。

GitによるWordPressサイト管理

本サイトのWordPress関連のリソース(MySQL上のデータは除く)をGitの管理下に置いた際の個人的メモ。このWordPress関連のリソース管理方法はお手軽ではあるが、かなり乱暴なことをやっている(気がする)ので、他の人の参考にはならないと思う。


1.前提と目標

使用環境はUbuntu 12.04.3 LTS。Apache2のDocumentRootは/var/wwwで、ここにWordPress関連のリソース置いている。本サイトのテーマファイル等を修正する際は、WinSCPを使ってssh経由で/var/www配下のファイルをテキストエディタで直接編集しているが、この編集の履歴を残すためにGitを導入する。

今回の目標は(いろいろ思うところもあるが)/var/wwwディレクトリ配下にリポジトリ(.git)を作成し、全てのリソースをこのリポジトリにコミットすることとする。


2.Gitインストール

本家の手順に(概ね)従う。まずは、依存ライブラリのインストールから。

sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext 
  libz-dev libssl-dev

そして、Gitをインストール。

$ wget https://git-core.googlecode.com/files/git-1.8.4.1.tar.gz; cd git-1.8.4.1/
$ make configure
$ ./configure --prefix=/usr/local
$ make all
$ sudo make install
$ git --version
git version 1.8.4.1

さらに、Git最新版を上書きインストール。

$ git clone git://git.kernel.org/pub/scm/git/git.git; cd git
$ make configure
$ ./configure --prefix=/usr/local
$ make all
$ sudo make install
$ git --version
git version 1.8.4.1.559.gdb9bdfb

3.リポジトリ生成とコミット

目標にあるとおり、今回は必要最低限のことだけをやる。と、その前にGitの設定(.gitconfigファイルの作成)をしておく。

$ git config --global user.name www-data
$ git config --global user.email www-data@k4750.net

リポジトリの生成とコミットは以下のとおり。

$ cd /var/www
$ git init
$ git add .
$ git commit -m 'first commit'

このままだと、http://www.k4750.net/.git/でリポジトリの内容が外部から見えてしまうので、乱暴ではあるが以下の.git/.htaccessファイルを作成する。

order allow,deny
deny from all

(正しい)オレオレ証明書の作り方

UbuntuのApache2にて(簡易に)SSL通信する際は、make-ssl-certコマンドを使い「自己署名証明書(self-signed certificate)」(いわゆる、オレオレ証明書)をサーバー証明書として作るのが手っ取り早い上に確実(※1)である。以下にmake-ssl-certコマンドの使い方および、このコマンド(shell-script)が実行している内容について書く。

※1 確実=オレオレ証明書を正確に作れるという意味。


1.make-ssl-cert

標準の/etc/apache2/site-available/default-sslを有効にして使用している場合は特に何もする必要はない。既にインストール時に生成されたオレオレ証明書を使用する設定になっている。なお、ホスト名の変更等を行った場合は、以下を実行することで、オレオレ証明所を再生成することができる(rootで実行する必要)。

# make-ssl-cert generate-default-snakeoil --force-overwrite

2.何をやっているか

make-ssl-certコマンドは単なるShellスクリプトであり、上記をパラメータとして実行した場合、以下の(ような)内容が実行される。

# TMPFILE="$(mktemp)"
# HostName="$(hostname -f)"
# sed -e "s#@HostName@#$HostName#" /usr/share/ssl-cert/ssleay.cnf > $TMPFILE
# openssl req -config $TMPFILE -new -x509 -days 3650 -nodes 
  -out /etc/ssl/certs/ssl-cert-snakeoil.pem 
  -keyout /etc/ssl/private/ssl-cert-snakeoil.key
# chmod 644 /etc/ssl/certs/ssl-cert-snakeoil.pem
# chmod 640 /etc/ssl/private/ssl-cert-snakeoil.key
# chown root:ssl-cert /etc/ssl/private/ssl-cert-snakeoil.key
# cd /etc/ssl/certs/
# ln -sf ssl-cert-snakeoil.pem $(openssl x509 -hash -noout -in ssl-cert-snakeoil.pem)

これにより(中間ファイルはさておき)二つのファイルssl-cert-snakeoil.pemファイル(オレオレ証明書)、ssl-cert-snakeoil.keyファイル(秘密鍵)が生成され、最後にパーミッションの設定等が自動的に行われる。

コマンドの実行状況を見て思うのは、証明書を作る際は、ファイルを生成する以外にも思いのほかやることがあるということ。パーミッションの設定については語られているサイトはあるが、最後のシンボリックリンクを生成する部分(ln -sf …)については、実行状況を見て初めて知った。

自前で“正しく”オレオレ証明書を作りたいのであれば、make-ssl-certコマンドを使うのが手っ取り早い上に、システムにとっても整合的である。


3.ファイルの内容

オレオレ証明書や秘密鍵の内容は、それぞれ以下のコマンドを実行して確認することができる。

# openssl x509 -text < /etc/ssl/certs/ssl-cert-snakeoil.pem
# openssl rsa -text < /etc/ssl/private/ssl-cert-snakeoil.key

内容からは、証明書の有効期間が発行後10年であること、公開鍵暗号方式がRSA(2048bit)であること、発行者(Issuer)および主体者(Subject)が同じ=オレオレ証明書であること等が読み取れる。

SSLを最短で有効化

WordPressの管理画面へhttpsでアクセスできるように設定した際のメモ。ただし、面倒な作業は極力避け、SSLを最短の手数で有効化する。なお、いわゆる「オレオレ証明書(self-signed certificate)」はデフォルトでインストールされているものを使用せずに、今回のSSL化に伴い再生成している。環境はUbuntu 12.04.3 LTS + Apache2。


1.SSL有効化

Apache2のSSLを有効化。オレオレ証明書は再生成する(make-ssl-cert)。

# a2enmod ssl
# a2ensite default-ssl
# make-ssl-cert generate-default-snakeoil --force-overwrite
# service apache2 restart

WordPressのログインおよび管理画面へのアクセスでhttpsを強制するためにwp-config.phpへ以下を追記する。

define('FORCE_SSL_ADMIN', true);

2.make-ssl-cert

make-ssl-certコマンドの正体(何をやっているのか)については後日投稿予定


3.参考

UbuntuでWordPressのパーマリンク設定変更

Ubuntu 12.04.3 LTS環境下でのWordPressのパーマリンク設定を変更する。


1.WordPressの設定変更

パーマリンク設定を「デフォルト」から「日付と投稿名」に変える。

デフォルト:http://www.k4750.net/?p=123
日付と投稿名:http://www.k4750.net/2013/08/25/sample-post/

2.Apache2の設定変更および再起動

/etc/apache2/site-available/default等に書かれている、WordPressがインストールされているディレクトリ(例えば、/var/www)について、.htaccessによる上書きを有効にする。

<Directory /var/www/>
    AllowOverride All
</Directory>

mod_rewriteモジュールを有効にして、Apacheを再起動する。

# a2enmod rewrite
# service apache2 restart