TaigaをAWSに立ち上げるまでの流れを以下記述していく。
AWSインスタンスを借りる
- AWSのサインアップを済ませる
- t2.microインスタンス(以上)を契約する。その際、ディスクは最低16GB確保する。イメージはUbuntu 18.04を利用する
- セキュリティグループは22・80・443を開ける
ドメインを設定する(必要に応じて)
- 適当なネームサーバーと契約する
- ネームサーバーのAレコードとして先程契約したサーバのパブリックIPアドレスを指定して登録する
サーバの初期設定をする
- サーバにSSHログインする。その際、鍵はサーバを作ったときに使ったものを用いる。ユーザー名はubuntuである(AWS Linuxの場合はec2-userであるが、Ubuntuの場合ubuntuになることに注意せよ)
-
sudo apt-get update
したあと、sudo apt-get upgrade
する。GRUBについて聞かれたらkeep the local version currently installed
を選んでOKを選ぶ - カーネルが更新されたので
sudo reboot now
して再起動する - その後、いくつかのパッケージが未更新になっているので、
sudo apt-get upgrade
と入力して未更新のパッケージを確認。その後、それらのパッケージを明示的に指定してupgradeする。それが終わったらもう一度再起動する
必要なパッケージをインストールして初期設定をする
-
https://taigaio.github.io/taiga-doc/dist/setup-production.html にも書いてあるが、
sudo apt-get install build-essential binutils-doc autoconf flex bison libjpeg-dev libfreetype6-dev zlib1g-dev libzmq3-dev libgdbm-dev libncurses5-dev automake libtool libffi-dev curl git tmux gettext nginx rabbitmq-server redis-server postgresql-10 postgresql-contrib postgresql-doc-10 postgresql-server-dev-10 python3 python3-pip python-dev python3-dev python-pip virtualenvwrapper libxml2-dev libxslt-dev libssl-dev libffi-dev
で必要なパッケージをインストールする(Ubuntu 18.04ではPostgreSQLは10に変更になっているため、それに合わせて変更) -
sudo adduser taiga
する。パスワードを求められるが適当でよい(あとで適宜パスワードを変更する) -
sudo adduser taiga sudo
して、taigaユーザでsudoできるようにする -
sudo su - taiga
でtaigaユーザになる -
passwd
でパスワードを設定する -
sudo -u postgres createuser taiga
してtaigaユーザに紐づくデータベースユーザを作成する。sudoするときのパスワードは5で設定したものである -
sudo -u postgres createdb taiga -O taiga --encoding='utf-8' --locale=en_US.utf8 --template=template0
してtaigaデータベースを作成する -
sudo rabbitmqctl add_user taiga PASSWORD_FOR_EVENTS
でRabbitMQ上にtaigaユーザを作成する -
sudo rabbitmqctl add_vhost taiga
でtaiga vhostを作成する -
sudo rabbitmqctl set_permissions -p taiga taiga ".*" ".*" ".*"
でパーミッションを設定する
Taigaのバックエンドをインストールする
以下の作業もtaigaユーザで行う
- ユーザのルートディレクトリにcdした後、
git clone https://github.com/taigaio/taiga-back.git taiga-back
してtaiga-backをcloneする -
cd taiga-back
したあと、git checkout stable
で安定版をチェックアウトする -
mkvirtualenv -p /usr/bin/python3 taiga
でPython環境をセットアップする -
pip install -r requirements.txt
で必要なパッケージをインストールする - 必要な設定を読み込むため、以下の内容を実行する
python manage.py migrate --noinput
python manage.py loaddata initial_user
python manage.py loaddata initial_project_templates
python manage.py compilemessages
python manage.py collectstatic --noinput
Taigaのバックエンドの設定をする
taiga-back/settings/local.pyの内容を以下の通りとする
from .common import *
MEDIA_URL = "https://mydomain.tld/media/"
STATIC_URL = "https://mydomain.tld/static/"
SITES["front"]["scheme"] = "https"
SITES["front"]["domain"] = "mydomain.tld"
SECRET_KEY = "theveryultratopsecretkey"
DEBUG = False
# ここは公開登録させないならFalseを指定する
PUBLIC_REGISTER_ENABLED = True
DEFAULT_FROM_EMAIL = "sender@sender.domain"
SERVER_EMAIL = DEFAULT_FROM_EMAIL
EVENTS_PUSH_BACKEND = "taiga.events.backends.rabbitmq.EventsPushBackend"
EVENTS_PUSH_BACKEND_OPTIONS = {
"url": "amqp://taiga:PASSWORD_FOR_EVENTS@localhost:5672/taiga"
}
# Uncomment and populate with proper connection parameters
# for enable email sending. EMAIL_HOST_USER should end by @domain.tld
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_USE_TLS = True
EMAIL_HOST = "mailserver.sender.domain"
EMAIL_HOST_USER = "sender_user"
EMAIL_HOST_PASSWORD = "sender_password"
# 認証がいらないメールサーバなら25になる
EMAIL_PORT = 587
# Uncomment and populate with proper connection parameters
# for enable github login/singin.
# 事前にGithubでAPIキーとシークレットを取得すること
# https://github.com/settings/applications/new から取得できる
GITHUB_API_CLIENT_ID = "yourgithubclientid"
GITHUB_API_CLIENT_SECRET = "yourgithubclientsecret"
ここまで終わったらdeactivate
でVirtualenvから抜ける
Taigaのフロントエンドの設定をする
- ユーザのルートディレクトリにcdした後、
git clone https://github.com/taigaio/taiga-front-dist.git taiga-front-dist
してtaiga-front-distをcloneする -
cd taiga-front-dist
した後、git checkout stable
して安定版をチェックアウトする - dist/conf.example.jsonをdist/conf.jsonにcpする
- dist/conf.jsonの設定内容は以下の通りとする
-
api
は"https://mydomain.tld/api/v1/"
にする -
eventsUrl
は"wss://mydomain.tld/events"
にする -
publicRegisterEnabled
は先程設定したPUBLIC_REGISTER_ENABLED
に揃える
-
TaigaのWebSocketサーバをセットアップする
- ユーザのルートディレクトリにcdした後、
git clone https://github.com/taigaio/taiga-events.git taiga-events
してtaiga-eventsをcloneする -
cd taiga-events
する(masterを使うため、checkoutを要しない) -
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
した後、sudo apt-get install nodejs
してNode.jsをインストールする -
npm install
して必要なパッケージをインストールする -
cp config.example.json config.json
でconfigをコピーする - config.jsonを編集し、
url
を"amqp://taiga:PASSWORD_FOR_EVENTS@localhost:5672/taiga"
に、secret
を"theveryultratopsecretkey"
に変更して保存する
TaigaのWebSocketサーバの自動起動設定をする
/etc/systemd/system/taiga_events.serviceを以下の内容にする
[Unit]
Description=taiga_events
After=network.target
[Service]
User=taiga
WorkingDirectory=/home/taiga/taiga-events
ExecStart=/bin/bash -c "node_modules/coffeescript/bin/coffee index.coffee"
Restart=always
RestartSec=3
[Install]
WantedBy=default.target
その後、以下の手順を行う
-
sudo systemctl daemon-reload
でデーモンのリストを再読込する -
sudo systemctl start taiga_events.service
で起動する -
sudo systemctl enable taiga_events.service
で自動起動を有効にする
Taigaのバックエンドの自動起動を設定する
/etc/systemd/system/taiga.serviceを以下の内容にする
[Unit]
Description=taiga_back
After=network.target
[Service]
User=taiga
Environment=PYTHONUNBUFFERED=true
WorkingDirectory=/home/taiga/taiga-back
ExecStart=/home/taiga/.virtualenvs/taiga/bin/gunicorn --workers 4 --timeout 60 -b 127.0.0.1:8001 taiga.wsgi
Restart=always
RestartSec=3
[Install]
WantedBy=default.target
その後、以下の手順を行う
-
sudo systemctl daemon-reload
でデーモンのリストを再読込する -
sudo systemctl start taiga.service
で起動する -
sudo systemctl enable taiga.service
で自動起動を有効にする
フロントの設定をする
-
sudo rm /etc/nginx/sites-enabled/default
でデフォルトのルート設定を削除する -
mkdir -p ~/logs
でログディレクトリを作成する - /etc/nginx/conf.d/taiga.confを以下の内容にした後、
sudo nginx -t
で設定チェックを行い、sudo systemctl restart nginx.service
で再起動する
server {
listen 80 default_server;
server_name _;
large_client_header_buffers 4 32k;
client_max_body_size 50M;
charset utf-8;
access_log /home/taiga/logs/nginx.access.log;
error_log /home/taiga/logs/nginx.error.log;
# Frontend
location / {
root /home/taiga/taiga-front-dist/dist/;
try_files $uri $uri/ /index.html;
}
# Backend
location /api {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8001/api;
proxy_redirect off;
}
# Django admin access (/admin/)
location /admin {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8001$request_uri;
proxy_redirect off;
}
# Static files
location /static {
alias /home/taiga/taiga-back/static;
}
# Media files
location /media {
alias /home/taiga/taiga-back/media;
}
# Taiga-events
location /events {
proxy_pass http://127.0.0.1:8888/events;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
}
}
Let's Encryptの設定をする
-
sudo apt-get install certbot
でLet's encryptのパッケージをインストールする -
sudo certbot certonly --webroot -w /home/taiga/taiga-front-dist/dist -d mydomain.tld
で証明書を取得する。その際、色々聞かれるが指示通りに答える - /etc/nginx/conf.d/taiga.confを以下の内容に書き換え、
sudo nginx -t
で設定チェックを行い、sudo systemctl restart nginx.conf
でNginxを再起動する
server {
listen 80 default_server;
server_name _;
return 301 https://$server_name$request_uri;
}
server {
listen 443 default_server;
server_name mydomain.tld;
ssl on;
ssl_certificate /etc/letsencrypt/live/mydomain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.tld/privkey.pem;
large_client_header_buffers 4 32k;
client_max_body_size 50M;
charset utf-8;
access_log /home/taiga/logs/nginx.access.log;
error_log /home/taiga/logs/nginx.error.log;
# Frontend
location / {
root /home/taiga/taiga-front-dist/dist/;
try_files $uri $uri/ /index.html;
}
# Backend
location /api {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8001/api;
proxy_redirect off;
}
# Django admin access (/admin/)
location /admin {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8001$request_uri;
proxy_redirect off;
}
# Static files
location /static {
alias /home/taiga/taiga-back/static;
}
# Media files
location /media {
alias /home/taiga/taiga-back/media;
}
# Taiga-events
location /events {
proxy_pass http://127.0.0.1:8888/events;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
}
}
現在の状況
- ひとまず動いているようだ
- 裏側の設定の詳細をすべて洗い出すのは難しい
- ユーザ登録はどうやらプロジェクトオーナーがまだ登録が存在しないメールアドレスに招待状を送ってそれをAcceptすることで作れる模様
- Githubとの連携は少し遅いようだ
- Bitbucketとの連携はIPアドレスのホワイトリストを最新にしないと動かない
- Slackとの連携は未検証
- CPUクレジットは増えているので、t2.microで十分安定運転が可能そう
- ディスクは3GB程度消費しているので、安定運転用にSwap確保するならディスクは念の為16GBあったほうが安心そう(安定運転想定しないなら8GBでも足りるかとは思う)
- デフォルトでは管理者のアカウント名は
admin
、パスワードは123123
、管理者メールアドレスはadmin@admin.com
だが、アクセスしてログインしたら速やかに変更すること。メールアドレスを変更する際にメールが飛ぶので、それでメールの試験もできる。