スクラム開発もどきをしているのだけど、これまで使ってたRedmineのBacklogsプラグインがいまいち使いづらかったのでtaigaに移行しようとしてはまっている話。
何を使うか
サーバ立てるのは面倒なのでdockerでどうにかしたい。
探すといろいろでてくるのだけど、公式ドキュメントに当ってみると、taigaはdockerをサポートしていないものの、いくつか紹介されているリポジトリがあったので、せっかくなので使ってみたかったdocker-composeの設定が入ってる
を選んでみる。
構築
$ git clone https://github.com/benhutchins/docker-taiga-example.git
して、手順に従って設定を修正。
taiga-conf/conf.jsonがtaiga-frontの設定。いくつか修正をいれる。(コメント参照)
{
"api": "http://example.com/api/v1/", # 利用しているドメインに合わせて修正
"eventsUrl": null,
"eventsMaxMissedHeartbeats": 5,
"eventsHeartbeatIntervalTime": 60000,
"eventsReconnectTryInterval": 10000,
"debug": true, # 転ばぬ先の
"debugInfo": true, # 杖
"defaultLanguage": "ja", # 日本人なので
"themes": ["taiga"],
"defaultTheme": "taiga",
"publicRegisterEnabled": true, # オンラインサインアップしたいのでtrueに
"gravatar": true,
"feedbackEnabled": false,
"privacyPolicyUrl": null,
"termsOfServiceUrl": null,
"maxUploadFileSize": null,
"contribPlugins": [
"/plugins/slack/slack.json"
],
"tribeHost": null,
"importers": []
}
taiga-conf/local.pyはtaiga-backの設定。
# Please modify this file as needed, see the local.py.example for details:
# https://github.com/taigaio/taiga-back/blob/master/settings/local.py.example
#
# Importing docker provides common settings, see:
# https://github.com/benhutchins/docker-taiga/blob/master/docker-settings.py
# https://github.com/taigaio/taiga-back/blob/master/settings/common.py
from .docker import *
PUBLIC_REGISTER_ENABLED = True # オンラインサインアップしたいのでtrueに
DEBUG = True # 転ばぬ先の杖
TEMPLATE_DEBUG = False
## Slack
# https://github.com/taigaio/taiga-contrib-slack
INSTALLED_APPS += ["taiga_contrib_slack"]
## LDAP
# see https://github.com/ensky/taiga-contrib-ldap-auth
# INSTALLED_APPS += ["taiga_contrib_ldap_auth"]
## For additional configuration options, look at:
# https://github.com/taigaio/taiga-back/blob/master/settings/local.py.example
で、docker-compose.ymlでメールの設定、SSLの設定ができる。今回はSSL対応は見送るので、メールの設定だけ。
メールはしがらみによりgsuiteのsmtpリレーを利用。
...
# Hostname for your instance of Taiga. Required.
TAIGA_HOSTNAME: example.com # 利用しているドメインに合わせて修正
...
# Enable SSL externally, preferred method
#TAIGA_SSL_BY_REVERSE_PROXY: 'True'
# To use an external SMTP for emails, fill in these values:
TAIGA_ENABLE_EMAIL: "True" # gsuiteのsmtpリレーを利用したいのでtrueに
TAIGA_EMAIL_FROM: taiga@example.com # 通知メールの送信元
TAIGA_EMAIL_USE_TLS: "True" # 認証あり
TAIGA_EMAIL_HOST: smtp-relay.gmail.com # gsuiteのsmtpリレーの設定ガイドに従う
TAIGA_EMAIL_PORT: 465 # gsuiteのsmtpリレーの設定ガイドに従う
TAIGA_EMAIL_USER: aiga@example.com # smtp認証のユーザ
TAIGA_EMAIL_PASS: 'password' # smtp認証のユーザのパスワード
...
設定変更後、
$ docker-compose up -d
とすると1分程度でtaigaが立ち上がる。
エラー
一通り操作はできたものの、メールの送信だけ以下のエラー。
9月 06 20:06:33 server_name dockerd-current[11494]: ERROR:2018-09-06 11:06:33,146: Internal Server Error: /api/v1/auth/register
9月 06 20:06:33 server_name dockerd-current[11494]: Traceback (most recent call last):
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner
9月 06 20:06:33 server_name dockerd-current[11494]: response = get_response(request)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
9月 06 20:06:33 server_name dockerd-current[11494]: response = self._get_response(request)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
9月 06 20:06:33 server_name dockerd-current[11494]: response = self.process_exception_by_middleware(e, request)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
9月 06 20:06:33 server_name dockerd-current[11494]: response = wrapped_callback(request, *callback_args, **callback_kwargs)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/src/taiga-back/taiga/base/api/viewsets.py", line 106, in view
9月 06 20:06:33 server_name dockerd-current[11494]: return self.dispatch(request, *args, **kwargs)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
9月 06 20:06:33 server_name dockerd-current[11494]: return view_func(*args, **kwargs)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/src/taiga-back/taiga/base/api/views.py", line 461, in dispatch
9月 06 20:06:33 server_name dockerd-current[11494]: response = self.handle_exception(exc)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/src/taiga-back/taiga/base/api/views.py", line 458, in dispatch
9月 06 20:06:33 server_name dockerd-current[11494]: response = handler(request, *args, **kwargs)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/src/taiga-back/taiga/auth/api.py", line 98, in register
9月 06 20:06:33 server_name dockerd-current[11494]: return self._public_register(request)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/src/taiga-back/taiga/auth/api.py", line 78, in _public_register
9月 06 20:06:33 server_name dockerd-current[11494]: user = public_register(**data)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/contextlib.py", line 30, in inner
9月 06 20:06:33 server_name dockerd-current[11494]: return func(*args, **kwds)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/src/taiga-back/taiga/auth/services.py", line 125, in public_register
9月 06 20:06:33 server_name dockerd-current[11494]: send_register_email(user)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/src/taiga-back/taiga/auth/services.py", line 63, in send_register_email
9月 06 20:06:33 server_name dockerd-current[11494]: return bool(email.send())
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/site-packages/django/core/mail/message.py", line 342, in send
9月 06 20:06:33 server_name dockerd-current[11494]: return self.get_connection(fail_silently).send_messages([self])
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/site-packages/django/core/mail/backends/smtp.py", line 100, in send_messages
9月 06 20:06:33 server_name dockerd-current[11494]: new_conn_created = self.open()
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/site-packages/django/core/mail/backends/smtp.py", line 58, in open
9月 06 20:06:33 server_name dockerd-current[11494]: self.connection = connection_class(self.host, self.port, **connection_params)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/smtplib.py", line 251, in __init__
9月 06 20:06:33 server_name dockerd-current[11494]: (code, msg) = self.connect(host, port)
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/smtplib.py", line 338, in connect
9月 06 20:06:33 server_name dockerd-current[11494]: (code, msg) = self.getreply()
9月 06 20:06:33 server_name dockerd-current[11494]: File "/usr/local/lib/python3.5/smtplib.py", line 394, in getreply
9月 06 20:06:33 server_name dockerd-current[11494]: raise SMTPServerDisconnected("Connection unexpectedly closed")
9月 06 20:06:33 server_name dockerd-current[11494]: smtplib.SMTPServerDisconnected: Connection unexpectedly closed
問題の切り分けのため、dockerコンテナ内から
に載ってるソースを使ってメールを投げてみると成功する。
ここで一つ勘違いをして、このソースだとポート指定していない -> 25使ってるんじゃない?と思い、docker-compose.yamlで25を指定してみる。
smtplib.SMTP_SSL の場合省略時は465なので勘違いなのだけど、何故かこれでメールが届くようになってしまった。なぜ。
$ docker exec f2ce38f404db env | grep TAIGA_EMAIL_PORT
TAIGA_EMAIL_PORT=25
いちおうポートが設定されているかも確認。されている。
とりあえず動いているのでこのままほうっておきつつ継続調査。