ばやしこのブログ

プログラミング初心者がメモとかを書きます。基礎的なこともメモとして。偏食系のアニオタ。

Webアプリが動いてるサーバーへwordpressの導入

さくらのVPSを借りてWebアプリやスマホアプリのためのAPIを動かしているがトップページには申し分程度のHTMLファイルしか置いてなかったのでwordpressを利用してリッチにしてみた.
別に向こうでブログ書く気はないけど.

今回私が求めた条件は以下の通り.

  • 既存のWebサービスに影響を及ぼさないこと
  • vayacico.comにアクセスしたらWordPressのトップページが表示されること
  • ルートディレクトリを汚さないこと

この条件を満たすためにルートディレクトリのサブディレクトリにwordpressを展開してApachemod_rewriteモジュールでURLを書き換えることにした.

まずは通常通りwordpressのインストールする.

インストールといってもファイルを持ってきて置くだけらしい.
どの段階までをインストールというのにかに依るけど.

$ wget https://ja.wordpress.org/wordpress-4.8.2-ja.zip
$ unzip wordpress-4.8.2-ja.zip 
$ sudo cp -r wordpress /var/www/html/

続いてデータベースの作成.
MySQLは既に導入済みだったのでユーザーとデータベースを作るだけ.

mysql> CREATE USER user IDENTIFIED BY 'password';
mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysql> GRANT ALL ON user.* to wordpress_user;

とりあえずこれで/wordpress/以下で動かせるようになる.

自分は先にWordPressの初期設定をやってしまったので後でひと手間かかった.
先にmod_rewriteの設定をやった方が楽だったのかもしれないかも.

アクセスするとこんな感じの設定画面になるのであとは従っていけば完了する.
f:id:vayacico:20171029163510p:plain

ファイルに書き込めないだの言われたのでEmacsから手動で作成した.
f:id:vayacico:20171029163654p:plain

あとは従ってやればOKだった.

続いてmod_rewriteの設定を行う.

前にも散々弄った形跡があるので(なにをしたかったのかは忘れた)これだけで動くのかわからないが自分は以下の設定でいい感じに動いてくれた.

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteRule ^/api/(.*)$ /api/$1 [L]
        RewriteRule ^/twitgallery/(.*)$ /twitgallery/$1 [L]
        RewriteRule ^/(.*)$ /wordpress/$1 [L]
</IfModule>

/api/以下でスマホアプリ用のAPIが動いてるので,要求URIが/api/~だったら/api/~に書き換えて(書き換えてないけど)判定を終了する.
同じように/twitgallery/以下でもWebアプリが走っているのでこれも書き換えて(書き換えてないけど)判定を終了.
そして最後のルールで/~を全て/wordpress/~に書き換える.

こうすることでAPIやWebアプリだった場合以外を全部WordPressに飛ばすことができた.


これで終わり…だと思っていたのだがアクセスしてみるとCSSが効いてないデザインが崩れた見た目になる,
どうやらWordPress内でURI情報を保持して使っているらしい.
デベロッパーコンソールで見てみるとどうもドメインも含む完全なURLでCSSやJSにアクセスしてるっぽかった.

設定画面から書き換えできるらしいので一度mod_rewriteの設定を元に戻し管理画面に入る.

[設定]->[一般]にそれっぽい設定があったので書き換える.

f:id:vayacico:20171029165531p:plain

変更を保存するとその場で切り替わるらしく404になるが設定は正常に完了している.

そしてmod_rewriteの設定をもう一度変えることで全部まるっと思った通りに動いた.

f:id:vayacico:20171029170047p:plain

内容はまだ全く作っていないがとりあえずこれで完了.
思いの外簡単であった.
セキュリティがなんとなく怖くもあるが.

ログインページをローカルアクセスオンリーにしてsshポートフォワーディングからのみアクセスできるようにしたかったけど上手くいかない.
なんで相対パスで偏移してくれないのか….
ここら辺はまた今度やろう.