redmineを使ってみたくなった。
ガントチャートが使いたいくなった。代替品に良好な製品もない。Redmineを今更ながら使うことにした。
インストールして使ってみると、わりとキレイで良き。
github のIssueもあるし、gitlabで時間管理もできるのだけど、Redmineはこれはこれでいいね。
redmine の docker イメージについて
Redmine/Dockerhubがあるが、Redmineの「公式リリース」というわけでなく、コミッタはDocker社。docker社とコミュニティが気分でメンテナンスしてるっぽい。 オフィシャルのロゴが付いてるのはDocker社による、Dockerhubオフィシャルのパッケージである。それを示すオフィシャル・ロゴです。
気づかなくて、docker hub 提供のものを使ってしまった。LXCでUbuntuをインストールして構成したほうが楽だったと思う。
redmine docker イメージについて
- データベースの文字コードを意識しないと駄目( my.cnf を volumeで投入)
- redmine/configureation.yml は 自分で コピーする必要がある(Dockerfileでbuildが必要)
- passenger / webrick がある。unicorn は選べない。
LXCでUbuntu起動してAnsibleでインストールしたほうが良かったかも。
dockerhub オフィシャルイメージで,redmineを動くように設定したので、メモを残しておきます。
全体構成
. ├── redmine │ ├── Dockerfile │ ├── configuration.yml │ └── docker-compose.yml ├── start.sh └── volume ├── mysql │ ├── data │ └── etc └── redmine ├── data ├── plugins └── themes
Dockerfile は configuration.yml を突っ込む
docker-compose.ymlはメインの設定
volume/mysq/data は mysql の永続化
volume/mysql/etc は mysql の文字コード設定
volume/redmine 以下に、プラグイン・テーマ・アップロードファイルの置き場所を作る。
volumeコンテナを使うと、プラグイン・テーマのインストールが面倒なので使わない。unzip / wget で苦労する
docker-compose.yml
全体を起動する docker-compose.yml を書く。
db はMySQLにした。Debianベース。RedmineもDebianベース。
ボリュームとDBパスワードを設定しいる。
redmine に configuration.yml を送り込むためだけのために、build指定がある。
version: '3.1' networks: redmine-network: services: db: image: mysql:5.7 networks: - redmine-network container_name: redmine-db-mysql restart: always volumes: - ../volume/mysql/data:/var/lib/mysql - ../volume/mysql/etc:/etc/mysql/mysql.conf.d/ environment: MYSQL_ROOT_PASSWORD: Iew8ixiz MYSQL_DATABASE: redmine redmine: image: redmine-configured build: . container_name: redmine-web-rails ports: - '31256:3000' networks: - redmine-network volumes: - ../volume/redmine/plugins:/usr/src/redmine/plugins - ../volume/redmine/themes:/usr/src/redmine/public/themes - ../volume/redmine/data:/usr/src/redmine/files environment: REDMINE_DB_MYSQL: db REDMINE_DB_USERNAME: root REDMINE_DB_PASSWORD: Iew8ixiz REDMINE_SECRET_KEY_BASE: X_______X restart: always depends_on: - db
redmine/Dockerfile
configuration.yml をイメージに含めるためにビルドをする。Dockerfileではコピーするだけ。
ファイルを持ち込むだけで随分面倒くさいがdocker-composeの仕様なので仕方ない。1ファイルのためにボリュームでマウントしても面倒くさいだけ。(configuration.ymlは、多数ファイルともに設置されているため、もしconf.d形式ならVoume利用を選べた。)
FROM redmine:4-passenger COPY ./configuration.yml /usr/src/redmine/config/configuration.yml
redmine/configuration.yml
configuration.yml では、メール送信の設定をする。SMTPの設定くらい、Docker ENVで与えたいができません。
redmineイメージのdockerfileやentry_point.shをみても環境変数は見当たらないので、突っ込むことにした。もしかしたらRailsかRedmineの起動ENVにあったかもしれない。
default: email_delivery: delivery_method: :smtp smtp_settings: enable_starttls_auto: true address: "smtp.gmail.com" port: 587 domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps authentication: :plain user_name: "admin@example.com" password: "passsssssss"
volume/mysql/etc/mysqld.cnf
DockerのMySQLをutf8mb4にする。
mysqld.cnf を直接書き換えてもいいが、1ファイルを書き換えるために、Dockerビルドが走るのは面倒くさい。mysql は conf.d/ が使えるので、conf.d のディレクトリをボリュームにマウントして設定を流し込む。
このファイルは、ボリュームを通して/etc/mysql/mysql.conf.d/mysqld.cnf
としてmysqlに出現させる。
mysqld.cnf
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_general_ci pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql #log-error = /var/log/mysql/error.log # By default we only accept connections from localhost #bind-address = 127.0.0.1 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0
start.sh
起動と終了のコマンドをサクッと書いておく。
#!/usr/bin/env bash ## : vim PORT_PUBLISH=31256 cd $( dirname $0 )/redmine NAME=redmine-docker function stop(){ docker-compose down } function build(){ docker-compose build } function start(){ docker-compose up -d } function status(){ docker-compose ps } function main(){ echo $1 $NAME case $1 in status*) status; ;; build*) build; ;; stop*) stop; ;; strat) start ;; restrat) stop # build start ;; esac } main $@
起動確認して
./start.sh start ./start.sh status ./start.sh stop
ブラウザでアクセスする。
初期パスワードは、admin/admin
テーマをインストールしておく。
cd theme git clone https://github.com/farend/redmine_theme_farend_basic.git farend_basic
プラグインをインストールする
cd volume/redmine/plugins git clone git://github.com/suer/redmine_absolute_dates.git docker exec -it redmine-web-rails bash cd plugins/redmine_absolute_dates RAILS_ENV=production bundle exec rake redmine:plugins:migrate RAILS_ENV=production bundle install
プラグインの取得は、gitでdocker 外部からボリュームにファイルを突っ込んでる。
その後 docker exec で bundle install と rake migration を動かしている。
初期設定
設定→全般
タイトル、ホスト名とパス、プロトコル、マークダウン、Gzipを設定。ホスト名を指定しないと、メールリンクがlocalhost:3000
になる。
設定→メール
メール通知で送信元メールを設定して右下から「テストメール」を送信する。
設定→認証
プロジェクトが外部に丸見えにならないように設定する。
設定→表示
表示で全体テーマを変更する。Themeインストールが正しいときにここに出てくる。
言語もここで設定する。言語設定後に、設定を押し直して全体言語をロードする。MySQLの設定が正しいと先にすすめる。MySQLがマルチバイト文字非対応ならエラーになる。
その他プラグイン
公式にバージョン毎の対応一覧がある。リンク
Gitlab との連携はGitlabに記載がある
最後にNginx経由で公開
nginx 側で robots.txt を吐き出し、検索インデックスを拒否する。
nginxでhttps/http2+tls を処理してredmineへ投げる。
# vim: ft=nginx ts=2 sw=2 sts=2 sr noet: ####################################### ## vhost を docker へ ####################################### # # SSLの証明書はcloudflare に任せる server { listen 443 ssl http2; listen 80; server_name redmine.example.com; if ($scheme != "https") { return 301 https://$host$request_uri; } # cloudflare ssl_certificate /etc/nginx/certs/cloudflare/fullchain.pem; ssl_certificate_key /etc/nginx/certs/cloudflare/privkey.pem; access_log /var/log/nginx/$server_name.log; error_log /var/log/nginx/$server_name.error.log; location = /robots.txt { return 200 "User-agent: *\nDisallow: /\n"; } add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive"; location / { ## いつもの設定 proxy_read_timeout 300; proxy_connect_timeout 300; proxy_set_header Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $server_name; proxy_pass http://docker-host.lxd:31256; } }