メンターを任されたエンジニアのブログ

ある日メンターを任された3流エンジニアのブログ

環境構築:GitLab+Rocket.Chat+Taiga on Docker - Taiga編

はじめに言っておきますが、失敗しました。

なんで失敗すんだよ、俺が教えてやんよ、っていう方はご教示いただけると幸いです。

Taigaとは

かんばん方式のプロジェクト管理ツールです。
スクラム開発に適している、という評判を聞いて採用しました。

Docker-Composeでいれる

公式では、Dockerイメージはありません。
ただ、公式ページには、以下のような記載があります。

Docker is not officially supported by the Taiga development team but a docker script has been developed by Iván Pedrazas,
another docker script has been developed by Hylke Visser, and yet another docker script has been developed by Benjamin Hutchins.

Taiga: Other ways to setup initial environment

というわけで、頑張って作ってくれた人がいるので、それを参考にすることにしました。

※ちなみに、Vagrantイメージはあるらしく、そっちの方が確実かもしれません。

# git clone https://github.com/htdvisser/taiga-docker.git
# cd taiga-docker
# vi taiga.yml

data:
  image: tianon/true
  volumes:
    - /var/lib/postgresql/data
    - /usr/local/taiga/media
    - /usr/local/taiga/static
    - /usr/local/taiga/logs
db:
  image: postgres
  environment:
    POSTGRES_USER: taiga
    POSTGRES_PASSWORD: password
  volumes_from:
    - data
taigaback:
  build: taiga-back
  hostname: $HOSTNAME # ホスト名を入れる
  environment:
    SECRET_KEY: examplesecretkey
    EMAIL_USE_TLS: 'True'
    EMAIL_HOST: smtp.gmail.com
    EMAIL_PORT: 587
    EMAIL_HOST_USER: hoge@gmail.com #自分のgmailアドレス
    EMAIL_HOST_PASSWORD: password #パスワードを入力
  links:
    - db:postgres
  volumes_from:
    - data
  ports:
    - 0.0.0.0:8000:8000
taigafront:
  build: taiga-front-dist
  hostname: $HOSTNAME
  links:
    - taigaback
  volumes_from:
    - data
  ports:
    - 0.0.0.0:8080:80

LDAP連携用の設定をいれる

これをしないと好きなだけアカウント作られてしまうんじゃないか、と思って設定。

# cd taiga-back #taiga-dockerの直下にあるtaigaのバックエンド
# vi Dockerfile
FROM python:3.4

MAINTAINER Hylke Visser <htdvisser@gmail.com>

