Google Readerが終了して以来、AWSでTiny Tiny RSSを動かしてRSSを読んでましたが、Google Cloud Platformの勉強がてらCompute Engineに移行してみようと思います。基本的に自分用の備忘録です。
まずはGCE上でTiny Tiny RSSを動かすところまでやってみます。
環境
個人的に使い慣れたものを組み合わせてこんな感じにします。
GCEのVMインスタンスを起動
Machine typeはとりあえずf1-micro
を選択。OSはubuntu-14-04
を選択。Firewallの設定のAllow HTTP trafficをチェックして起動します。
各種ソフトウェアのインストールと設定
SSHでログインして作業します。
$ sudo timedatectl set-timezone America/Los_Angeles
$ sudo apt-get update
$ sudo apt-get install mysql-client mysql-server
$ sudo apt-get install lighttpd
$ sudo apt-get install php5-cli php5-curl php5-fpm php5-mysql
php5
をインストールするとapache2
も付いてくるので、ここではphp5-cli
をインストールします。
MySQLの設定ファイルは/etc/mysql/my.cnf
にあります。ここでは、キャラクターセットの設定をutf8mb4
にセットしてmysql
を再起動します。
$ sudo vi /etc/mysql/my.cnf
[client]
...
default-character-set = utf8mb4
[mysqld]
..
character-set-server = utf8mb4
$ sudo service mysql restart
mysql stop/waiting
mysql start/running, process 1234
PHPの設定ファイルは/etc/php5/*
にあります。ここでは、PHP-FPMの設定のcgi.fix_pathinfo
を1
にセットして、php5-fpm
を再起動します。
$ sudo sed -i -e 's/^;\(cgi.fix_pathinfo\)\s*=.*$/\1 = 1/' /etc/php5/fpm/php.ini
$ sudo service php5-fpm restart
php5-fpm stop/waiting
php5-fpm start/running, process 1234
Lighttpdの設定ファイルは/etc/lighttpd/*
にあります。ここでは、fastcgi-phpの設定をPHP-FPM用に以下のように書き換えて、fastcgi
とfastcgi-php
を有効にして、lighttpd
をリロードします。
$ sudo vi /etc/lighttpd/conf-available/15-fastcgi-php.conf
# -*- depends: fastcgi -*-
# /usr/share/doc/lighttpd/fastcgi.txt.gz
# http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ConfigurationOptions#mod_fastcgi-fastcgi
## Start an FastCGI server for php (needs the php5-fpm package)
fastcgi.server += ( ".php" =>
((
"socket" => "/var/run/php5-fpm.sock",
"broken-scriptfilename" => "enable"
))
)
$ sudo lighttpd-enable-mod fastcgi
Enabling fastcgi: ok
Run /etc/init.d/lighttpd force-reload to enable changes
$ sudo lighttpd-enable-mod fastcgi-php
Enabling fastcgi-php: ok
Run /etc/init.d/lighttpd force-reload to enable changes
$ sudo service lighttpd force-reload
* Reloading web server configuration lighttpd [ OK ]
動作確認
ブラウザで http://(IPアドレス)/ にアクセスして、Lighttpdのデフォルトページが表示されればLighttpdはok。
次のようなPHPスクリプトを用意して、ブラウザで http://(IPアドレス)/phpinfo.php にアクセスして、PHPの情報が表示されればPHPはok。
<?php phpinfo() ?>
Tiny Tiny RSSのインストールと設定
インストールガイドに従ってインストールします。
$ sudo apt-get install git
$ cd /var/www
$ sudo git clone https://tt-rss.org/git/tt-rss.git tt-rss
Cloning into 'tt-rss'...
...
$ sudo chgrp www-data tt-rss
$ sudo chmod g+w tt-rss
$ cd tt-rss
$ sudo chgrp www-data cache cache/* feed-icons lock
$ sudo chmod g+w cache cache/* feed-icons lock
Lighttpdから各種ファイルを書き込めるようにいくつかのディレクトリのパーミッションも設定しておきます。設定が足りない場合は以下のブラウザでのインストール時にメッセージが出るので、それを見て設定しても問題ありません。
MySQLのユーザとデータベースを作成します。
$ mysql -u root -p
Enter password:
...
mysql> CREATE DATABASE ttrss_db CHARACTER SET utf8mb4;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'ttrss_user'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL ON ttrss_db.* TO 'ttrss_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)
MySQL用のスキーマではテーブルをDEFAULT CHARSET=UTF8
で作るようになっているので、DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
に書き換えます。こちらも参考にしつつ、titleやcontentといったカラムのある以下のテーブルについて書き換えます。また、ttrss_entriesテーブルのguidカラムについてはvarchar(255)
をvarchar(191)
に書き換えます。
- ttrss_feed_categories
- ttrss_archived_feeds
- ttrss_feeds
- ttrss_entries
- ttrss_user_entries
- ttrss_filters2
- ttrss_enclosures
- ttrss_settings_profiles
- ttrss_feedbrowser_cache
- ttrss_linked_feeds
- ttrss_error_log
$ cd /var/www/tt-rss/schema
$ sudo cp -p ttrss_schema_mysql.sql ttrss_schema_mysql.sql.orig
$ sudo vi ttrss_schema_mysql.sql
ブラウザで http://(IPアドレス)/tt-rss/install/ にアクセスしてインストールします。成功すれば/var/www/tt-rss/config.php
に設定ファイルが作られるので、ざっと設定ファイルの内容を確認して、次の設定を追加しておきます(後述)。
$ sudo vi /var/www/tt-rss/config.php
define('DAEMON_SLEEP_INTERVAL', 600);
フィードのアップデート用にUpstartスクリプトを用意して起動します。
$ sudo vi /etc/init/tt-rss.conf
description "Tiny Tiny RSS Update Daemon"
author "z80"
start on runlevel [2345]
stop on runlevel [016]
respawn
exec start-stop-daemon -S -c www-data:www-data -x /usr/bin/php /var/www/tt-rss/update.php -- --daemon --log /var/log/tt-rss.log --quiet
respawn
で、デーモンが何らかの理由で終了したら再起動するようにします。
$ init-checkconf /etc/init/tt-rss.conf
File /etc/init/tt-rss.conf: syntax ok
$ sudo touch /var/log/tt-rss.log
$ sudo chgrp www-data /var/log/tt-rss.log
$ sudo chmod 664 /var/log/tt-rss.log
$ sudo service tt-rss start
tt-rss start/running, process 1234
デフォルトでは2分おきにDBをチェックしてフィードのアップデートを行うようになってます(毎回全部ではなく、フィードのアップデートが必要かどうかチェックして、必要な分だけ)。しかし、個人で使ってる分にはそんなに頻繁に走らせる必要はないので、設定ファイルのDAEMON_SLEEP_INTERVAL
で間隔を適当に調整しておきます。
ブラウザで http://(IPアドレス)/tt-rss/にアクセスして、adminユーザのパスワード(デフォルトはpassword)を変更しておきます。
Fever API pluginのインストールと設定
スマートフォンのアプリからアクセスできるようにFever API pluginをインストールします。releasesページの最新版を取ってきて/var/www/tt-rss/plugins/
ディレクトリにコピーします。
$ wget https://github.com/dasmurphy/tinytinyrss-fever-plugin/archive/1.4.7.tar.gz
...
$ tar xvfz 1.4.7.tar.gz
$ sudo mv tinytinyrss-fever-plugin-1.4.7/fever /var/www/tt-rss/plugins/
Reeder (iOS) integration with TT-RSS (via Fever API)を参考に設定などを行います。
まとめ
Compute Engine上でTiny Tiny RSSを動かすことができました。
ToDo
このままだとVMインスタンスが停止したらデータも丸ごと消えてしまいます。GCEにはライブ マイグレーションがあるのでそれなりに動き続けてくれそうですが、それでも停止する可能性は残るので、Persistent DiskやCloud SQLを使うなどしてデータが消えないようにする必要があります。
追記:Google Compute Engine (GCE)からCloud SQLを使ってみる