【最速!?】 Docker化された Backlogエンタープライズ 2.0.0 をAWSにインストールしてみました!!!

こんにちは、笹川です。
かつて新人エンジニアとして、初めてのAWSで Backlogエンタープライズ のインストールに挑んでから早くも1年弱が経ち、感動の初期設定画面も忘れかけた今日この頃ですが、実は4月に Backlogエンタープライズ 2.0.0 がリリースされていました🎉✨

メジャーバージョンアップとなるv2.0.0はインストール方法も要求スペックも今までとはがらりと変わるものとなっていましたので、これは早速インストールしてみなくては!ということでやってみました。

一からの手順と気を付けるポイントを大公開しますので、インストールを考えている方はぜひご覧ください!

Backlogエンタープライズ 2.0.0

■ 目次

作業開始

初めにこちらからトライアルの申し込みを済ませ、ライセンスキーをゲットしておきましょう。

この記事では他に必要なものは全てAWS内で調達しています。

まずはシステム要件を確認

Backlogエンタープライズ 2.0.0 インストールガイド に沿って進めていきます。

システム要件は以下のようになっています。

  • メモリ:16GB
  • ハードディスク:30GB以上
  • CPU:2.4GHz, 4core
  • HTTPS接続必須
  • AWS CLI v2.x
  • Docker v20.10.0以上
  • MySQL5.7
  • SMTP認証無しで送信できるSMTPサーバー

◎ v1.11から変更となったポイントは、

  • 全体的な物理スペック要求の向上
  • AWS CLI と Docker を使用し、AWSリポジトリ上のBacklogイメージをプルしてDocker上で起動
    • v1.11はBacklog公式サイトからインストールファイルをダウンロードしていた

◎ 反対に変わらなかったものは、

  • MySQLのバージョン5.7
  • SMTPサーバー

という感じです。v1.11でMySQLを使用している環境からそのままアップデートできる想定なのでしょうか。

ただ、MySQL5.7のサポートは今秋(2023年10月)で終了するみたいですし、適合しない環境も出てきているようなので注意が必要です。実は私は最初にAmazon Linux 2023 OSを使用してインストールに臨みましたが、MySQL5.7が依存するOpenSSLのバージョンがAmazon Linux 2023だと新しいために適合せず、諦めた経緯があります。

さて、今回用意した環境がこちらです。

AWS構成図

今回もEC2にインストールしていきます。インスタンスは t2-xlarge 。前回は t2-medium で足りたスペック要求がだいぶ上がりました。お値段も4倍です・・・

前述の通り、MySQL5.7との兼ね合いでOSは Amazon Linux2 を使用しました。

その他の部分はインストールを進めながら紹介していきたいと思います。

EC2の構築

事前準備~SSL証明書がないとどうなる?

ここからはEC2にSSH接続して設定していきます。

作業を始める前から一つ不安要素がありました。

SSL証明書を用意
Backlogでは通信にHTTPSを使用します。あらかじめ、サーバーに配置する

  • SSL証明書
  • 秘密鍵ファイル

をご用意ください。

こちらです。SSL証明書をサーバー内に配置するように書いてあります。どうやらインストール中に証明書の格納されたディレクトリを指定し、証明書を読み込む過程がある模様。これって無いとエラーになるのかな?

使用しているドメインは、AWS Certificate Manager (ACM) でSSL認証を行っており、ACMでは証明書をエクスポートすることはできないのです。ただ、SSLの環境はできているので何とかできないものかしら。と考えていたら、先輩からアドバイスをいただきました。

「オレオレ証明書」

名前からは危険なにおいがしますが、正式には自己署名証明書というそうです。
調べて作成してみました。

自己署名証明書の作成

# key.pem 作成
openssl genrsa -out key.pem 2048

# csr.pem 作成(設定項目は全てEnter)
openssl req -new -key key.pem -out csr.pem

# crt.pem 作成(有効期限10年)
openssl req -x509 -key key.pem -in csr.pem -out crt.pem -days 3650

# /etc/ssl/ に格納
sudo mv key.pem crt.pem /etc/ssl/

インストールガイドではPEM形式crt.pem key.pem として配置していたので、その通りに作成し、分かりやすい場所に配置しました。

EC2 – ALB間(ターゲットグループの設定)は HTTPS:443 で接続するようにします。

タイムゾーンの設定

# タイムゾーンを確認(UTCになっている)
date

# Asia/Tokyo に変更
sudo timedatectl set-timezone Asia/Tokyo

Postfixの設定

v1.11と同様にデベロッパーガイドの通りに設定しました。

MySQL 5.7 のインストール

# リポジトリの追加
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y

# インストールするバージョンを5.7に切り替え
sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community

# インストールコマンド
sudo yum install mysql-community-server -y

