【Ubuntu 22.04 LTS】GitBucket + Tomcat9 + Apache + PostgreSQL 構築&運用手順(トラブル対処追記あり)

PC関連

Linux(Ubuntu 22.04 LTS)上に、GitBucket を Tomcat9、Apache(リバースプロキシ)、PostgreSQL と連携させて構築した手順のまとめです。

単体で動かすだけでなく、ウェブサーバー連携やデータベース連携を行った本格的なソース管理サーバーの構成となります。

サーバー構成概要

  • OS: Ubuntu Desktop 22.04 LTS
  • Webサーバー: Apache2 (AJP / HTTP プロキシ)
  • APサーバー: Tomcat9 (Java 11)
  • DB: PostgreSQL
  • アプリケーション: GitBucket

1. OSおよび基本ネットワークの設定

固定IPアドレスの設定

サーバー用途として運用するため、固定IPアドレスを割り当てます。

  • ホスト名: your-gitserver(任意のホスト名)
  • 固定IP:192.168.x.xxx

2. 必要なパッケージのインストール

管理者権限で作業を行います。

sudo su -
apt update && apt upgrade -y

SSHの導入

外部端末(TeraTerm等)から操作できるようにSSHサーバーを導入します。

apt install openssh-server -y

SambaおよびWSDDの導入(共有フォルダ・NetBIOS代替)

ファイル共有用にSambaおよびWindowsからの探索用パッケージ(wsdd)をインストールします。

apt install samba wsdd -y

# ユーザーの追加(例: your_user)
pdbedit -a your_user

# 共有フォルダの作成
mkdir /var/samba
chmod 777 /var/samba

/etc/samba/smb.conf の末尾に共有設定を追記します。

[homes]
comment = Home Directories
browseable = no
read only = no
create mask = 0700
directory mask = 0700
valid users = %S

[public]
comment = public anonymous access
path = /var/samba/
browsable = yes
create mask = 0660
directory mask = 0771
writable = yes
guest ok = yes

サービスの再起動:

systemctl restart smbd.service nmbd.service

3. GitBucket サーバーの構築

① Java JRE のインストール

GitBucketの動作に必要なJava環境をインストールします。

apt install default-jre -y

② Tomcat9 のインストールと各種設定

APサーバーとしてTomcat9を導入します。

apt install tomcat9 tomcat9-admin -y
systemctl stop tomcat9.service

1. /etc/default/tomcat9 の編集

Java環境変数とGitBucketのホームディレクトリを設定します。

#JAVA_HOME=/usr/lib/jvm/java-8-openjdk
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

# GitBucketホームディレクトリ指定
GITBUCKET_HOME=/var/gitbucket

2. /var/lib/tomcat9/conf/server.xml の編集

Apacheとの連携に必要な AJP 1.3 コネクタのコメントアウトを解除・修正します。

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector address="::1" port="8009" protocol="AJP/1.3" redirectPort="8443" secretRequired="false"/>

3. /var/lib/tomcat9/conf/tomcat-users.xml の編集

Tomcat Webアプリケーションマネージャ接続用の管理ユーザーを設定します。末尾の </tomcat-users> の直前に追記します。

<role rolename="tomcat"/>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="your_secure_password" roles="tomcat,manager-gui,admin-gui"/>

4. /lib/systemd/system/tomcat9.service の設定確認

Tomcatサービスが /var/gitbucket へアクセスできるように読み書きパスを設定します。

[Service]
# Configuration
Environment="CATALINA_HOME=/usr/share/tomcat9"
EnvironmentFile=/etc/default/tomcat9

# Security
User=tomcat
Group=tomcat
ReadWritePaths=/var/gitbucket

5. /usr/share/tomcat9-admin/manager/WEB-INF/web.xml の編集

Tomcatマネージャ経由で大きなWARファイル(GitBucket)を配備できるよう、アップロード上限サイズを500MBに引き上げます。

<multipart-config>
  <!-- 500MB max -->
  <max-file-size>524288000</max-file-size>
  <max-request-size>524288000</max-request-size>
  <file-size-threshold>0</file-size-threshold>
</multipart-config>

