2017年9月2日土曜日

カンバンツールtaigaをWindows上のVirtualboxにインストールして外部PCからアクセスする

Taigaはオープンソースのアジャイルかんばんツールです.


プロダクトバックロブの管理や,スプリント,かんばんなどの管理をサポートしてくれます. できてしまえば簡単なのですが,結構苦労したのでできたのでインストールメモを書いておきます.
(2019.04.22にdockerのインストール方法を一部更新しました)
目標(やりたいこと)
プライベートネットワークのWindows PCをtaigaのサーバーにして,プライベートネットワーク内の他の端末からアクセスしたい.

方法
Windows PCにVM環境であるVirtual boxをインストールし, その中にUbuntu Linuxをインストールし, その中にdocker環境を構築し,そこにtaigaをインストールする.
Virtual boxはブリッジ接続ではなく,NATで接続することでネットワーク環境への影響は最小限にしたい.

(Windows PCのIPアドレス 192.168.0.10とします.)

ここでは
VMの設定というとVirtualBoxのソフトウエアの設定
ゲストOSの設定をいうとUbunutのOSの設定
ホストOSの設定はWindowsのOSの設定を指します.

手順1 VM環境のインストール

Windows PCにVirtualBoxをインストールします.
Downloadはこちらからどうぞ.
(念のためVirtualBoxはOracleが開発しているVirtual Machineでオープンソースのフリーソフトです.)
ここでインストールするWindows OSをホストOS, VirtualBox内にインストールするOSをゲストOSと呼びます.

手順2 ゲストOSのインストール

今回はゲストOSにはUbuntuを使います.
UbuntuはこちらからUbuntu16.4.3 LTSをダウンロードしてください.
(前のバージョンだとCore dumpしてうまくdockerがインストールできない場合がありました)
インストールはVirtualBox内のメニューから行います.
その際にゲストOSの種類はUbuntu 64bitを選び,メモリは1.4GB程度, HDDは可変で30GB程度割り当てておきます.(ここら辺はお好みで)

手順3 VirtualBoxのネットワーク設定

次にVirtualBox内のメニューからネットワークの設定を行います.この設定はUbuntu内から外部,外部からUbuntu内への通信をどのように行うかを指定するものです.
今回はネットワークの種類としてNATを選びます.
NATはホストOS(ここではWindowsのこと)に割り当てられたIPアドレスを使って外部にアクセスを行います.ゲストOS(ここではUbuntuのこと)から外部のWebサーバをみることができます.一方で外部からはWindowsしか見えません.そこでポートフォワードをおこない,Windowsの特定のポートにアクセスしたばあい,ゲストOSの特定のポートに転送する設定を行う方法をとります.
(別にホストOSとIPアドレスを共通化しなくても良い場合は素直にブリッジ接続を選べば良いと思いますが,制約がある場合NATの方がよいでしょう)
ここではWindowsの8080ポートを受け付けるようにし,受け付けたデータをUbuntuの80番ポートにフォワードするように設定します.フォワードの設定は変更後すぐ適用されるようなので,VMの再起動などはありません.よってあとで適用しても構いません.
この8080ポートは後でtaigaの設定に使います
(始め80を80にフォワードするようにしたのですが,どうしてもパケットがVMに通じませんでした.)

手順4 Ubuntuへのdockerのインストール

次にゲストOS(ここではUbuntu)にdockerをインストールします.
最近docker は無償のCEと有償のEEに別れたようなのでここでCEをインストールします.
インストール方法は公式ページのこちらにあります.
ここでは必要な部分を使ってUbuntuのターミナルを開いて以下のコマンドを実行します
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
エラーが出なければこれでdockerがうまくインストールできたと思います.

手順5 taigaのインストール

次にゲストOSにdockerを使ってtaigaをインストールします.
taigaのdocker環境を用意してくださっている方がいるのでこちらを使用します.
https://hub.docker.com/r/accon/taiga/
を参考にします.
データファイルを保存する場所を作成するために, ゲストOSの適当な場所にデータディレクトリを以下のように作成します.[2019.04.22追記]
cd ~/
mkdir taiga-data
cd taiga-data
mkdir workspace
mkdir www
docker run -d -v ~/taiga-data/workspace:/develop/workspace:rw -v ~/taiga-data/www:/develop/www:rw  -p 80:80 -p 443:443 -p 5432:5432 -p 15672:15672 -t -i -h taiga --name taiga accon/taiga
と入力すればdockerによるインストールは完了です.

次にUbuntu内のブラウザから
http://localhost/install.html
にアクセスしてください.しばらくするとスクリプトによるインストールが完了して
「PROGRESS_[INSTALLATION_COMPLETE]」
と表示されていればOKです.
http://localhost/
にアクセスしてログイン画面が表示されるのでID admin Password 123123と
入力してログインしてください.
試しにいくつかプロジェクトを作って,データベースに書き込みができているかも確認しておきましょう.
無事操作ができればインストールは完了です.
(このインストール方法ではUbuntuへのポート80へのアクセスをdocker環境のポート80へ接続しています)

