86
111

More than 5 years have passed since last update.

docker-composeによる GitLabの実行と運用

Last updated at Posted at 2018-06-06

GitLab環境作成

2018年内のGitHub買収が決まりました。ここでGitLabへのインポートが突如スパイクした訳なのですが、GitLab環境をローカルに構築した事もあって、GitLab環境の整備の仕方や、DR方法を書いていきたいと思います。何だかんだでアジャイル人間なので徐々にこの項も更新していきます。
※因みにあまり知らなくても良いですがGitLabはRuby On Railsで出来ています。

DockerとDocker-compose

Dockerはコンテナ環境ですが、複数コンテナによるアプリケーションを素早く立ち上げるコマンドに docker-composeというものがあります。今回このdocker-composeを使用してGitlabとそのデータベースであるPostgresql、キャッシュのRedisを導入します。

まずDocker環境ですが、詳しくは述べません。CentOSやUbuntu辺りを入れて、Docker社のページを参考に環境構築します。
yumやyast、apt-get 等で簡単にインストール可能です。

docker-composeに関しては、多少厄介です。Docker社の出しているインストラクションが古かった為、私はバイナリを落とし、パスを通して使いました。
 ※この辺ですかね…
https://github.com/docker/compose/releases

Gitlab用のdocker-compose.yml

 docker-composeは、基本的にdocker-compose.yml という設定ファイルを使用してコンテナを起動します。

GitLab用には、  https://github.com/sameersbn/docker-gitlab があります。このリポジトリをクローンするか、あるいはdocker-compose.yml のみをダウンロードして使用します。
 Gitlabの頻繁なupgradeと共に、このdocker-compose.yml ファイルも頻繁にUpdateされていきます。したがって、この記事の正確性は保証できません…
 基本的に、このファイルで変更すべき部分は外部開放のポート、タイムゾーン、ホスト名、バックアップ、LDAP、Proxy設定でしょうか。参考までに私が設定した項目を記述します。ADと同期したのでLDAP設定をしていますが、これはオプションです。使用しない場合はLDAPで始まる環境変数は無視してください。

項目 概要
gitlab:image sameersbn/gitlab:10.7.4 GitLabのバージョン
gitlab:ports 4080:80 外部開放するポート番号(http)
gitlab:ports 4022:22 外部開放するポート番号(ssh)
TZ・GITLAB_TIMEZONE Asia/Tokyo・Tokyo タイムゾーン
GITLAB_HOST 該当ホストのホスト名又はIP 同左
GITLAB_PORT 4080 外部開放するポート番号(http)
GITLAB_SSH_PORT 4022 外部開放するポート番号(ssh)
GITLAB_BACKUP_SCHEDULE daily バックアップの頻度
GITLAB_BACKUP_TIME 1:00 バックアップの時間
GITLAB_BACKUP_EXPIRY 259200 バックアップの保存期間(秒)
GITLAB_ROOT_PASSWORD password 管理者パスワード!!
LDAP_ENABLED true LDAP(AD)を有効にするかどうか
LDAP_HOST ADのドメインコントローラ 同左
LDAP_PORT 389 ADのポート番号
LDAP_UID ADのユーザーID 同左
LDAP_METHOD plain 同左
LDAP_BIND_DN バインドするドメイン名称 同左
LDAP_PASS パスワード 同左
LDAP_ACTIVE_DIRECTORY true LDAPがADであるかどうか
LDAP_BASE コモンネーム 同左
http_proxy GitLabから外にでる場合のプロキシ設定
https_proxy 同上

※AWS等のオブジェクトストレージに自動でバックアップする機能もありますが、色々はまったので設定していません…

起動・停止

基本的に起動はdocker-compose up -d、停止はdocker-compose down
です。初回はコンテナのイメージダウンロード等で時間が長く取られる事でしょう。
Postgres(DB)、Redis(Cache)、Gitlab の3つのコンテナが起動します。

起動したら別段何にも考えずにVM のIP、設定したポートにアクセスします。
ログインは最初管理者ですので root 、設定したパスワードです。
image.png

バックアップ

docker-compose.yml に記述した設定に従って自動的にバックアップが取得されます。バックアップ取得先はホストと共有したディスクエリア/srv/docker/gitlab/gitlab/backups/に3世代(259200は三日です)取得されます。GITLAB_BACKUP_EXPIRYを指定しないと7日分取得されます。
GitLab自身に他のWEBストレージ(AWS S3など)へのバックアップ機能があります。
私の場合は自前でawsコマンドでS3とsyncするバッチを作成し、S3にバックアップを取得しました。
大体こんな感じです。