6. ディレクトリの作成と権限設定

# tomcatユーザーのホーム作成
mkdir /home/tomcat
chown tomcat:tomcat /home/tomcat
usermod -d /home/tomcat tomcat

# GitBucket用ディレクトリの作成
mkdir /var/gitbucket
chown tomcat:tomcat /var/gitbucket
chmod 775 /var/gitbucket

# Tomcatの起動
systemctl start tomcat9.service

③ GitBucket (gitbucket.war) の配備

  1. GitBucket Releases (GitHub) から最新の gitbucket.war をダウンロードします。
  2. ブラウザでTomcatの管理ページ(http://192.168.x.xxx:8080/manager/)にアクセスします。
    • ユーザー名:admin
    • パスワード: 上記設定で指定したパスワード
  3. 「WAR ファイルの配備」の「ファイルを選択」で gitbucket.war を選び、「配備」ボタンを押下します(/var/lib/tomcat9/webapps/ に配置されます)。
  4. http://192.168.x.xxx:8080/gitbucket/ でGitBucketの初期画面が表示されることを確認します。

4. Apache (Webサーバー) との連携

80番ポート(標準HTTP)でアクセスできるようにApacheをリバースプロキシとして設定します。

apt install apache2 -y
a2enmod proxy proxy_http proxy_ajp

/etc/apache2/sites-available/001-gitserver.conf を作成します。

<Proxy *>
  Order deny,allow
  Allow from all
</Proxy>

AllowEncodedSlashes NoDecode
ProxyPreserveHost On
ProxyPass /gitbucket http://localhost:8080/gitbucket
ProxyPassReverse /gitbucket http://localhost:8080/gitbucket

設定を有効化して再起動します。

a2ensite 001-gitserver.conf
systemctl restart apache2.service tomcat9.service

これで http://192.168.x.xxx/gitbucket/ からアクセス可能になります。

5. PostgreSQL (データベース) との連携

デフォルトのH2データベースから、パフォーマンスと信頼性の高いPostgreSQLに変更します。

PostgreSQLのインストールとデータベース作成

apt install -y postgresql

# PostgreSQL管理ユーザーに切替
sudo -u postgres -i
psql

psql コンソール上でロールとDBを作成します。

CREATE USER gitbucket WITH PASSWORD 'your_secure_password';
CREATE DATABASE gitbucket;
GRANT ALL PRIVILEGES ON DATABASE gitbucket TO gitbucket;
ALTER DATABASE gitbucket OWNER TO gitbucket;
\q

💡 Tips: 最新版のPostgreSQLを使いたい場合 Ubuntu標準のバージョンではなく最新版を利用したい場合は、公式リポジトリを追加して導入することもできます。

sudo apt install curl ca-certificates gnupg -y
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null
sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt update
sudo apt install -y postgresql

GitBucket側のDB接続設定

/var/gitbucket/database.conf を修正(または作成)します。

db {
  url = "jdbc:postgresql://localhost/gitbucket"
  user = "gitbucket"
  password = "your_secure_password"
}

サービスを再起動して設定を反映します。

systemctl restart apache2.service tomcat9.service

6. 初期設定およびSSHアクセスの有効化

  1. http://192.168.x.xxx/gitbucket/ にアクセス。
  2. 初期管理者アカウント(ユーザー名: root / パスワード: root)でログイン。 (※ ログイン後、安全のため必ず管理者のパスワードを変更してください)
  3. System Administration > System settings から SSH アクセス設定(SSH access)を有効化して保存します(/var/gitbucket/gitbucket.conf に保存されます)。
    • これにより各ユーザーの設定画面(Account settings)で SSH Keys の登録項目が表示されるようになります。

⚠️ トラブルシューティング

Tomcat9のアップデート後にリポジトリが表示されなくなる問題

症状

ある日突然 http://192.168.x.xxx/gitbucket/ にアクセスしてもリポジトリが何も表示されず、ユーザーのログインもできなくなる現象が発生。

管理者(root)でログインして System settings を確認すると、GITBUCKET_HOME のパスが本来設定していた /var/gitbucket から /home/tomcat/.gitbucket に変わってしまっていた。

原因

Ubuntuのパッケージ更新により Tomcat9 がアップデートされた際、systemd のセキュリティ機能(サンドボックス化)が有効になり、Tomcatプロセスが /var/gitbucket への書き込み権限を失ったことが原因。 書き込みに失敗したため、デフォルトのホームディレクトリ(~/.gitbucket)にフォールバックして動いていた。

解決策

systemd の override 設定を作成し、Tomcat9 に /var/gitbucket への書き込み権限を明示的に許可します。

# override用ディレクトリの作成
mkdir -p /lib/systemd/system/tomcat9.service.d/

# 設定ファイルの作成
nano /lib/systemd/system/tomcat9.service.d/override.conf

override.conf に以下の内容を記述します。

[Service]
# Configuration
EnvironmentFile=/etc/default/tomcat9
ReadWritePaths=/var/gitbucket

Daemonを再読み込みしてTomcat9を再起動します。

systemctl daemon-reload
systemctl restart tomcat9.service

再起動後、無事に /var/gitbucket が読み込まれ、リポジトリやユーザー情報が復旧します。

💡 Tips: GitBucketのバージョンアップ手順と注意点(トラブル回避)

GitBucketをマイナーバージョンアップ(例: v4.43 → v4.47.1)する際の手順と、実際にハマりがちな注意点・トラブルシューティングです。

1. バージョンアップの基本手順

  1. Tomcat9サービスの停止
sudo systemctl stop tomcat9
  1. WARファイルの差し替え
    Tomcat Manager(Web画面)から配備するのではなく、ダウンロードした新しい gitbucket.war を /var/lib/tomcat9/webapps/gitbucket.war に直接上書き配置します。
  2. Tomcat9サービスの再起動
sudo systemctl restart tomcat9

2. アップデート時の2大ハマりどころと対策

① Web管理画面(Tomcat Manager)からの動的リロード(ホットデプロイ)は避ける

Tomcat Manager画面から .war ファイルを配備・再起動(ホットデプロイ)しようとすると、GitBucket内部のSSHサーバーやDB接続スレッドの解放漏れが原因で IllegalStateException などのクラスローダーエラーが発生し、起動に失敗することがあります。

  • 対策: WARファイルの更新や設定変更後は、Web画面からリロードせず、必ずOS側のコマンド(sudo systemctl restart tomcat9)でTomcatサービスごと再起動してください。

② 古いプラグイン(.jar)の残留と競合エラー

本体をアップデートした際、/var/gitbucket/plugins 内に古いバージョンの標準プラグイン(例: gitbucket-gist-plugin-*.jar)が残っていると、新旧プラグインが競合して起動エラーの原因になります。

  • 対策: 起動に失敗する場合は、一旦プラグインフォルダを退避して切り分けを行います。
# プラグインフォルダを一時退避
sudo mv /var/gitbucket/plugins /var/gitbucket/plugins_backup
sudo mkdir /var/gitbucket/plugins
sudo chown tomcat:tomcat /var/gitbucket/plugins

# Tomcatを再起動(本体のみで無事起動するか確認)
sudo systemctl restart tomcat9
  • 本体が正常起動すれば、新しい標準プラグインが自動生成されます。自作・サードパーティ製のプラグインのみ最新版を取得して元の位置に戻し、不要になった過去のバックアップは削除します。
sudo rm -rf /var/gitbucket/plugins_backup

教訓: エラーが起きた際に「新しい設定ファイル(Context XMLなど)を増やす」前に、「古いキャッシュや残存ファイルを削ぎ落としてシンプルにする」ことで解決できるケースが多くあります。

💡 補足:Tomcat Manager経由でアップデートを行う場合

Tomcat Managerの「WARファイルの配備」を使用する場合でも、事前に /var/gitbucket/plugins 内を空にしておき、配備後にTomcat9およびApache2を再起動することで正常に更新できるケースがあります。

ただし、クラスロードの競合やDBマイグレーションの安全性を最優先する場合は、Tomcatサービスを一度停止して手動でWARファイルを置き換える方法が最も確実です。

コメント

タイトルとURLをコピーしました