はじめに
本稿では Docker イメージを使用して Codebeamer の環境を構築する手順を説明します。前提として、
- Codebeamer 2.1 の Docker イメージを利用
- OS は Ubuntu 22.04 LTS
- DB は Postgresql 15 をホストに導入
- Apache を前段に立て、SSL 処理は Apache 側で実施
- Apache から Codebeamer(Tomcat)に proxy_http でリクエストをパス
という構築方法になります。
なお、筆者は PTC Japan に在籍していますが、本記事はあくまで個人として作成したものであり、PTC Japan は本記事に関して一切の責任を持たず、またお問合せにも対応しませんので予めご了承ください。
OS 環境のアップデート
最新パッチの適用
作業の最初に、Ubuntu を最新の状態にします。
sudo apt-get update
sudo apt-get upgrade
##タイムゾーンの設定
サーバーのシステムクロックを日本時間へ、ハードゥエアクロックを UTC へ変更します。
sudo timedatectl set-timezone Asia/Tokyo
sudo timedatectl set-local-rtc 0
変更が有効になったか確認します。
timedatectl
Local time: Thu 2024-01-04 10:34:51 JST
Universal time: Thu 2024-01-04 01:34:51 UTC
RTC time: Thu 2024-01-04 01:34:51
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
codebeamer ユーザーの作成
sudo useradd -m -g www-data codebeamer
passwd codebeamer
Apache 環境の構築
Apache の導入
apache2 を導入します。
sudo apt -y install apache2
SSL 化のための準備(サーバー証明書の取得と設定)
443/TCP を HTTPS で受けるために、最初にサーバー証明書を準備します。
sudo apt -y install certbot
certbot が導入できたら、サーバー証明書を取得します。この手順は、apache が起動して 80/TCP をリッスンしていることを確認した上で、/var/www/html
に書き込み権限を持っているユーザー id で実施する必要があります。80/TCP が閉じていたり、/var/www/html
への書き込み権限がない場合には、コマンドの実行が失敗するので注意が必要です。また、下記でmy.server
となっている部分は、実際のサーバーの FQDN を指定します。
sudo certbot certonly --webroot -w /var/www/html -d my.server
証明書が下記に保存されますので、この場所を記録しておきます。この証明書は、後工程で Apache の設定で必要になります。
/etc/letsencrypt/live/my.server/cert.pem
/etc/letsencrypt/live/my.server/privkey.pem
/etc/letsencrypt/live/my.server/chain.pem
Let's Encrypt の証明書は3ヶ月しか有効期限がないため、定期的に再発行が必要です。root ユーザーの crontab に再発行用のコマンドを登録します。
sudo crontab
crontab には下記の設定をします。
0 0 1 * * /usr/bin/certbot renew > /dev/null 2>&1
Apache の設定
apache の設定を変更して、443/TCP を HTTPS で受け入れるようにします。
sudo vi /etc/apache2/sites-available/default-ssl.conf
変更点・追記点を下記に示します。SSLCertificateFile, SSLCertificateKeyFile, SSLCertificateChainFile は前の手順で取得したサーバー証明書のパスをセットします。
ServerName my.server
SSLCertificateFile /etc/letsencrypt/live/my.server/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my.server/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/my.server/chain.pem
default-ssl.conf ファイル末尾近くにに次の二行を追加します。</VirtualHost> の直前が適切な場所です。
ProxyRequests Off
ProxyPass / http://localhost:8080/ keepalive=on
default-ssl.conf の修正を確定して、閉じます。
SSL とリバースプロキシーを有効にします。リバースプロキシーは、443/TCP (HTTPS)を apache で受け、tomcat にリクエストを転送するために必要になります。
sudo a2ensite default-ssl
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_http
上記手順で、proxy や proxy_http モジュールが有効化できない場合には、apt によってこれらのモジュールがインストールされたかどうかを確認してください。ubuntu の場合は apache2 と同時にインストールされているはずです。
最後に、apache を再起動します。
sudo systemctl restart apache2
PostgreSQL 環境の構築
Codebeamer 2.1 のサポートする Postgresql のバージョンは 15 ですが、Ubuntu 22.04 LTS の deb リポジトリには Postgresql-14 までしかありません。このため、手動で Postgresql-15 のリポジトリを追加して導入します。
鍵の追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fSsL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/keyrings/postgresql.gpg > /dev/null
リポジトリの追加
echo deb [arch=amd64,arm64,ppc64el signed-by=/etc/apt/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main | sudo tee /etc/apt/sources.list.d/postgresql.list
PostgreSQL の導入
postgresql を導入します。
sudo apt update
sudo apt install postgresql-15 postgresql-contrib
"postgres" ユーザーのパスワードを変更します。こちらは OS のパスワードになります。
sudo passwd postgres
データベースの管理権限のパスワードを変更します。
sudo -u postgres psql
ALTER ROLE postgres WITH password '<パスワード>'
上記で <パスワード> の部分には実際のパスワードにする文字列を入力します。
PostgreSQL の環境設定
/etc/postgresql/15/main/postgresql.conf
を編集モードで開きます。
まず、localhost 以外からの接続を受け入れるようにします。
listen_addresses = '*'
さらに、codebeamer のデータベースとして必要となる下記の項目を postgresql.conf ファイルの最後部に追記します。
effective_io_concurrency = 200
jit = on
max_locks_per_transaction = 5000
random_page_cost = 1.1
temp_buffers = 64MB
work_mem = 80000
default_statistics_target = 1000
checkpoint_timeout = 2700
つづいて、/etc/postgresql/15/main/pg_hba.conf ファイルを修正します。
sudo vi /etc/postgresql/15/main/pg_hba.conf
下記の項目を追加します。
# for Codebeamer
host codebeamer cbroot 0.0.0.0/0 md5
postgresql を再起動します。
sudo systemctl restart postgresql
Codebeamer 用データベース作成
Postgresql 環境にログインします。
sudo -u postgres psql
Codebeamer 用データベースを作成します。下記の <パスワード> には、実際のパスワードをテキストで入力します。
CREATE DATABASE codebeamer LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' ENCODING 'UTF8' TEMPLATE = template0;
CREATE USER cbroot WITH PASSWORD '<パスワード>';
ALTER DATABASE codebeamer OWNER TO cbroot;
エクステンションを作成します。
\c codebeamer
CREATE EXTENSION pg_trgm;
postgresql の準備は以上で終了です。
Docker の準備
Docker のインストール
Docker GPG Key の登録
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
リポジトリの登録
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
リポジトリのアップデート
sudo apt update
docker グループの作成とユーザー登録
sudo groupadd docker
sudo usermod -aG docker codebeamer
docker のインストール
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose docker-compose-plugin
docker インストール後は OS の再起動が必要です。
sudo shutdown -r now
Codebeamer のインストール
docker-compose ファイルの作成
Codebeamer のフォルダを作成します。ルート以外のユーザーで、適当な場所で下記コマンドを実行します。
mkdir -p Docker/codebeamer
上記で作成したフォルダ(Docker/codebeamer)へ移動し、docker-compose.yml を作成します。docker-compose.yml ファイルには下記を記述します。
version: '2.1'
services:
codebeamer-app:
image: intland/codebeamer:2.1.0.0
container_name: codebeamer
ports:
- 8080:8080
extra_hosts:
- host.docker.internal:host-gateway
environment:
- DEBUG=false
- TZ=Asia/Tokyo
- WAIT_HOSTS=host.docker.internal:5432
- WAIT_HOSTS_TIMEOUT=120
- "CB_database_JDBC_Username=cbroot"
- "CB_database_JDBC_Password=<password>"
- "CB_database_JDBC_Driver=org.postgresql.Driver"
- "CB_database_JDBC_ConnectionURL=jdbc:postgresql://host.docker.internal:5432/codebeamer"
- "HEAPSIZE_OVERRIDE=-Xss1m -Xms2000M -Xmx8000M"
volumes:
- codebeamer-logo:/home/appuser/codebeamer/repository/config/logo
- codebeamer-repository-docs:/home/appuser/codebeamer/repository/docs
- codebeamer-repository-search:/home/appuser/codebeamer/repository/search
- codebeamer-logs:/home/appuser/codebeamer/logs
- codebeamer-tmp:/home/appuser/codebeamer/tomcat/tmp
restart: always
volumes:
codebeamer-logo:
codebeamer-repository-docs:
codebeamer-repository-search:
codebeamer-logs:
codebeamer-tmp:
Codebeamer の起動
上記で作成した docker-compose.yml ファイルを使用して Codebeamer の Docker イメージをスタートします。下記コマンドは docker-compose.yml ファイルがあるディレクトリで実施してください。
docker compose up -d
Docker イメージが起動したかどうかは、下記コマンドで確認できます。
docker ps
次のように表示されたら、起動は完了しています。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bbb0c93cd5d intland/codebeamer:2.1.0.0 "/home/appuser/entry…" 3 seconds ago Up 2 seconds (health: starting) 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp codebeamer