Raspberry Piで実行するVPN上のWordPress


Raspberry Piの良いところ、Linuxが扱えることができるマイコンであるという点ですかね。さて、このRaspberry Piを使ってVPN上でWordPressを運用させると言うことは、本人もしくはVPNに参加する人間のみが編集、閲覧することが出来るサイトです。一種のクローズドサイトと呼ばれるものです。自分専用の忘備録であったり、日記であったり、仲間内での共同サイトであったりとVPNという閉鎖的回線を用いることによってプライバシが担保されるものです。簡易的な様子を図示しました。実際にはもっと複雑な処理をしていますが省いています。

vision_1.png
VPNを使えばどこでもWordPressを見ることができる。

因みに今回の設定は外部公開に向きませんのでご留意下さい(ポート開放等の公開行為)。あくまでもVPN上での運用が大前提です。

#1:Raspberry Piのセットアップ

Raspberry Piをセットアップする必要があります。筆者自身もはじめからセットアップを行いました。

#1-1:Raspberry Piに必要なイメージをダウンロード

Raspberry Piに必要なイメージとして、Raspbianを使います。今回筆者が使ったものはRaspbian Jessie LiteというものでRaspbian Jessie With Pixelではありません。Raspbian Jessie LiteはGUIモードがなくCUIモードのみとなっています。しかし、結局のところWordPressというWEB GUIを使用するので何ら問題ありません。また、個人の好みにもよるもので、With Pixelを選択してもLiteを選択しても動作には変わりありませんが、容量を少なく済ませたいのであればLiteをおすすめします。公式サイトよりダウンロードすることができます。

項目
OS Raspbian Jessie Lite
ヴァージョン November 2016
リリース日 2016年11月25日
カーネルバージョン 4.4

#1-2:ダウンロードしたイメージをMicro SDに書き込む

ダウンロードしたファイルを解凍(展開)し、Win32 Disk Imagerで対象のMicro SDに書き込む作業を行って下さい。Win32 Disk ImagerはOSDNよりダウンロードすることができます。詳しい書き込み方法はこちらを参考にして下さい。

#1-3:初期起動の設定

初期起動時、SSHはデフォルトで有効でしたが今回リリースされたヴァージョンではデフォルトでSSHが無効になっているため初期段階からSSHでログインすることができませんでした。有効にするには下記のコマンドを入力し、[5]=>[P5]の順に移動します。

$ sudo raspi-config

最後に自分自身のIPアドレスを確認します。有線LANの場合、eth0を参照し、無線LANの場合、wlan0を参照して下さい。割り当てられたIPアドレスはinet アドレスにて確認することができます。筆者の場合ですと、192.168.11.14に今回割り当てられました。

$ ifconfig
eth0 Link encap:イーサネット ハードウェアアドレス b8:27:eb:05:fc:33
     inetアドレス:192.168.11.14 ブロードキャスト:192.168.11.255 マスク:255.255.255.0

Windowsパソコンで操作する場合はTera TermでSSH接続を行います。Tera Termはこちらでダウンロードすることができます。先程取得したIPアドレスを入力して、ユーザ名とパスワードを入力して下さい。デフォルトのユーザ・パスワードは下記の表のとおりです。

項目
ユーザ名 pi
パスワード raspberry

ログインが完了したら、次にRaspbianのアップデートを行います。

$ sudo apt-get update
$ sudo apt-get upgrade

日本語化とタイムゾーンの変更を行います。下記のコマンドを実行し、必要な処理を行います。[2]よりpiのパスワードを変更して下さい。次に[4]=>[I1]より[en_GB.UTF-8 UTF-8]と[ja_JP.EUC-JP EUC-JP]と[ja_JP.UTF-8 UTF-8]を選択し、デフォルトで使用するロケールを[ja_JP.UTF-8]として下さい。最後に[4]=>[I2]を選択して[Asia]=>[Tokyo]と進んで下さい。

$ sudo raspi-config

次に日本語フォント等を導入します。

$ sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

vimエディタを追加(viが必要な場合のみ、nanoでも対応可能)

$ sudo apt-get install vim

以上を終えたら、下記のコマンドで再起動して下さい。

$ sudo reboot

#2:VPNの導入

VPNとして使うのはHamachiと呼ばれるものでSoftEtherよりも導入が簡単であり5台まで無料というメリットがあります。また、最近ではRaspberry Piへの導入が難なくできるのでおすすめであります。

#2-1:Hamachiへの登録

VPN.net – Hamachi by LogMeInにて登録を行います。

#2-2:クライアントへダウンロード&インストール

指示に従ってダウンロードを行って下さい。筆者の場合、Windowsにインストールしました。追加でiPhoneにもHamachiへ参加させました。