[root@S-Gitlab backups]# ls -lrt
合計 911880
-rw------- 1 1000 1000 311214080  6月  5 01:00 1528128033_2018_06_04_10.7.4_gitlab_backup.tar
-rw------- 1 1000 1000 311275520  6月  6 01:00 1528214443_2018_06_05_10.7.4_gitlab_backup.tar
-rw------- 1 1000 1000 311275520  6月  7 01:00 1528300834_2018_06_06_10.7.4_gitlab_backup.tar
[root@S-Gitlab backups]#

リストア

リストア時にコンテナ側でgitaly というRPC用の口が上がっている必要があります。

という事でGitLabのコンテナを上げたまま内部のGitlabのコマンドでリストアしましょう。
この時、BACKUPに該当バックアップのファイル名接頭辞を与えます。
ご丁寧にバージョン番号がついており、これが合わないとリストアできません。

docker exec -it gitlab_gitlab_1 /sbin/entrypoint.sh app:rake gitlab:backup:restore BACKUP=1526572830_2018_05_17_10.7.4

別マシンにリストアする場合は、URLの最後に/users/sign_inを付けないと元のサイトにリダイレクトされてしまう事があります。

これは、GitLabが内部的にGITLAB_HOSTで指定されたURLを保持する為です。このURLは、管理者でログインし、Admin area(上部メニューのスパナ)のSettings(歯車)のメニューから、Sign-in restrictions の Home page URL と After sign out path を変更する事で変更可能です。

※因みにですが個別バックアップもリストアと同じ理屈で実施可能です。バックアップ後はrestartしましょう。

docker exec -it gitlab_gitlab_1 /sbin/entrypoint.sh app:rake gitlab:backup:create

バージョンアップ

3つのコンテナの内、Gitlabのコンテナだけ落として消します。これをしないと、致命的な場合がありました。
何故かは聞かないで下さい…
例えばこんな感じです。

docker stop gitlab_gitlab_1
docker rm gitlab_gitlab_1
docker-compose down 
vi docker-compose.yml
image: sameersbn/gitlab:10.6.2 -> 
image: sameersbn/gitlab:10.7.4
docker-compose up -d

備えあれば憂いなし

おすすめは、二つVMを用意し、二つdocker-compose を上げておき、一個のGitLabでバックアップを取得して二個目のGitlabでリストアしておく事です。まあリスクヘッジで基本ですが。頻繁にバージョンアップされると不安ですよね…
何が起きるかわからないので、2個目のVMで色々試します。

自己署名の証明書によるTLS化

HTTPSにする場合、自己署名の証明書でも良ければ、下記のように秘密鍵、証明書(公開鍵)と鍵交換用のパラメータを作成し、GitLabのディレクトリに格納してTLSに関連するパラメータを変更する事によりTLSにすることができます。

秘密鍵、証明書、DH(鍵交換パラメータ)の作成

sh-4.2$ openssl genrsa -out gitlab.key 2048
sh-4.2$ openssl req -new -key gitlab.key -out gitlab.csr # 証明書作成要求の作成のため、証明書作成にかかわる組織の情報を聞かれます
sh-4.2$ openssl x509 -req -days 3650 -in gitlab.csr -signkey gitlab.key -out gitlab.crt # 10年後に期限が切れます
sh-4.2$ openssl dhparam -out dhparam.pem 2048

作成した秘密鍵、証明書、DH(鍵交換パラメータ)を /srv/docker/gitlab/gitlab/certs に移します。秘密鍵のみパーミッションは400 にしておきます。

TLS関連パラメータの変更

項目 概要
gitlab:ports 4443:443 外部開放するポート番号(https)
GITLAB_PORT 4443 外部開放するポート(http→https)
GITLAB_HTTPS true SSL/TLSを有効にするか
SSL_SELF_SIGNED true 証明書が自己署名の証明書か

上記パラメータをTLS用にして起動(再作成)すると、https で4443 ポートにアクセスすることができます。

ファイルのGitlabでの管理

Qiitaなので、下記の記事を参考にTourtoiseGitを導入しました。
Windowsの右クリックでGitが使え、尚且つファイルにリポジトリ状況を示すアイコンが付くので、重宝しています。世の中的にはVSCodeの Git Extentionがデファクトですかね。

https://qiita.com/SkyLaptor/items/6347f38c8c010f4d5bd2

2018-06-06 15_58_35-C__Users_O020151_Desktop_Knowledge.png

86
111
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
86
111