# GPGキーでコケた場合は以下を実行
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

# 起動
sudo systemctl start mysqld.service

# 自動起動設定
sudo systemctl enable mysqld.service

# EC2再起動後にステータスを確認
systemctl status mysqld.service

> ● mysqld.service - MySQL Server
> Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
> Active: active (running) since Tue 2023-07-18 16:45:02 JST; 2min 7s ago
> Docs: man:mysqld(8)
> http://dev.mysql.com/doc/refman/en/using-systemd.html
> Process: 3320 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
> Process: 3291 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
> Main PID: 3353 (mysqld)
> Tasks: 27
> Memory: 210.2M
> CGroup: /system.slice/mysqld.service
> └─3353 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

再起動後も自動起動して active (running) となっています。

データベースの設定

/etc/my.cnf に設定を追加します。

[mysqld]
max_allowed_packet = 16M
character-set-server=utf8mb4
sql_mode = "NO_ENGINE_SUBSTITUTION"

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4
# rootログイン
mysql -uroot -p
 ◆ rootユーザーの初期パスワードの在り処
 /var/log/mysqld.log
  > [Note] A temporary password is generated for root@localhost: ************
←これです
rootログインしたらまずはパスワードを変更しておきましょう。
# パスワード変更
mysql> set password for root@localhost=password('新しいパスワード');
データベース backlog に対する全権ユーザー backlog を作成します。
パスワードはBacklogv1.11系の初期値と同じ Backlog@1 にしておきました。
# データベース作成
mysql> CREATE DATABASE backlog;

# ユーザー作成&権限付与
mysql> GRANT ALL PRIVILEGES ON backlog.* TO 'backlog'@'%' IDENTIFIED BY 'Backlog@1' WITH GRANT OPTION;
ポイントは、TO 'backlog'@'%' の部分です。
Backlogエンタープライズ2.0.0 はDocker上で起動するので、localhost以外からも接続できる設定にしています。とはいえ、セキュリティグループの設定でDBに直接アクセスはできなくなっています。

Docker のインストール

Amazon Linux2 に Docker をインストールするにはに沿ってDockerをインストールします。

# インストールされているパッケージとパッケージキャッシュを更新
sudo yum update -y

# インストールコマンド
sudo amazon-linux-extras install docker

# 起動
sudo service docker start

# 自動起動設定
sudo systemctl enable docker

# ec2-userに権限付与(sudoからの解放)
sudo usermod -a -G docker ec2-user

# EC2再起動後に権限の適用を確認
docker info

> Client:
>  Context:    default
>  Debug Mode: false
>  Plugins:
>   buildx: Docker Buildx (Docker Inc., 0.0.0+unknown)
> 
> Server:
>  Containers: 0
>   Running: 0
>   Paused: 0
>   Stopped: 0
>  Images: 19
>  Server Version: 20.10.23
>  ・・・

Dockerコマンドがsudo無しでも使えました。

Docker Compose のインストール