#2-3:Raspberry PiをHamachi VPNに参加させる

HamachiをRaspberry Pi (Raspbian)にインストールするのがとても簡単になりました。以前であればややこしい設定が必要でしたが、最近では自動起動まで勝手にやってくれます。Raspberry Piの操作に戻り、実際にHamachiをRaspberry Piに追加します。また、最新のヴァージョンはこちらで確認できます。選択する場合、『ARM HF version (BETA) *.deb』を選択して下さい。

$ wget https://www.vpn.net/installers/logmein-hamachi_2.1.0.174-1_armhf.deb
$ sudo dpkg -i logmein-hamachi_2.1.0.174-1_armhf.deb

次に参加要求を行います。最後のsudo hamachi joinの部分ですが、自動承認を選択した場合実行して下さい。通常であれば最後のsudo hamachi joinを実行せず、Hamachiの設定画面より『参加要求』から対象であるRaspberry Piを選択し、承認して下さい。

$ sudo hamachi login
$ sudo hamachi attach [Your Hamachi Email Address]
$ sudo hamachi set-nick [Whatever Nickname You Make]
$ sudo hamachi join [Network ID] [Password]

これでVPNへの参加を完了することができました。

#3:サイトに必要な条件を整える

Raspberry PiをウェブサーバとするにはApacheやPHPを導入する必要があります。これがなければ表示することが出来ません。

#3-1:Apache2を導入する

ApacheはHTMLを表示するためのものです。下記のコマンドより導入します。

$ sudo apt-get install apache2

先程ifconfigで調べた自身のIPアドレスをブラウザに入力すると次の表示がされます。

2016-12-24
It works!

#3-2:PHP5の導入

PHP5を導入する必要があります。下記のコマンドより導入します。

$ sudo aptitude install php5

※追記:php5だと弾かれるので、php7.0かphp7.1をインストールする方がいいと思います。筆者のおすすめはphp7.0。php7.1でもいいけれど、一部プラグインで不具合を確認したので…。
$ sudo apt-get install php7.0

#3-3:MySQLの導入

MySQLを導入します。途中でMySQLに設定するパスワードを聞かれますので、設定して下さい。ここでは例として”raspass”とします。二度聞かれるのでどちらも同じパスワードを入力して下さい。

$ sudo apt-get install mysql-server php5-mysql

※追記:上記コマンドでは弾かれるので(php5-mysqlが要因)php7.0-mysqlをインスコするといいかも。
$ sudo apt-get install mysql-server php7.0-mysql

#3-4:データベースの作成

実際に運用させるためのデータベースを作成します。今回は”wordpress”というデータベースを作成します。因みにMySQLにログインするには例として”mysql -uroot -praspass”で入ることができます。詳しく説明すると”mysql -u[User Name] -p[Password]”となっています。今回はwordpressというデータベースを作成します。

$ mysql -uroot -praspass
mysql> CREATE DATABASE wordpress;
mysql> exit

#3-5:phpMyAdminの導入

phpMyAdminを導入します。こちらも途中パスワードを聞かれますので問題なければ先程と同じパスワードを使います。嫌だと思う場合は、phpMyAdminで聞かれるパスワードのみを変え、2度目に同じものを入力して下さい。

$ sudo apt-get install phpmyadmin

#4:WordPressの導入

いよいよWordPressの導入です。日本語版を使って導入していきたいと思います。

#4-1:WordPress 4.7 日本語版をダウンロード

英語版が良いとお望みでしたら英語版もあるので参照するかと。ここでは日本語版について解説します。また、最新のWordPressについてはこちらから確認することが出来ます。

$ wget https://ja.wordpress.org/wordpress-4.8.3-ja.zip
$ unzip wordpress-4.8.3-ja.zip

#4-2:Apache上に配置する

Apache上でWordPressを再現する必要があるため、移動します。

$ sudo cp -r wordpress /var/www/html/wordpress

#4-3:権限問題の解決

どうしても生じるのが権限問題です。このまま実行してもwp-config.phpを手動で変更する必要がありますが、www-dataに権限を移行することによって今後生じる面倒事が無くなります。

$ sudo chown -R www-data:www-data /var/www/html/wordpress

#4-4:WEB上でWordPressの設定を行う

先程のifconfig IPアドレス値をブラウザ上に入力し、設定していきます。今回の場合ですと、私の場合、http://192.168.11.14/wordpressとなっています。環境が違うわけですからhttp://192.168.xxx.xxx/wordpressです。

2016-12-24 (1).png
正常表示