# Install dependencies
RUN \
  apt-get update -qq && \
  apt-get install -y netcat && \
  rm -rf /var/lib/apt/lists/* && \
  pip install circus gunicorn

# Install taiga-back
RUN \
  mkdir -p /usr/local/taiga && \
  useradd -d /usr/local/taiga taiga && \
  git clone https://github.com/taigaio/taiga-back.git /usr/local/taiga/taiga-back && \
  mkdir /usr/local/taiga/media /usr/local/taiga/static /usr/local/taiga/logs && \
  cd /usr/local/taiga/taiga-back && \
  git checkout stable && \
  pip install -r requirements.txt && \
  pip install taiga-contrib-ldap-auth && \ # <- これを追加
  touch /usr/local/taiga/taiga-back/settings/dockerenv.py && \
  touch /usr/local/taiga/circus.ini

# Add Taiga Configuration
ADD ./local.py /usr/local/taiga/taiga-back/settings/local.py

# Configure and Start scripts
ADD ./configure /usr/local/taiga/configure
ADD ./start /usr/local/taiga/start
RUN chmod +x /usr/local/taiga/configure /usr/local/taiga/start

VOLUME /usr/local/taiga/media
VOLUME /usr/local/taiga/static
VOLUME /usr/local/taiga/logs

EXPOSE 8000

CMD ["/usr/local/taiga/start"]

----------------------------------

# vi local.py

from .common import *

from .dockerenv import *

# THROTTLING
#REST_FRAMEWORK["DEFAULT_THROTTLE_RATES"] = {
#    "anon": "20/min",
#    "user": "200/min",
#    "import-mode": "20/sec"
#}

## 以下追記
INSTALLED_APPS += ["taiga_contrib_ldap_auth"]

LDAP_SERVER = 'ldap://LDAPHOST'
LDAP_PORT = 389

# Full DN of the service account use to connect to LDAP server and search for login user's account entry
# If LDAP_BIND_DN is not specified, or is blank, then an anonymous bind is attempated
LDAP_BIND_DN = 'CN=admin,DC=hoge,DC=com'
LDAP_BIND_PASSWORD = 'PASSWD'   # eg.
# Starting point within LDAP structure to search for login user
LDAP_SEARCH_BASE = 'OU=People,DC=hoge,DC=com'
# LDAP property used for searching, ie. login username needs to match value in sAMAccountName property in LDAP
LDAP_SEARCH_PROPERTY = 'uid'
LDAP_SEARCH_SUFFIX = None # '@example.com'

# Names of LDAP properties on user account to get email and full name
LDAP_EMAIL_PROPERTY = 'mail'
LDAP_FULL_NAME_PROPERTY = 'cn'


-------------------------------------------

# cd ../taiga-front-dist
# vi configure

# cat configure
#!/bin/bash

cat > /etc/nginx/upstream.conf <<EOL

upstream taiga-back {
  server ${TAIGABACK_PORT_8000_TCP_ADDR}:8000;
}

EOL

# Configure HTTP or HTTPS for nginx proxy
WEB_CONFIG=web-${SCHEME:-http}.conf
sed -i "/include .*.conf;/c\  include ${WEB_CONFIG};" /etc/nginx/nginx.conf

mkdir -p /etc/nginx/ssl
[ ! -z "${SSL_CRT}" ] && echo "${SSL_CRT}" > /etc/nginx/ssl/ssl.crt
[ ! -z "${SSL_KEY}" ] && echo "${SSL_KEY}" > /etc/nginx/ssl/ssl.key

PUBLIC_REGISTER_ENABLED=${PUBLIC_REGISTER_ENABLED:-true}
API=${API:-/api/v1/}
DEBUG=${DEBUG:-false}

cat > /usr/local/taiga/taiga-front-dist/dist/conf.json <<EOL

{
    "api": "${API}",
    "eventsUrl": null,
    "eventsMaxMissedHeartbeats": 5,
    "eventsHeartbeatIntervalTime": 60000,
    "debug": $DEBUG,
    "debugInfo": false,
    "defaultLanguage": "en",
    "themes": ["taiga"],
    "defaultTheme": "taiga",
    "publicRegisterEnabled": ${PUBLIC_REGISTER_ENABLED},
    "feedbackEnabled": true,
    "privacyPolicyUrl": null,
    "termsOfServiceUrl": null,
    "maxUploadFileSize": null,
    "contribPlugins": [],
    "loginFormType": "ldap"  # ここを追加
}


EOL

-------------------------------

# cd ../
# docker-compose -f taiga.yml build
# dokcer-compose -f taiga.yml up -d

はい。簡単。
あ、Gmailをメールサーバとして使用する場合、Gmailの「セキュリティの低いアプリからのログイン許可」みたいな設定をしないとダメです。

で。ここから、hostname:8080にアクセスするわけですが、、、

ダメポイント

1.新規プロジェクトが作れない

本当に笑うしかなかった。何度やって500エラー。
ログをみないとわからない。ボタンが無反応なだけだから。

新規ユーザだと作れない、というissueが出ていたように見える。
でもクローズされてたみたいだけど。。。

2.2度目のログインでNG

これな。
一回ログアウトして、再度入り直そうとすると、
「あんたのメアド、すでに使われてまっせ」と言われる。
そりゃ、そうだ、新規ユーザじゃないんだから。

でも、新規ユーザ登録のフローに入ってしまうらしく、NG。
LDAPのユーザ情報にTaiga用ユーザ情報で必須なものが抜けているのかな。
いや、「もう登録されている」という判定になるんだから、問題ないはずか。

そんなこんなで諦めました。
GMAILのアカウントとパスワードを設定ファイルに書くのも、なんか怖いし。
誰かにSSHで不正ログインされたら、もう、アウトでしょ。

Kanboardに切り替えます。
こっちは実績ありなので。