本当にどうでもいいメモなどをたまに書く程度。

シェルが使えない共有レンタルサーバーで GNU social インスタンスを立ててみた

日付:

忙しい人向けの結論:
Softaculous ついてる共有レンタルサーバーで Qvitter プラグイン入れるのが楽。
Softaculous でドメインの / に GNU social をインストールし、FTP 等で Qvitter を入れる。


先月あたり Mastodon が流行って、自分でもインスタンスを立ててみようと思っていたのだが、かなりメモリを食うようで躊躇していた。メモリ 1GB の VPS でも swap を使い始めるほどだと。
Mastodon は GNU social と互換性があると紹介されていたので、GNU social の方をチェックしてみると、ぶっちゃけ LAMP 環境で動く。
GNU social なら VPS ですらなく、いわゆる共有レンタルサーバーでもいけるのではないか? と思ったのが始まり。

しかし蓋を開けてみると GNU social もやはり設置先サーバーでシェルが使えることが前提になりそうだ。
インストールまでは問題ない。git がなくても master ブランチの zip をダウンロードして展開すればいい。
問題はバージョンアップで、1.1.x から 1.2.x へのアップグレード手順の説明 (UPGRADE) では script/upgrade.php をコマンドラインで実行せよとある。
試しにブラウザーからアクセスしたら、

This script must be run from the command line 

と表示されて動作しない。
将来のバージョンアップでも同じ手順を踏むと考えると、インストールまではシェルが使えなくても大丈夫だが、バージョンアップ時にシェルが必要になるわけだ。

つまり、シェルが使えない大多数の共有レンタルサーバーでは GNU social インスタンスを長期的に利用することは難しい、ということになる。


Softaculous という各種ウェブ・アプリケーション簡単インストーラーがあって、特に海外の cPanel 採用の共有レンタルサーバーではこれが導入されていることが多い。
これは何ができるかというと、コントロールパネルから選んで最低限の設定内容をフォームに入力していくだけで、対応アプリケーションをインストールできる。WordPress や Joomla やその他かなりの数のアプリケーションに対応している (対応リスト)。
バージョンアップがあった際の更新もコントロールパネル上で行うことができる。

そして Softaculous で簡単インストールできるものの中に、GNU social がある。
これなら将来のバージョンアップ時も Softaculous に更新させればシェルなしでいけるのではないか。


Softaculous で GNU social をインストールする際の注意点としては、インストール先ディレクトリが標準では「gnu」になっているのを空にしておくこと。
つまり https://example.com/gnu/ といったサブディレクトリで使うのではなく、https://example.com/ といったドメイン直下で使う。
https://gs.example.com/ といったサブドメインで使うのも良いかも知れない。

これは後述する Qvitter プラグインがドメイン直下へのインストールを要求するためだ。


GNU social で日本語表示を使うためには、locale/ja/LC_MESSAGES/statusnet.po や plugins/*/locale/ja/LC_MESSAGES/*.po を gettext のユーティリティ msgfmt で .mo に変換してアップロードする必要がある。
これはプログラミングをやる人以外には結構ハードルが高いと思われる。そもそも一般人の Windows PC に gettext なんか入っているわけがない。しかも変換すべきファイルが分散しているので make を使わないと面倒くさすぎるし、make もまた一般人の Windows PC には入っていない。

さらに別件だが GNU social の標準画面構成はなんとも古めかしくダサい。

Qvitter プラグインを使うことで、これらはそこそこ解決できる。
Qvitter は GNU social で Twitter のような画面構成を実現するプラグインで、多くの GNU social インスタンスで採用されている。
Quitter.se のように、画面にでかでかと「マイクロブロガー連合は~」と表示されていたら Qvitter 採用サイトだという認識でだいたい問題ないと思う。
Qvitter は初期状態で日本語表示してくれるし、その日本語表現を変更したくなったらテキストエディターで編集してアップロードするだけで済む (Qvitter の locale は gettext ではなく JSON であるため)。

早い話、Qvitter プラグインを使えば、画面構成のダサさも、とりあえずの日本語表示も OK ということ。


先に Softaculous で GNU social をインストールしておいてからの作業になる。
https://github.com/hannesmannerheim/qvitter で zip をダウンロードして展開 (PC に git が入っているなら https://git.gnu.io/h2p/Qvitter を見て git clone)。
zip の場合ディレクトリ名が qvitter-master になっているのを Qvitter にして、plugins/ にディレクトリごとアップロード。
有効化するには GNU social の config.php を編集して↓を追記。

addPlugin('Qvitter');

また Qvitter は Fancy URL を有効にしている必要がある。
Softaculous でインストールした直後の GNU social にアクセスすると https://example.com/index.php/main/all みたいな URL になっているはずだ (サイトタイプが Public の場合)。
これを https://example.com/main/all にするのが Fancy URL で、Softaculous でインストールした直後には有効になっていない。

というわけで config.php に↓を追記。

$config['site']['fancy'] = true;

Fancy URL は Apache の mod_rewrite で実現するので、htaccess.sample を参考に .htaccess を書く。
参考までに、うちのはこうなってる。

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteBase /
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule (.*) index.php?p=$1 [L,QSA]
</IfModule>

<FilesMatch "\.(ini)">
	Require all denied
</FilesMatch>

ユーザー登録時に表示される利用規約は plugins/Qvitter/doc/ 下で、これは日本語版がないので英語版が表示されるはずだ (plugins/Qvitter/doc/en/terms.html)。
英語版のファイルを参考に plugins/Qvitter/doc/ja/terms.html を書いてアップロードすれば、ちゃんと日本語版が表示される。文字コードは UTF-8。


これで普段使う部分はだいたい日本語表示になる。
細かいことを気にすると、たとえば登録時やフォロー時に送信されるメイルは英語のままだし、設定画面に入ってしまうとやはり英語だ。
でもそこを気にしてしまうと gettext を入れて .mo を作るクソ面倒な話の始まりだ。
このあたりが妥協ラインではなかろうか。

また、Softaculous でのインストール時点では Fancy URL が有効になっていないために、インストール時に作った管理ユーザーで投稿したものはタイムラインでのリンクがおかしくなる。
これの修正は phpMyAdmin で profile テーブルの id: 1 の profileurl を編集し、「index.php/」を削除すればいい。
よくわからなければ (Fancy URL を有効にした後で) 管理ユーザーとは別に普段使うユーザーを作り、そちらを使う。

国内では Softaculous 採用サービスはあまり見ない印象だが、mixhost が採用しているようだ。


なお、このインストール手法の場合、キュー処理デーモンを使わない運用になるので、大規模なインスタンスには向かない。

comments powered by Disqus