tDiary on Ubuntu 18.04

# はじめに
絶対に外部に公開したくない日記、というものが存在する。Cloud上で書いて完全非公開にすればよいのかもだけれど、万が一が怖い。手書きで管理するのは今更厳しい。手で文字入力なんて、手指の筋肉が衰え切った自分では不可能だ。テキストエディタで書き続けるのもさすがにアレ。というわけで[tDiary](http://www.tdiary.org/).

# ターゲットとなる環境
* OS Ubuntu 18.04.2
* Webサーバ Apache 2.4.x
* tDiary 5.0.x

tDiaryのサイトにもインストールガイドはある。ただ、Apache 1.3をターゲットとしたもので止まってしまっていて、現在のApache2.4ではそのまま使えない。このため、Apache2のインストールと、そのカスタマイズを記載する。
ただ、これを書いている私自身もWeb関係技術の知識はUpdateが止まっているので、もしより楽な手法があれば教えてほしいところ

### 注意点、というか
今まで別環境で書いてきたtDiaryのレコードを、新しい環境へ移行するためのメモ。日記のデータはテキストで作成されたものであり、PostgreSQLなどのDB化したものではない。移行も検討したが、Databaseは普段触れることもない自分では、移行の時にもだえ苦しむと判断してテキストでの保存とした。
tDiaryの日記保存先をどうやって作るか、というのはこのエントリの対象外。デフォルトでの作り方はあると思うのだけれど、そこは調べてない。

# Apache2のインストール
    $ sudo apt install curl     # Curlのインストール
    $ sudo apt install ufw      # Firewallをインストール
    $ sudo ufw enable
    $ sudo ufw allow 80         # Apache2用にPort 80を穴あけ
    $ sudo apt install apache2  # Apach2のインストール
    $ curl localhost && echo success || echo failed
 
Serverを入れるので、最初にFirewallを導入。
最後のは動作確認. **success**と戻ってくれば成功

### CGIの有効化
    $ cd /etc/apache2/mods-enabled
    $ sudo ln -s ../mods-available/cgid.conf ./cgid.conf
    $ sudo ln -s ../mods-available/cgid.load ./cgid.load

### Mod Rewriteの有効化
tDiaryで過去の日付の日記を参照するとき、(http://XXXXXX/tdiary/20YYMMDD.html) といった形式でもアクセスできるようにしたい。これを実現するため、Mod Rewriteを有効にする。

    $ sudo a2enmod rewrite     # mod_rewriteを書き換え
    $ sudo sh -c "echo 'RewriteEngine on' > /etc/apache2/mods-available/rewrite.conf"
    $ cd /etc/apache2/mods-enabled
    $ sudo ln -s ../mods-available/rewrite.load ./rewrite.load
    $ sudo ln -s ../mods-available/rewrite.conf ./rewrite.conf
    $ sudo systemctl restart apache2

sudo で実行したコマンドしても、リダイレクトする際はsudo 対象外となるため、2行目はこのような書き方となってしまっている。

### Rewriteルールの作成

    $ sudo vi /etc/apache2/sites-available/000-default.conf

Mod Rewriteはここで有効にする. VirtualHostの配下で下記を記載. 後で出てくるconf-enabledの中に書いても期待するようには動いてくれなかった。なんだろう。
    
    RewriteRule ^/tdiary/([0-9]+).html$ "/srv/www/tdiary/index.rb?date=$1"

tDiary向けにconfファイルの修正もあるけれど、まずはtDiary自体を展開することにする。


# tDiaryのインストール

    $ sudo apt-cache search tdiary
    $ sudo apt install tdiary tdiary-theme tdiary-contrib

Ubuntu 18.04.2標準のパッケージをインストール。5.0.8だった。

### tDiaryの展開先
    $ sudo mkdir -p /srv/www/tdiary

tDiaryで共通して使用される各スクリプトはここに展開する。

### 日記データの保存先
    $ ls /home/XXXXXX/diary #ここに保存
    $ sudo chown -Rf www-data:www-data /home/XXXXXX/diary
対して、各個人が書いていく日記は別のところで保存。このエントリーでは/home/XXXXXX/diaryとしている。
アクセス権限はwww-dataにする必要があった。

### tDiaryイメージの展開
    $ whatis /usr/bin/tdiary-setup
    tdiary-setup (1)     - installer to set up tdiary files for a user
    $
    $ sudo /usr/bin/tdiary-setup copy /srv/www/tdiary
    Input data_path (default: /home/XXXXXX/data): /home/XXXXXX/diary ←環境に合わせて入力
    Choose English, Japanese, Traditional-Chinese [E/j/z]: j ← 日本語に設定

    data_path: /home/XXXXXX/diary
    language: j
    Correct? [Y/n]: y ← 正しければy. nでアボートする。
    Input password for root in /home/XXXXXX/.htpasswd: XXXXXX ← パスワードを設定
    Input again to confirm: XXXXXX ← 再度パスワードを入力
    Copy all flies. You should setup CGI files by yourself.

ここでhtpasswdを書き込んでいるけれど、よく見たらrootのものになっている。
ここでユーザ名を指定する方法はあるのかな？　
最終的にはここで生成される.htaccessはそのまま使わず、新しくアカウントを指定して作った。

    $ sudo htpasswd -c /home/XXXXXX/.htpasswd ユーザ名

### tDiary用のApache Configファイルの用意
元ネタになるConfigは'/srv/www/tdiary/dot.htaccess'. これを下記のように書き換えた。
BASIC認証のユーザ名は.htpasswdで生成されたものと同じものとする。

    $ sudo vi /etc/apache2/conf-available/tdiary.conf
    alias /tdiary/images /home/XXXXXXXX/diary/images
    alias /tdiary        /srv/www/tdiary
    <Directory /srv/www/tdiary>
        Require all granted
        Options +ExecCGI
        AddHandler cgi-script .rb
        DirectoryIndex index.rb
        AddType application/xml .rdf
        <Files "*.rhtml*">
              deny from all
        </Files>

        <Files "tdiary.*">
              deny from all
        </Files>

        <Files update.rb>
              AuthName      tDiary
              AuthType      Basic
              AuthUserFile  /home/XXXXXX/.htpasswd
              Require user  ユーザ名
        </Files>

        <Files squeeze.rb>
              AuthName      tDiary
              AuthType      Basic
              AuthUserFile  /home/XXXXXX/.htpasswd
              Require user  ユーザ名
        </Files>
    </Directory>

squeeze.rbは作成した日記をHTML形式で吐き出してくれるプラグイン。便利なのでずっと使っていたのだけれど、[tDiary 5.0.0からはCoreからContribに移された](http://www.tdiary.org/20160330.html)。
でも、dot.htaccessのサンプルConfigには載せられたままだった。修正漏れかな？

    $ cd /etc/apache2/conf-enabled
    $ sudo ln -s ../conf-available/tdiary.conf ./tdiary.conf
    $ sudo systemctl restart apache2

# tDiaryのチューニング
### CSRF対策
この投稿では、tDiaryでの日記の保存先'/home/XXXXXX/diary/'としている。
日記自体のConfigはこのディレクトリの'tdiary.conf’で設定される。基本的にはtDiary上から編集できるが、いくつかできないものもある。
        'base_url' => "http://XXXXXX/tdiary/",
という行がある。ここのホスト名（XXXXXX）をローカルノードの名前に合わせる必要がある。
（でないと、日記を書きこめない）

### squeeze.rb
全文検索エンジンにFeedさせるのに便利なので、最初期から使っている。Contribから回収し、適切な場所にコピーする。

    $ sudo cp /srv/www/tdiary/contrib/plugin/squeeze.rb /usr/share/tdiary/misc/plugin/


Ubuntuだと、デフォルトのプラグイン保存先がちょっと違っていた。/srv/www/tdiary/misc/pluginにも同一のプラグインが展開されるため、最初こちらにコピーしても動作しなくて慌ててしまった。

あと、/srv/www/tdiary/tdiary.confの最後に下記を追記

    $ sudo vi /srv/www/tdiary/tdiary.conf

    # SQUEEZE Plugin
    @options['squeeze.compat_path'] = true
    @options['squeeze.suffix'] = '.html'
    @options['squeeze.output_path'] = '/home/XXXXXX/diary/html' ← HTMLファイルの出力先

ひとまず、これで構築完了。動く、ハズ。