というわけで今日はCloudGarage上にJIRAを構築した話の続きです。
CloudGarageではインスタンスが3台(以上)立ち上げられるので、以下のような構成を作ることにします。
  1. JIRA(とConfluence)用のDB(PostgreSQL)インスタンス
  2. JIRAアプリケーションを実行するインスタンス
  3. Confluenceアプリケーションを実行するインスタンス
  4. 各インスタンスはMackerelで監視
構築に使用した設定ファイル(のテンプレート)等はGitLabに置いてあります。



今回は実際にJIRAを稼働させるサーバーを作っていきます。

環境
JIRAのサポートしている環境のページには「インストーラーはCentOSでのみ検証してる」、という記述があるのでCentOSを採用することにします。
  • OS:CentOS 7.3 64bit
  • 接続許可ポート:SSH(22)、HTTP(80)、HTTPS(443)、Tomcat(8080)
  • SSH Key:適切に設定する
  • JIRA 7.5.0(ポート:8080)
  • Let's EncryptでSSL証明書を取得
  • nginxで80番と443番で待ち受け、80番はすべて443番にリダイレクト
8080番ポートを接続許可にしていますが、これはJIRAの初期設定をする際、DBの初期化手順でnginxのタイムアウトに引っかかって環境が壊れる可能性がある(実際壊れた)ためです。
そのため、初期設定は直接8080ポートで行って、終わったら接続許可から外すといいと思います。

Mackerelでの監視内容
今回はdockerコンテナを使わずに直接Mackerel(とplugin集)をインストールします。

作業ユーザーについて
CloudGarageはrootアカウントにSSH Keyが設定されるので、設定した鍵でsshするとrootログインになります。セキュリティとか考慮するなら作業ユーザーを作って、sudoers設定して、SSH Key設定して、rootでのsshを禁止して、みたいな作業をするといいと思います。
今回の記事では以下全部rootで操作している想定なので、作業ユーザーで作業する場合は適宜sudoを指定するようにしてください。

ドメインについて
SSLを設定するにはドメインが必要です。
インスタンスに割り当てられているグローバルIPに対してAレコードを設定しておいてください。
以降は以下のレコードを設定したものとして説明していきます。
jira.example.com

手順

まずはお決まりのシステム更新ですね。
# yum update -y


JIRAのインストール→初期設定
次に公式のサポートページを参考にしてJIRAをインストールしてセットアップしていきます。

事前にJIRAのダウンロードページで、Linux 64bit用インストーラーのダウンロードリンクを確認しておきます。
今回はJIRA 7.5.0のインストーラーをダウンロードします。ダウンロードできたら、実行権限を付けて実行します。
# wget https://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-software-7.5.0-x64.bin
# chmod +x ./atlassian-jira-software-7.5.0-x64.bin
# ./atlassian-jira-software-7.5.0-x64.bin
ウィザードの途中で色々と質問されますが、デフォルトの設定で大丈夫だったような気がします。インストールの設定を変えたい場合は適宜調整してください。
以下のようなメッセージが表示されたらインストール完了です。

JIRA Software 7.5.0 can be accessed at http://localhost:8080
Finishing installation ...

続いてJIRAの初期設定です。
手元のマシンからブラウザでhttp://jira.example.com:8080を開いて初期設定を行っていきます。
基本的には画面の指示に従って設定を行っていくだけです。設定項目についてはJIRAのセットアップガイドに大体の流れが書いてあります。
DBの設定については、前回の記事で別インスタンスにPostgreSQLをセットアップしているので、そちらに向けるようにします。
  • HostName:192.168.0.xxx (PostgreSQLをセットアップしたインスタンスのローカルIP)
  • UserName/Password/DB名:セットアップしたPostgreSQLの設定通り

NginxとSSLの設定
nginxはyumでサクっとインストールしてサービスとして起動します。
# yum install -y nginx
# systemctl enable nginx
# systemctl start nginx
http://jira.example.com にアクセスしてNginxのスタートページが出ていることを確認します。