sudo curl -L https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
  _____
 < Howdy >
  -----
     \
      \
       \
                     ##    .
               ## ## ##    ==
            ## ## ## ##   ===
        /""""""""""""""""___/ ===
   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
        \______ o     __/
         \  \    __/
           \____\______/

Backlogエンタープライズ 2.0.0 のインストール

Backlogエンタープライズ 2.0.0 は AWS ECRリポジトリとして提供されており、AWS CLI を使用してDockerからECRにあるBacklogのリポジトリをクローンし、Docker内で起動して使用します。

Amazon Linux2 を使用しているのでAWS CLI は初めからインストールされていました。

AWS CLI の環境変数を設定

環境変数の値はエンタープライズ契約管理サイトから参照します。
export AWS_ACCESS_KEY_ID="XXXX"
export AWS_SECRET_ACCESS_KEY="XXXX"

Dockerログイン~環境設定

# Dockerにログイン
aws ecr get-login-password --region ap-northeast-1 | \
  docker login --username AWS --password-stdin 019623933850.dkr.ecr.ap-northeast-1.amazonaws.com

> WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
> Configure a credential helper to remove this warning. See
> https://docs.docker.com/engine/reference/commandline/login/#credentials-store
>
> Login Succeeded

# インストール先ディレクトリ
mkdir backlog-enterprise
cd backlog-enterprise

# 環境設定ツールを起動
docker run --rm -it -v $PWD:/work -v $PWD/data:/data -e LANG="ja_JP.UTF-8" \
  019623933850.dkr.ecr.ap-northeast-1.amazonaws.com/enterprise-bootstrap:2.0.0

> Unable to find image '019623933850.dkr.ecr.ap-northeast-1.amazonaws.com/enterprise-bootstrap:2.0.0' locally
> 2.0.0: Pulling from enterprise-bootstrap
> 128d54f2c9b1: Pull complete
> 69ef13639028: Pull complete
> 65df4cead7e6: Pull complete
> ac61b074abbf: Pull complete
> 77c5f15138d7: Pull complete
> f3a8110c2b6c: Pull complete
> Digest: sha256:892b158d4675d67c18d83050fb3689c1dba8f59793b6070b6126f1925488f0dc
> Status: Downloaded newer image for 019623933850.dkr.ecr.ap-northeast-1.amazonaws.com/enterprise-bootstrap:2.0.0
> Copy setting files.
> '/scripts/docker-compose.yml' -> '/work/docker-compose.yml'
> 
> Set up environment variables.
> Backlogエンタープライズの設定を行います。
> 
> 新規に設定を作成します。
> 
> データベースサーバーのホスト名を入力してください。
> [例] backlog-db.example.com, 192.168.0.11
> > 10.0.3.216 (EC2のプライベート IPv4 アドレス)
> 
> データベース接続のポート番号を入力してください。
> デフォルト値: 3306
> > 3306
> 
> Backlogエンタープライズのデータベース名を入力してください。
> デフォルト値: backlog
> > backlog
> 
> データベース接続ユーザーのユーザー名を入力してください。
> デフォルト値: backlog
> > backlog
> 
> データベース接続ユーザーのパスワードを入力してください。
> > Backlog@1 (ユーザー作成時に設定したパスワード)
> 
> メール送信に使うSMTPサーバーのホスト名を入力してください。環境変数も使えます。
> [例] backlog-smtp.example.com, 192.168.0.12
> > mail.xxxxxxxxxx.com (認証にはAmazon SESを使用)
> 
> タイムゾーン名を入力してください。
> [例] Asia/Tokyo, America/New_York, Europe/London
> > Asia/Tokyo
> Git SSH サーバーのための秘密鍵を生成します。
> Generating RSA private key, 2048 bit long modulus
> .....................................+++
> ................................................................................................................................................................+++
> e is 65537 (0x10001)
> 
> SSL証明書を格納しているディレクトリを入力してください。
> > /etc/ssl/ (オレオレ証明書を格納したところ)
> 
> 
> 
> Creating initial directories.
> install: creating directory '/data/git'
> install: creating directory '/data/solr'
> install: creating directory '/data/elasticsearch'
これで無事にインストールが完了しました。

Backlog の起動/停止

あとは起動するだけです!インストールディレクトリに docker-compose.yml が作成されているので、このディレクトリから起動・停止します。
# 起動
docker-compose up -d

# 停止
docker-compose down

初期設定

この先は今まで通りブラウザからの初期設定になります。

初期設定URL:https://<ドメイン名>/backlog/Setup.action

初期設定について

Backlog へようこそ!

この画面が出た瞬間はいつも嬉しいものです。

インストールや起動の過程でSSL証明書について怒られることも無かったので、あの「オレオレ証明書」も狙い通りに働いてくれたようですね。

初期設定の流れはこんな感じでした。v1.11とだいたい同じで管理者情報とライセンスキーを用意しておくだけでOKです。

スペース情報を入力
管理者ユーザ情報の入力

v1.11からの変更点を見つけました。
初期設定の段階で管理者パスワードを入力するようになったので、よくある事例の「メールサーバーの設定を後回しにしていて初期パスワードが書かれたメールを受信できずにログインできなくなって再インストール💦」のパターンからは解放されたのです。よかった。

設定完了

おしまい

無事に起動できました!
Docker化したことで、全体的にv1.11系よりインストールしやすくなったと思います。

少し触ってみた感じ、今までエンタープライズ版に無かったボードなどの機能も追加され、UIも含めてASP版とほとんど同じ使用感になっていました。

But you can' t do that...

この構成で一つだけ残念なのは、ALBを使用している関係でドメインネームでのSSH接続ができないことです。Gitを使う場合もHTTP接続することになります。

どうしてもSSHでGitしたい場合、IP直打ちするかALBではなくCLB(Classic Load Balancer)を使えば80/443以外のポートでも接続できるみたいですが、今回は素直にHTTPSを使ってもらう方向で良しとします。

最後まで読んでいただき、ありがとうございました。
この情報がどなたかのお役に立てば光栄です。

Backlog助っ人サービスは、Backlog導入支援のほか、プロジェクト移行やAPIを利用した他サービスとの連携、オリジナルダッシュボードの作成など、さまざまな課題を解決するサービスを提供しています。

Backlogの課題に対し、社内では解決が難しかったり作業工数が取れないなど、お困りごとがあれば下にある「お問い合わせ」からぜひ一度ご相談ください!

助っ人サービスへのお問い合わせはこちら kintone for 助っ人サービス おっと発見OTTO