はじめに
DS220+(Synology NAS)を購入したので、DockerでRedmineを起動し、NAS内のbareリポジトリと連携しました。
これでNASを起動するだけでチケットと対応するcommit情報の確認が出来るようになります。あくまで個人向けですが。
元々はDockerでgitlabを使用しようとは思ったのですが、メモリ関係でNASが悲鳴を上げていたため断念しました。
Synology NASの初期設定、Container Manager(Dockerに利用)のインストール、Docker用ユーザ設定、Git Serverのインストールは実施済みとします。
概要
まず、RedmineをDockerで起動できることを確認し、その後git連携を行います。
- フォルダ作成
- docker-compose.ymlの作成
- Redmine起動
- Redmine初期設定
- bareリポジトリ設定
- redmineプロジェクトにリポジトリ設定
- (備考)所有者情報変更のバッチ化
- (備考)コミットメッセージの参照キーワード
環境
- Windows 11 pro
- DS220+(Synology NAS)
1. フォルダ作成
最終的なフォルダ構成は以下となります。
NAS:.
└─volume1
└─docker
└─redmine ← 今回使用するまとめフォルダ
├─git_repositories
│ └─testrepository.git ← bareリポジトリ
├─postgres ← dockerマウント用フォルダ
│ └─db-data
├─redmine ← dockerマウント用フォルダ
│ ├─files
│ ├─log
│ ├─plugins
│ └─public
│ └─themes
├─docker-compose.yml
├─Dockerfile_postgres
└─Dockerfile_redmine
まず、docker-compose.ymlの格納フォルダ、マウント用フォルダを作成します。
PowerShellでNASにSSH接続し、フォルダを作成します。
Docker用ユーザ名、IPアドレス、ポート番号は自身のものに置き換えてください。
ポート番号は[NASログイン]-[コントロールパネル]-[端末とSNMP]で設定している値です。
ssh [email protected] -p XXXXX
cd /volume1/docker
mkdir ./redmine
mkdir ./redmine/redmine
mkdir ./redmine/redmine/files
mkdir ./redmine/redmine/log
mkdir ./redmine/redmine/plugins
mkdir ./redmine/redmine/public
mkdir ./redmine/redmine/public/themes
mkdir ./redmine/postgresql
mkdir ./redmine/postgresql/data
mkdir ./redmine/git_repositories
2. docker-compose.ymlの作成
データベースにはPostgreSQLを使用しています。
作成したdocker-compose.yml
は/volume1/docker/redmine
に格納します。
version: '3'
services:
redmine:
build:
context: .
dockerfile: Dockerfile_redmine
container_name: redmine_main
ports:
- '33000:3000'
expose:
- '3000'
volumes:
- type: bind
source: ./redmine/files
target: /usr/src/redmine/files
- type: bind
source: ./redmine/log
target: /usr/src/redmine/log
- type: bind
source: ./redmine/plugins
target: /usr/src/redmine/plugins
- type: bind
source: ./redmine/public/themes
target: /usr/src/redmine/public/themes
- type: bind
source: ./git_repositories
target: /var/redmine/git_repositories
restart: unless-stopped
environment:
REDMINE_DB_POSTGRES: postgres
REDMINE_DB_DATABASE: redmine
REDMINE_DB_USERNAME: redmine
REDMINE_DB_PASSWORD: redmine
REDMINE_PLUGINS_MIGRATE: "true"
TZ: Asia/Tokyo
links:
- postgres
postgres:
build:
context: .
dockerfile: Dockerfile_postgres
container_name: redmine_postgres
volumes:
- type: bind
source: ./postgresql/data
target: /var/lib/postgresql/data
ports:
- "54320:5432"
restart: unless-stopped
environment:
POSTGRES_ROOT_PASSWORD: postgres
POSTGRES_USER: redmine
POSTGRES_PASSWORD: redmine
POSTGRES_DATABASE: redmine
TZ: Asia/Tokyo
volumes:
redmine:
postgres:
Dockerfile_redmine
は作成する必要はありませんが、統一させたいので作成しています。
FROM redmine:5.0.5
Dockerfile_postgres
も作成し、docker-compose.yml
と同フォルダに格納します。
FROM postgres:15.2
RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ENV LANG ja_JP.utf8
3. Redmine起動
Synology NASにログインし、Container Managerを起動します。
[プロジェクト]-[作成]を選択し、全般設定のプロジェクト名(任意)、パスを入力します。
パス項目に/docker/redmine
を選択すると、格納済みのdocker-compose.yml
を読み込んでくれます。
Webポータル設定については特に利用しないためセットアップ無しにしています。
完了ボタンを押してターミナルにExit Code: 0
が表示されればRedmine起動成功です。
4. Redmine初期設定
Chrome等PCでhttp://XXX.XXX.XXX.XXX:33000/
に接続し、Redmineにログインします。
初期設定だとログインIDとパスワードが共にadmin
だと思います。
新規パスワードを設定後、真っ先に左上タブの管理をクリックし、「デフォルト設定をロード」ボタンをクリックします。
この処理をすることでデフォルト設定をロードし、すぐにRedmineを扱う上で必要な設定が追加されます。
注意ですが、何か登録などしてしまうと「デフォルト設定をロード」ボタンは表示されなくなってしまうため、一番始めに実行しなければいけません。
最後にテストプロジェクトとチケットを登録します。
- プロジェクト名:testproject
- チケット1:初期チケット(#1)
- チケット2:修正チケット(#2)
5. bareリポジトリ設定
Redmineの中に複数のプロジェクトを登録して運用するため、git_repositories
フォルダに各プロジェクトのbareリポジトリを格納するようにします。
その後、git_repositories
フォルダ内にbareリポジトリを作成します。
今回はtestrepository.git
とします。
ssh [email protected] -p XXXXX
cd /volume1/docker/redmine/git_repositories
git init --bare --shared testrepository.git
次に、bareリポジトリにpushしていきます。
PC側でローカルリポジトリを作成します。
# ファイル生成
cd D:/
mkdir ./testrepository
cd ./testrepository
# git初期設定
git init
git config --local user.name "kotememo"
git config --local user.email "[email protected]"
Redmine側で表示できるか確認するために、テキストファイルをbareリポジトリにpushします。
# 1回目テキストファイル helloworld.txt
# hello world
# redmine
# postgres
# 1回目コミット
git add .
git commit -m "初期コミット refs #1"
git remote add origin ssh://[email protected]:XXXXX/volume1/docker/redmine/git_repositories/testrepository.git
git push -u origin master
コミットのコメントのrefs #1
はredmineのチケット番号との紐づけになります。
差分を参照できるかを確認するためにもう一度pushします。
# 2回目テキストファイル helloworld.txt(2行目を修正)
# hello world
# redmine_docker
# postgres
# 2回目コミット
git add .
git commit -m "修正コミット refs #2"
git push -u origin master
コンテナ内のtestrepository.git
リポジトリをredmine
が参照できるように所有者を変更します。
親フォルダgit_repositories
の所有者を変更してもRedmineからは参照できず、個々のbareリポジトリに必要でした。
ssh [email protected] -p XXXXX
docker exec -it redmine_main bash
cd /var/redmine/git_repositories
chown redmine:redmine -R testrepository.git
exit
ただし、再コミットしようとすると権限エラーになってしまうため、一時的に権限を戻す必要がありました。
chown
で指定する所有者情報が分からない場合は、新規ファイルを配置しコンテナ内でls -l
コマンドを実行することで確認できます。
ssh [email protected] -p XXXXX
docker exec -it redmine_main bash
cd /var/redmine/git_repositories
chown 1026:users -R testrepository.git
exit
最終的なフォルダは以下に記載しています。
Dockerコンテナ内にbareリポジトリをマウントするため、gitのbareリポジトリはdockerフォルダ内に生成します。
NAS:.
└─volume1
└─docker
└─redmine ← 今回使用するまとめフォルダ
├─git_repositories
│ └─testrepository.git ← bareリポジトリ
├─postgres ← dockerマウント用フォルダ
│ └─db-data
├─redmine ← dockerマウント用フォルダ
│ ├─files
│ ├─log
│ ├─plugins
│ └─public
│ └─themes
├─docker-compose.yml
├─Dockerfile_postgres
└─Dockerfile_redmine
6. redmineプロジェクトにリポジトリ設定
先ほど作成したtestprojectプロジェクトを開き、[設定]-[リポジトリ]-[新しいリポジトリ]よりbareリポジトリのパスを設定します。
- バージョン管理システム:Git
- リポジトリのパス:
/var/redmine/git_repositories/testrepository.git
設定すると[testproject]-[リポジトリ]を開くとコミット情報を参照できます。
#
欄のリビジョンIDを選択すると関連チケットやファイル内の差分を表示できます。
これでコミットした内容の差分をredmineチケットと紐づけて確認できるようになりました。
bareリポジトリの所有者情報には手こずりましたが無事に設定できました。
7. (備考)所有者情報変更のバッチ化
bareリポジトリにpushする度に所有者情報を変更するのは面倒なため、所有者変更とpushをまとめてバッチ化するのもいいかもしれません。
ただし、バッチを用いてssh接続する場合は公開鍵の設定等を実施してパスワードレス状態でssh接続できるようにする必要があります。
- command.bat
SET COMMITMESSAGE="test commit refs #1"
SET USERNAME=user-docker
SET IP=XXX.XXX.XXX.XXX
SET PORT=XXXXX
git add .
git commit -m %COMMITMESSAGE%
rem dockerコンテナ内のbareリポジトリの所有者をユーザに変更
ssh -tt %USERNAME%@%IP% -p %PORT% < command_ssh_start.sh
git push -u origin master
rem dockerコンテナ内のbareリポジトリの所有者をredmineに変更
ssh -tt %USERNAME%@%IP% -p %PORT% < command_ssh_end.sh
pause
- command_ssh_start.sh
cd /volume1/docker/redmine/git_repositories
docker exec -w /var/redmine/git_repositories redmine_main chown 1026:users -R testrepository.git;exit
- command_ssh_end.sh
cd /volume1/docker/redmine/git_repositories
docker exec -w /var/redmine/git_repositories redmine_main chown redmine:redmine -R testrepository.git;exit
8. (備考)コミットメッセージの参照キーワード
commitする際にrefs #1
のキーワードでチケット番号を紐づけていました。
このrefs
についてはredmineの[管理]-[設定]-[リポジトリ]の参照用キーワードで設定できます。