手順6 taigaの設定変更

ここからが本番です. このままだとネットワーク上の他のパソコンからtaigaを呼び出すことができないので, taigaの設定を変更します.
[2019.04.22 更新 dockerコンテナ内にログインする方法からdockerコンテナと接続したローカルファイルを編集する方法へ変更)
一つ目は~/taiga-data/www/conf.json です. ファイル内にあるlocalhostをWindowsのIPアドレス:8080に置き換えます. ここでWindowsのIPアドレスは192.168.0.10なので 設定ファイルを
root@taiga:/develop/www# more conf.json 
{
    "api": "http://192.168.0.10:8080/api/v1/",
    "eventsUrl": "ws://192.168.0.10:8080/events",
    "eventsMaxMissedHeartbeats": 5,
    "eventsHeartbeatIntervalTime": 60000,
    "eventsReconnectTryInterval": 10000,
    "debug": true,
    "debugInfo": false,
    "defaultLanguage": "en",
    "themes": ["taiga"],
    "defaultTheme": "taiga",
    "publicRegisterEnabled": true,
    "feedbackEnabled": true,
    "privacyPolicyUrl": null,
    "termsOfServiceUrl": null,
    "maxUploadFileSize": null,
    "contribPlugins": [],
    "tribeHost": null,
    "importers": [],
    "gravatar": true
}
と書き換えます. 次に ~taiga-data/workspace/taiga-back/settings/local.py の前半部分のアドレスを次のように書き換えます.
from .common import *
from .celery import *

MEDIA_URL = "http://192.168.0.10:8080/media/"
STATIC_URL = "http://192.168.0.10:8080/static/"
ADMIN_MEDIA_PREFIX = "http://192.168.0.10:8080/static/admin/"
SITES["front"]["scheme"] = "http"
SITES["front"]["domain"] = "192.168.0.10:8080"

SECRET_KEY = "mysecret"

DEBUG = False
TEMPLATE_DEBUG = False
PUBLIC_REGISTER_ENABLED = True

DEFAULT_FROM_EMAIL = "no-reply@example.com"
SERVER_EMAIL = DEFAULT_FROM_EMAIL

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_USE_TLS = False
EMAIL_HOST = "127.0.0.1"
EMAIL_PORT = 25

BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_ENABLED = True

EVENTS_PUSH_BACKEND = "taiga.events.backends.rabbitmq.EventsPushBackend"
EVENTS_PUSH_BACKEND_OPTIONS = {"url": "amqp://taiga:PASSWORD@localhost:5672/taig
a"}

これで設定は完了です.
docker restart taiga
としてtaigaを再起動します.
 次にUbuntuの中のブラウザからhttp://192.168.0.10:8080/にアクセスしてみます.
うまくアクセスできれば次に Windowsのブラウザからhttp://192.168.0.10:8080/にアクセスします.
これでアクセスできていれば,プライベートネットワーク内の別のPCからhttp://192.168.0.10:8080/にアクセスします.
これでアクセスできれば完了です.

なおWindowsのFirewallを設定している場合はポート登録を行い8080ポートを受け付けるように設定します.

運用関連

ログイン画面が現れない

再起動後すぐにアクセスするとlogin画面が表示されないことがありますが,データベースの起動のライムラグによるもののようです.
しばらく待つとアクセスできるので ちょっと待ちましょう.

内容は随時更新していきます.

4 件のコメント:

匿名 さんのコメント...

参考にさせて頂きました。
私の場合はVPSのCentOS Dockerにインストール時、同様の現象となったのでこちらの記事の対応を行ったところ解決しました。

もしご存知でしたら教えて頂きたいのですが、
taigaコンテナを再起動するたびにadminのパスワードや設定等が毎回初期設定に戻ってしまい、困っております。
install.html を確認したところ、taigaコンテナを再起動するたびに初期化処理が実行されているようです。

Teru さんのコメント...

こんばんは
コメントありがとうございます.

コンテナの再起動はどのように実施されておられますでしょうか.
docker stop
docker restart
の処理で初期化処理が実施されていますでしょうか.


p.s. もうちょっと良い運用方法がわかったのでそちらの紹介も書くようにしたいなと思います.

匿名 さんのコメント...

ご返信ありがとうございます。

コンテナの再起動は下記2パターンを試しましたが、どちらも起動時に初期化処理が走ってしまうようです。
起動後install.html に「PROGRESS_~」が増えていくのを確認しました。
1. docker stop taiga ⇒ docker start taiga
2. docker restart taiga

>もうちょっと良い運用方法がわかったのでそちらの紹介も書くようにしたいなと思います.
楽しみにしております。よろしくお願いします。

Teru さんのコメント...

ひびほげのpiyoです.

書き込みありがとうございました.
かなり空いてしまいましたが,少しだけ手順を更新したので,上記-vオプションを使った永続化する方法を使った場合ではいかがでしょうか.
データの可搬生もこちらの方が高いと思います.