tl;dl
ふと思い立ってチケットに todo やメモ書き、予定を登録して管理出来ないものかと考えて Redmine を試してみた。
目標
- Redmine をサクッと構築する(Redmine を構築することが目的にならないように)
- データベースは MySQL
- 自己証明書で HTTPS 運用
- iPhone アプリ RedminePMでの利用も想定して設定する(アプリをインストールする)
- 出来れば Docker コンテナで構築しておいて引っ越ししやすいようにしておく
参考
Redmine memo
検証の環境
- 構成図
- Debian 8.1
$ cat /etc/debian_version 8.1
- Docker
# 構築当初 $ docker version Client version: 1.6.2 Client API version: 1.18 Go version (client): go1.3.3 Git commit (client): 7c8fca2 OS/Arch (client): linux/amd64 Server version: 1.6.2 Server API version: 1.18 Go version (server): go1.3.3 Git commit (server): 7c8fca2 OS/Arch (server): linux/amd64 # バージョンアップ $ docker version Client: Version: 1.8.1 API version: 1.20 Go version: go1.4.2 Git commit: d12ea79 Built: Thu Aug 13 02:20:14 UTC 2015 OS/Arch: linux/amd64 Server: Version: 1.8.1 API version: 1.20 Go version: go1.4.2 Git commit: d12ea79 Built: Thu Aug 13 02:20:14 UTC 2015 OS/Arch: linux/amd64
ちなみに iPhone は iPhone 5c で iOS 8.4 となる。
docker build
このマントおじさんの力を拝借するが、以下のように Redmine のバージョンを最新では無く一つ前のバージョンに変更する。
$ git diff Dockerfile diff --git a/Dockerfile b/Dockerfile index ad2333d..a1efeab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM sameersbn/ubuntu:14.04.20150816 MAINTAINER sameer@damagehead.com -ENV REDMINE_VERSION=3.1.0 \ +ENV REDMINE_VERSION=3.0.4 \ REDMINE_USER="redmine" \ REDMINE_HOME="/home/redmine" \ REDMINE_LOG_DIR="/var/log/redmine" \
一つ前のバージョンにする理由は iPhone アプリの RedminePM が Remine 3.1.0 だと認証でコケることを事前検証で確認した為。
docker build -t inokappa/redmine .
この Redmine コンテナを利用していく。
MySQL コンテナを起動
$ docker run --name=mysql-redmine -d \ --env='DB_NAME=redmine_production' \ --env='DB_USER=redmine' \ --env='DB_PASS=xxxxxxxxxxxx' \ --volume=/srv/docker/redmine/mysql:/var/lib/mysql \ sameersbn/mysql:latest
引っ越しを考えると Volume オプションは付けない方がよかったかもしれない。
Redmine コンテナを起動
コンテナの前に HTTPS プロキシを置く場合には REDMINE_HTTPS=true
を Environment に渡す必要があるようだ。
$ docker run --name=redmine -d \ --link=mysql-redmine:mysql \ --env='REDMINE_HTTPS=true' \ --publish=10080:80 \ --env='REDMINE_PORT=10080' \ --env='DB_NAME=redmine_production' \ --env='DB_USER=redmine' \ --env='DB_PASS=xxxxxxxxxxxx' \ --volume=/srv/docker/redmine/redmine:/home/redmine/data \ inokappa/redmine
DB 接続パスワード等の情報を Environment で渡すのが嫌なら database.yml に直指定で docker build
するのも検討したい。
MySQL コンテナ同様に引っ越し前提だと Volume オプションは無しで起動した方が良かったかな...まあ、いいや。
HTTPS 運用(Apache コンテナを利用する場合)
せっかくなので HTTPS のプロキシとして利用する Apache も Dockernize する。
HTTPS 運用(ホストの Apache を利用する場合)
- mod_ssl と mod_proxy 関連モジュールを有効に
$ sudo a2enmod ssl $ sudo a2enmod proxy $ sudo a2enmod proxy_http
- 自己証明書の作成
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
- 以下のように Apache の設定を用意する
$ sudo sh -c "cat << EOT > /etc/apache2/sites-available/redmine.conf # <VirtualHost *:80> # ServerAdmin admin@example.com # Servername family.redmine.inokara.com # DocumentRoot /var/www/html/ # ProxyPass / http://localhost:10080/ # ProxyPassReverse / http://localhost:10080/ # </VirtualHost> <VirtualHost *:443> ServerAdmin admin@example.com Servername family.redmine.inokara.com:443 DocumentRoot /var/www/html/ SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key # SSLProxyEngine on # RequestHeader set X_FORWARDED_PROTO 'https' ProxyPass / http://localhost:10080/ ProxyPassReverse / http://localhost:10080/ </VirtualHost> EOT "
- 設定を有効にする
$ sudo a2ensite redmine
- Apache を再起動する
$ sudo service apache2 reload
ログイン
RedminePM memo
RedminePM とは
自己証明書なサイトへアクセスする準備
- サーバー側で DER 形式のサーバー証明書を作成
$ openssl x509 -in /etc/apache2/ssl/apache.crt -outform DER -out /tmp/server.der
尚、DER 形式証明書については技術/Security/PKI,SSL,TLS/メモ01_拡張子の迷宮(pem,der,crt,cer,csr,...)や RSA鍵、証明書のファイルフォーマットについてを参考にさせて頂いた。有難うございます。
証明書をメール添付で iPhone に転送して添付をタップする。尚、Apache コンテナを利用した場合には証明書を生成した際に assets/etc/apache2/ssl/server.der からコピーして利用する。
インストールをタップする。
警告が表示されるが引き続きインストールをタップする。
インストール完了。
API での操作を有効にする
RedminPM では認証の際に Redmine API を利用するので API での操作を有効にする必要がある。
[設定] → [認証] タブ→ [RESTによるWebサービスを有効にする] にチェックを付けて有効にする。
RedminePM の設定
- アカウント設定
アカウント設定に Redmine の URL とアカウント名、パスワードを設定する。
RedminePM でチケットの一覧を確認
- チケットの一覧を確認
おお、イケた。
その他メモ
Debian 8 jessie で Docker を動かす際の注意点
コンテナの名前解決が出来なかったので以下を修正して docker サービスを再起動する。
--- docker.bk 2015-08-18 10:14:42.912000000 +0900 +++ docker 2015-08-18 10:14:51.432000000 +0900 @@ -4,7 +4,7 @@ #DOCKER="/usr/local/bin/docker" # Use DOCKER_OPTS to modify the daemon startup options. -#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4" +DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4" # If you need Docker to use an HTTP proxy, it can also be specified here. #export http_proxy="http://127.0.0.1:3128/"
systemd 管理下なので再起動は以下のように。
$ sudo systemctl restart docker.service
Papertrail で Apache のアクセスログを
Docker の Log Driver で syslog を指定しておいて Syslog サーバーとして Papertrail を利用した。Papertrail は Syslog 転送でログを登録出来る SaaS で登録したログの検索やアーカイブを可能。尚、Free プランで 48 時間分のログ検索や 7 日分をアーカイブ可能となっている。以下の記事が日本語で良く纏まっており参考にさせて頂いた。有難うございます。
ということで、Papertrail にサインアップして以下のように Apache コンテナを起動する。
$ docker run -d \ --link redmine:redmine \ --name=apache \ -p 80:80 \ -p 443:443 \ --log-driver=syslog \ --log-opt syslog-address=udp://xxxx.papertrailapp.com:xxxxx \ --log-opt syslog-facility=daemon \ --log-opt syslog-tag="apache" \ inokappa/apache
起動後、適当にアクセスしているうちに Papertrail のダッシュボードにてログを確認することが出来る。
尚、注意点としては...
セキュアな転送がサポートされているものの Docker の Log Driver では無理そうなのは残念だけど、構成を変えることで Papertrail へのセキュアなログ転送を実現。
ということで
土台は出来たので
- 予定を各チケットに登録して作成して予定表っぽく
- メモやアイデアを各チケットに登録して付箋ボードっぽく
使ってみる。
その他のチケット駆動生活をサポートしてくれそうなツール
どんなに良いツールを使っても結局は使う本人次第ではあります...