nginx
AWS
TAIGA
Taiga.IO

TaigaをAWSに立ち上げる

TaigaをAWSに立ち上げるまでの流れを以下記述していく。

AWSインスタンスを借りる

  1. AWSのサインアップを済ませる
  2. t2.microインスタンス(以上)を契約する。その際、ディスクは最低16GB確保する。イメージはUbuntu 18.04を利用する
  3. セキュリティグループは22・80・443を開ける

ドメインを設定する(必要に応じて)

  1. 適当なネームサーバーと契約する
  2. ネームサーバーのAレコードとして先程契約したサーバのパブリックIPアドレスを指定して登録する

サーバの初期設定をする

  1. サーバにSSHログインする。その際、鍵はサーバを作ったときに使ったものを用いる。ユーザー名はubuntuである(AWS Linuxの場合はec2-userであるが、Ubuntuの場合ubuntuになることに注意せよ)
  2. sudo apt-get updateしたあと、sudo apt-get upgradeする。GRUBについて聞かれたらkeep the local version currently installedを選んでOKを選ぶ
  3. カーネルが更新されたのでsudo reboot nowして再起動する
  4. その後、いくつかのパッケージが未更新になっているので、sudo apt-get upgradeと入力して未更新のパッケージを確認。その後、それらのパッケージを明示的に指定してupgradeする。それが終わったらもう一度再起動する

必要なパッケージをインストールして初期設定をする

  1. 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に変更になっているため、それに合わせて変更)
  2. sudo adduser taigaする。パスワードを求められるが適当でよい(あとで適宜パスワードを変更する)
  3. sudo adduser taiga sudoして、taigaユーザでsudoできるようにする
  4. sudo su - taigaでtaigaユーザになる
  5. passwdでパスワードを設定する
  6. sudo -u postgres createuser taigaしてtaigaユーザに紐づくデータベースユーザを作成する。sudoするときのパスワードは5で設定したものである
  7. sudo -u postgres createdb taiga -O taiga --encoding='utf-8' --locale=en_US.utf8 --template=template0してtaigaデータベースを作成する
  8. sudo rabbitmqctl add_user taiga PASSWORD_FOR_EVENTSでRabbitMQ上にtaigaユーザを作成する
  9. sudo rabbitmqctl add_vhost taigaでtaiga vhostを作成する
  10. sudo rabbitmqctl set_permissions -p taiga taiga ".*" ".*" ".*"でパーミッションを設定する

Taigaのバックエンドをインストールする

以下の作業もtaigaユーザで行う

  1. ユーザのルートディレクトリにcdした後、git clone https://github.com/taigaio/taiga-back.git taiga-backしてtaiga-backをcloneする
  2. cd taiga-backしたあと、git checkout stableで安定版をチェックアウトする
  3. mkvirtualenv -p /usr/bin/python3 taigaでPython環境をセットアップする
  4. pip install -r requirements.txtで必要なパッケージをインストールする
  5. 必要な設定を読み込むため、以下の内容を実行する
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のフロントエンドの設定をする

  1. ユーザのルートディレクトリにcdした後、git clone https://github.com/taigaio/taiga-front-dist.git taiga-front-distしてtaiga-front-distをcloneする
  2. cd taiga-front-distした後、git checkout stableして安定版をチェックアウトする
  3. dist/conf.example.jsonをdist/conf.jsonにcpする
  4. dist/conf.jsonの設定内容は以下の通りとする
    1. api"https://mydomain.tld/api/v1/"にする
    2. eventsUrl"wss://mydomain.tld/events"にする
    3. publicRegisterEnabledは先程設定したPUBLIC_REGISTER_ENABLEDに揃える

TaigaのWebSocketサーバをセットアップする

  1. ユーザのルートディレクトリにcdした後、git clone https://github.com/taigaio/taiga-events.git taiga-eventsしてtaiga-eventsをcloneする
  2. cd taiga-eventsする(masterを使うため、checkoutを要しない)
  3. curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -した後、sudo apt-get install nodejsしてNode.jsをインストールする
  4. npm installして必要なパッケージをインストールする
  5. cp config.example.json config.jsonでconfigをコピーする
  6. 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

その後、以下の手順を行う

  1. sudo systemctl daemon-reloadでデーモンのリストを再読込する
  2. sudo systemctl start taiga_events.serviceで起動する
  3. 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

その後、以下の手順を行う

  1. sudo systemctl daemon-reloadでデーモンのリストを再読込する
  2. sudo systemctl start taiga.serviceで起動する
  3. sudo systemctl enable taiga.serviceで自動起動を有効にする

フロントの設定をする

  1. sudo rm /etc/nginx/sites-enabled/defaultでデフォルトのルート設定を削除する
  2. mkdir -p ~/logsでログディレクトリを作成する
  3. /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の設定をする

  1. sudo apt-get install certbotでLet's encryptのパッケージをインストールする
  2. sudo certbot certonly --webroot -w /home/taiga/taiga-front-dist/dist -d mydomain.tldで証明書を取得する。その際、色々聞かれるが指示通りに答える
  3. /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;
    }
}

現在の状況

  1. ひとまず動いているようだ
  2. 裏側の設定の詳細をすべて洗い出すのは難しい
  3. ユーザ登録はどうやらプロジェクトオーナーがまだ登録が存在しないメールアドレスに招待状を送ってそれをAcceptすることで作れる模様
  4. Githubとの連携は少し遅いようだ
  5. Bitbucketとの連携はIPアドレスのホワイトリストを最新にしないと動かない
  6. Slackとの連携は未検証
  7. CPUクレジットは増えているので、t2.microで十分安定運転が可能そう
  8. ディスクは3GB程度消費しているので、安定運転用にSwap確保するならディスクは念の為16GBあったほうが安心そう(安定運転想定しないなら8GBでも足りるかとは思う)
  9. デフォルトでは管理者のアカウント名はadmin、パスワードは123123、管理者メールアドレスはadmin@admin.comだが、アクセスしてログインしたら速やかに変更すること。メールアドレスを変更する際にメールが飛ぶので、それでメールの試験もできる。