続いてLet's Encryptで証明書を作成します。
Let's Encryptで証明書を取得してnginxに設定する手順はさくらのナレッジがわかりやすいので参考にしました。

では、Let's Encryptのコマンドラインツールをインストールして証明書の発行を行います。
# curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
# chmod +x /usr/bin/certbot-auto

# certbot-auto certonly \
    --webroot \
    -w /usr/share/nginx/html \
    -d jira.example.com \
    --email <Let's Encryptからのメールを受け取り可能なメールアドレス>
Let's Encryptの証明書は期限が短いので、証明書の自動更新を仕掛けておきます。
cronで、毎週日曜日の午前4時に証明書の更新を仕掛けます。証明書が更新されたらnginxを再起動して証明書を入れ替えます。
# cron -e

0 4 * * 0 certbot-auto renew --post-hook "systemctl restart nginx" 1 > /dev/null 2 > /dev/null

証明書が取得できたのでnginxに設定していきます。
以下のnginxの設定ファイル群テンプレートを編集してサーバーの /etc/nginx/conf.d ディレクトリにコピーします。
  1. nossl.conf.template:80番ポートへのアクセスを443番ポートにリダイレクトするための設定です。コピーする際にnossl.confにリネームします。
  2. ssl.conf.tempalte:443番ポート用の設定です。リバースプロキシとしてアクセスをJIRAに向ける設定が入っています。コピーする際にssl.confにリネームします。
  3. stub_status.conf:mackerel-plugin-nginx用の設定です。
これでhttp://jira.example.comへのアクセスはすべてhttps://jira.example.comにリダイレクトされるようになり、JIRAにつながるようになりました... と言いたいところですが、JIRAの方の設定も変えてやる必要があります。

JIRAのインストールディレクトリ(デフォルトは /opt/atlassian/jira)の conf/server.xmlを以下のように修正します。
  1. Service name="Catalina" の設定を探す
  2. port="8080"のConnectorの設定に以下の設定を追加する(コード例の末尾3行)
  • scheme="https"
  • proxyName="jira.example.com"
  • proxyPort="443"
<Service name="Catalina">
    <Connector port="8080"
                maxThreads="150" 
                minSpareThreads="25"
                connectionTimeout="20000"
                enableLookups="false"
                maxHttpHeaderSize="8192"
                protocol="HTTP/1.1"
                useBodyEncodingForURI="true"
                redirectPort="8443"
                acceptCount="100"
                disableUploadTimeout="true"
                bindOnInit="false"
                scheme="https"
                proxyName="jira.example.com"
                proxyPort="443"/>

...

ここまで設定ができたらJIRAとnginxを再起動します。
# systemctl restart jira
# systemctl restart nginx
JIRAを起動する時に/etc/init.d/jira start で起動している場合はsystemctlでrestartができないので、一度 /etc/init.d/jira stop で止めてから systemctl start jira で起動するといいかもしれない。

あとは、JIRAにアクセスして管理画面からベースURLを設定したらSSLなJIRAの完成です。
お疲れ様でした。




と言いたいところですが、もうちょっとだけ設定することがあります。
そう、長いものにMackerelです。

では、Mackerelとpluginをインストールしていきます。
# curl -fsSL https://mackerel.io/file/script/setup-yum-v2.sh | sh
# yum install -y mackerel-agent
# yum install -y mackerel-agent-plugins
mackerel-agent.confのテンプレートを編集して /etc/mackerel-agent/mackerel-agent.conf としてコピーしたら、mackerel-agentを再起動します。
# systemctl restart mackerel-agent
これでしばらくしたら各種メトリクスがMackerelで確認できるはずです。


今度こそお疲れ様でした。
次回はConfluenceを立てた記事を書こうと... 思いましたが、JIRAとほとんど手順が同じなので書きません。