次に設定画面に先程設定したデータベース名などを入力していきます。データベースであるMySQLのパスワードは例として”raspass”を使用していますのでご自身が設定したパスワードを入力して下さい。その他の設定はそのままで十分です。

2016-12-24 (3).png
必要事項の入力

正しい値が入力されると以下の画面が出てきます。インストールの実行を行います。

2016-12-24 (5).png
正常にデータベースへ接続完了

 #4-5:サイトの基本情報の入力

サイトタイトルやユーザ名、パスワード、メールアドレスなどご自身のお好きな設定で。ここでは例を挙げているだけです。一応、公開はしませんが『検索エンジンがサイトをインデックスしないようにする』にチェックマークをつけましょう。

2016-12-24 (6).png
サイト基本情報の指定

#4-6:ログインをして動作を確認する

実際にログインを行って動作を確認して下さい。

2016-12-24 (7).png
管理画面
2016-12-24 (8).png
実際のサイト画面

#5:VPN上での改善

VPN上で表示するとレイアウトが崩れて正しく表示されない現象が発生します。これはWordPress上のアドレスがhttp://192.168.xxx.xxxであってVPNのアドレスであるhttp://25.xxx.xxx.xxxに対応していない為です。もし、正しく表示されているとしても、http://192.168.xxx.xxxに転送されているだけかもしれません。

因みに、これをVPN上のアドレスに対応させるだけでは不十分で次はローカルIP上からアクセス出来なくなります。

つまりIPアドレスである、http://192.168.xxx.xxx及びhttp://25.xxx.xxx.xxx (とhttp://raspberry.local)、に対応する必要があります。つまりWordPressのURLであるIPアドレスが2つ以上、つまり能動的(可変的)に動作する必要があります。

IP.png
処理のイメージ

#5-1:wp-config.phpの編集

wp-config.phpを編集し、サイトのURLを優先的に決定させ、能動的(可変的)にURLを変更可能にする設定を行います。ファイルの編集を行って下記の行を追加します。基本的に指定ありませんが(91行以下から制限あり)、データベースの照合順序[define(‘DB_COLLATE’, ”);](44行目)の下に追加するのが順当だと思います。

$ sudo vi /var/www/html/wordpress/wp-config.php
/** 動的URLに対応するめの設定 */
define('WP_SITEURL', 'http://' .$_SERVER['HTTP_HOST']. '/wordpress');
define('WP_HOME', 'http://' .$_SERVER['HTTP_HOST']. '/wordpress');

#5-2:記事本文中の画像等のURLを能動的(可変的)なものにする

wp-config.phpの設定のみでは不十分で、本文中の画像等のURLは変化しません。記事中で対応させるために『Insert PHP』というプラグインを新規追加します。[insert_php]XXXXXXX[/insert_php]で囲まれた範囲はphpが実行されます。つまりHTTP_HOSTが出力されるPHPを挿入すると可変的なURLにもメディアが対応することができます。[insert_php]echo $_SERVER[‘HTTP_HOST’];[/insert_php]をhttp://192.168.xxx.xxxの部分に置換することで対応することができます。IMGのURL部分に置換することで画像の能動的(可変的)な改善が得られます。

現在のアクセスURLは『http://[insert_php]echo $_SERVER['HTTP_HOST'];[/insert_php]』です。

#6:WordPress(PHP)のメディアアップロード容量を増やす

通常であれば、2MBですがこれは少ないのでメディアの許容アップロード値を増加させるべく対応させます。php.iniの変更を行います。

#6-1:php.iniの編集

$ sudo vi /etc/php5/apache2/php.ini
#393行
memory_limit = 128M
#660行
post_max_size = 80M
#820行
upload_max_filesize = 60M

#6-2:.htaccessの編集

次に.htaccessを編集します。以下を追加します。

$ sudo vi /var/www/html/wordpress/.htaccess
php_value memory_limit 128M
php_value post_max_size 80M
php_value upload_max_filesize 60M

#7:あとがき

最後に再起動を済ませると良いかもしれませんね。

$ sudo reboot

#7-0:

さて、ここまでどうでしたか?筆者も実行のみだと1時間くらいで終わりました。しかし、記事にするとなると3倍以上の時間がかかります。意外と大変…。でも、自分の忘備録ともなりますし、まぁ多分将来約に立つのかも。なにかエラー等が出ましたらコメント欄もしくは、お問い合わせページより報告お願いします。(クリスマスになに書いてるんだろ…。)

以上


“Raspberry Piで実行するVPN上のWordPress” への1件のコメント

Raspberry PiとVPNで作るウェブオンラインストレージサーバ | きのこタイム へ返信するコメントをキャンセル

※メールアドレスの入力は必須ではありません。
※商品紹介や悪意のあるコメントはご遠慮ください。