0.はじめに
元々はGitHubでソースを管理していたのですが、こちらの記事で構築したEsxi上のサーバにDockerを構築していたため、色々な機能を集約しる中でGitlabも自宅内に建てることにしました。
1.環境
OSおよびDockerは以下のバージョンのものを使用しています。
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
# 以下省略
$ docker -v
Docker version 26.1.3, build 26.1.3-0ubuntu1~24.04.1
2.使用バージョン
GitlabにはCommunity Edition(CE)
とEnterprise Edition(EE)
の2種類があります。
厳密にはEE
の中にも有償、無償の差があるようなのですが、今回はCE
で構築していきます。
また、Gitlabのバージョンは構築当初最新だった17.2.1
を使用しています。
ただ、このバージョンは古くアップデートせよと警告が出てくるので、バージョンアップも本手順で実施します。
$ docker image ls gitlab/gitlab-ce:latest
REPOSITORY TAG IMAGE ID CREATED SIZE
gitlab/gitlab-ce latest 86f394d1a46c 4 months ago 2.95GB
$ docker exec -it gitlab-web-1 gitlab-rake gitlab:env:info
System information
System:
Current User: git
Using RVM: no
Ruby Version: 3.1.5p253
Gem Version: 3.5.11
Bundler Version:2.5.11
Rake Version: 13.0.6
Redis Version: 7.0.15
Sidekiq Version:7.1.6
Go Version: unknown
GitLab information
Version: 17.2.1
Revision: b30193cc04c
Directory: /opt/gitlab/embedded/service/gitlab-rails
DB Adapter: PostgreSQL
DB Version: 14.11
URL: https://gitlab.motuninja250.work
HTTP Clone URL: https://gitlab.motuninja250.work/some-group/some-project.git
SSH Clone URL: git@gitlab.motuninja250.work:some-group/some-project.git
Using LDAP: no
Using Omniauth: yes
Omniauth Providers:
GitLab Shell
Version: 14.37.0
Repository storages:
- default: unix:/var/opt/gitlab/gitaly/gitaly.socket
GitLab Shell path: /opt/gitlab/embedded/service/gitlab-shell
Gitaly
- default Address: unix:/var/opt/gitlab/gitaly/gitaly.socket
- default Version: 17.2.1
- default Git Version: 2.45.2
3.インストール
今回は公式ドキュメントを参考にdocker-compose.yml
を作成していきます。
こちらのページでは公式ドキュメントを日本語に翻訳して公開してくださっています。
ただ、サイト内にも記載がありますが、公式情報や最新の更新については必ず公式ドキュメントを確認するようにしてください。
今回Let's Encrypt
のSSLサーバ証明書は既に発行済みで、コンテナに/etc/letsencrypt
を直接マウントさせています。
セキュリティ的にはかなりNGだと思うので、適宜パラメータの調整が行ってください…。
今回使用するのyamlは以下の通りです。
GITLAB_OMNIBUS_CONFIG
変数に値を入れることでgitlab.rb
より優先してその値を使用してくれます。
各変数の説明は以下の通りです。
- external_url:外部公開するURLを指定
- nginx['redirect_http_to_https']:HTTPをHTTPSへリダイレクト
- nginx['ssl_certificate']:Let's EncryptのSSL証明書を指定
- nginx['ssl_certificate_key']:Let's Encryptの秘密鍵ファイルを指定
また、ホストのSSHの22
ポートは既に使ってると思うので、SSLのポート設定も各自設定してください。
services:
web:
image: image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab-test.motuninja250.work'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab-test.motuninja250.work'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = '/etc/letsencrypt/live/motuninja250.work/fullchain.pem'
nginx['ssl_certificate_key'] = '/etc/letsencrypt/live/motuninja250.work/privkey.pem'
ports:
- '9443:443'
- '9080:80'
- '2422:22'
volumes:
- ./config:/etc/gitlab
- ./logs:/var/log/gitlab
- ./data:/var/opt/gitlab
- /etc/letsencrypt:/etc/letsencrypt
shm_size: '1024m'
networks:
- wp_net_gitlab-test
gitlab-runner:
image: 'gitlab/gitlab-runner:latest'
restart: always
volumes:
- ./gitlab-runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
networks:
- wp_net_gitlab-test
networks:
wp_net_gitlab-test:
driver: bridge
4.起動
特に問題がなければ起動すると思います。
起動まで5~10分ほどかかるので、gitlabのステータスがhealthy
になるまで待ちましょう。
$ docker compose up -d
✔ Container gitlab-test-gitlab-runner-1 Started
✔ Container gitlab-test-web-1 Started
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9687f7eaf47e gitlab/gitlab-ce:latest "/assets/wrapper" 3 minutes ago Up 3 minutes (healthy) 0.0.0.0:2423->22/tcp, :::2423->22/tcp, 0.0.0.0:9081->80/tcp, :::9081->80/tcp, 0.0.0.0:9444->443/tcp, :::9444->443/tcp gitlab-test-web-1
72e0726b435e gitlab/gitlab-runner:latest "/usr/bin/dumb-init …" 3 minutes ago Up 3 minutes gitlab-test-gitlab-runner-1
Gitlabの初回ログインのパスワードは以下のコマンドで取得可能です。
$ docker exec gitlab-test-web-1 cat /etc/gitlab/initial_root_password
# WARNING: This value is valid only in the following conditions
# 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
# 2. Password hasn't been changed manually, either via UI or via command line.
#
# If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.
Password: u/RIi5ZpqGZkGKH5tl2Mu+cp0s+kNPy5RmrbogeiipQ=
# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
5.GitLabアクセス
external_url
に記載したページにアクセスするとログイン画面が開かれます。
ユーザ名はroot
、パスワードは先ほど取得した物を入力するとアクセスできるかと思います。
6.GitLab Runnerの登録
GitLab RunnerのコンテナはGitLabと一緒に作成しましたが、使用するにはいくつか手順があります。
6-1.トークンの確認
Runnerを設定する対象のプロジェクトから[設定] - [CI/CD] - [Runner]と遷移します。
新規プロジェクト Runner
をクリックするとRunnerの作成画面が出てきます。
様々な設定ができますが、今回はタグのないジョブの実行
にチェックを入れてランナーを作成
をクリックします。
Docker用のマニュアルにも飛べますが、今回はデフォルトで表示されているLinux
のコマンドをそのまま流用します。
ステップ1
に表示されているコマンドを控えておきましょう。
6-2.Runnerへの登録
docker exec
コマンドに先ほどのコマンドをくっつけて実行します。
その際に、--name test-runner
と--executor shell
も追加で引数として渡します。
--name
はそのRunnerに対して固有の名前を付けることができます。
--executor
はRunnerの実行種類を選べます。
docker
やkubernetes
など何を実行したいか決まっている人はその値に変えてください。
引数に予め値を渡すことで対話式に入力せずとも最初から値を読み込んでくれるので楽になります。
値の内容に問題がなければ基本Enter
連打で問題ありません。
$ docker exec -it gitlab-test-gitlab-runner-1 gitlab-runner register \
--url https://gitlab-test.motuninja250.work \
--name test-runner \
--token glrt-BHV6Zuh8qQj57EfoFr67 \
--executor shell
Runtime platform arch=amd64 os=linux pid=98 revision=374d34fd version=17.6.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
[https://gitlab-test.motuninja250.work]:
Verifying runner... is valid runner=BHV6Zuh8q
Enter a name for the runner. This is stored only in the local config.toml file:
[test-runner]:
Enter an executor: shell, virtualbox, docker+machine, kubernetes, docker-autoscaler, instance, custom, ssh, parallels, docker, docker-windows:
[shell]:
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
以下のコマンドでRunnerが正常に登録されたか確認することができます。
$ docker exec -it gitlab-test-gitlab-runner-1 gitlab-runner list
Runtime platform arch=amd64 os=linux pid=15 revision=374d34fd version=17.6.0
Listing configured runners ConfigFile=/etc/gitlab-runner/config.toml
test-runner Executor=shell Token=glrt-BHV6Zuh8qQj57EfoFr67 URL=https://gitlab-test.motuninja250.work
再度Webの画面を確認すると、接続されたRunnerが表示されているかと思います。
6-3.Runnerの実行
Runnerでジョブを実行するには、プロジェクトのルートディレクトリに.gitlab-ci.yml
という名前でファイルを格納します。
Web上からファイルを作成する場合は、[ビルド] - [パイプラインエディタ]からファイルの作成・編集をすることが可能です。
今回はデフォルトで表示されている以下のソースを少し変更して実行してみます。
# This file is a template, and might need editing before it works on your project.
# This is a sample GitLab CI/CD configuration file that should run without any modifications.
# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts,
# it uses echo commands to simulate the pipeline execution.
#
# A pipeline is composed of independent jobs that run scripts, grouped into stages.
# Stages run in sequential order, but jobs within stages run in parallel.
#
# For more information, see: https://docs.gitlab.com/ee/ci/yaml/index.html#stages
#
# You can copy and paste this template into a new `.gitlab-ci.yml` file.
# You should not add this template to an existing `.gitlab-ci.yml` file by using the `include:` keyword.
#
# To contribute improvements to CI/CD templates, please follow the Development guide at:
# https://docs.gitlab.com/ee/development/cicd/templates.html
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml
stages: # List of stages for jobs, and their order of execution
- build
- test
- deploy
build-job: # This job runs in the build stage, which runs first.
stage: build
script:
- echo "Compiling the code..."
- echo "Compile complete."
unit-test-job: # This job runs in the test stage.
stage: test # It only starts when the job in the build stage completes successfully.
script:
- echo "Running unit tests... This will take about 10 seconds."
- sleep 10
- echo "Code coverage is 90%"
lint-test-job: # This job also runs in the test stage.
stage: test # It can run at the same time as unit-test-job (in parallel).
script:
- echo "Linting code... This will take about 10 seconds."
- sleep 10
- echo "No lint issues found."
deploy-job: # This job runs in the deploy stage.
stage: deploy # It only runs when *both* jobs in the test stage complete successfully.
environment: production
script:
- echo "Deploying application..."
- echo "Application successfully deployed."
下部の変更をコミットする
をクリックするとファイルのコミットとジョブの実行が開始されます。
実行が成功すると、以下のように標準出力などの実行結果が表示されます。
7.GitLabのバックアップ
GitLabとしてバックアップコマンドが用意されています。
gitlab-rake gitlab:backup:create
を実行するとバックアップの取得ができます。
$ docker exec -it gitlab-test-web-1 gitlab-rake gitlab:backup:create
2024-12-19 15:07:02 UTC -- Dumping database ...
2024-12-19 15:07:02 UTC -- Dumping PostgreSQL database gitlabhq_production ...
2024-12-19 15:07:09 UTC -- [DONE]
2024-12-19 15:07:09 UTC -- Dumping database ... done
2024-12-19 15:07:09 UTC -- Dumping repositories ...
{"command":"create","gl_project_path":"root/test-project","level":"info","msg":"started create","pid":506,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.git","storage_name":"default","time":"2024-12-19T15:07:10.701Z"}
{"command":"create","gl_project_path":"root/test-project.wiki","level":"info","msg":"started create","pid":506,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki.git","storage_name":"default","time":"2024-12-19T15:07:10.702Z"}
{"command":"create","gl_project_path":"root/test-project.wiki","level":"info","msg":"completed create","pid":506,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki.git","storage_name":"default","time":"2024-12-19T15:07:10.734Z"}
{"command":"create","gl_project_path":"root/test-project","level":"info","msg":"completed create","pid":506,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.git","storage_name":"default","time":"2024-12-19T15:07:10.769Z"}
2024-12-19 15:07:10 UTC -- Dumping repositories ... done
2024-12-19 15:07:10 UTC -- Dumping uploads ...
2024-12-19 15:07:10 UTC -- Dumping uploads ... done
2024-12-19 15:07:10 UTC -- Dumping builds ...
2024-12-19 15:07:10 UTC -- Dumping builds ... done
2024-12-19 15:07:10 UTC -- Dumping artifacts ...
2024-12-19 15:07:10 UTC -- Dumping artifacts ... done
2024-12-19 15:07:10 UTC -- Dumping pages ...
2024-12-19 15:07:10 UTC -- Dumping pages ... done
2024-12-19 15:07:10 UTC -- Dumping lfs objects ...
2024-12-19 15:07:10 UTC -- Dumping lfs objects ... done
2024-12-19 15:07:10 UTC -- Dumping terraform states ...
2024-12-19 15:07:10 UTC -- Dumping terraform states ... done
2024-12-19 15:07:10 UTC -- Dumping container registry images ... [DISABLED]
2024-12-19 15:07:10 UTC -- Dumping packages ...
2024-12-19 15:07:10 UTC -- Dumping packages ... done
2024-12-19 15:07:10 UTC -- Dumping ci secure files ...
2024-12-19 15:07:10 UTC -- Dumping ci secure files ... done
2024-12-19 15:07:10 UTC -- Dumping external diffs ...
2024-12-19 15:07:10 UTC -- Dumping external diffs ... done
2024-12-19 15:07:10 UTC -- Creating backup archive: 1734620821_2024_12_19_17.2.1_gitlab_backup.tar ...
2024-12-19 15:07:10 UTC -- Creating backup archive: 1734620821_2024_12_19_17.2.1_gitlab_backup.tar ... done
2024-12-19 15:07:10 UTC -- Uploading backup archive to remote storage ... [SKIPPED]
2024-12-19 15:07:10 UTC -- Deleting old backups ... [SKIPPED]
2024-12-19 15:07:10 UTC -- Deleting tar staging files ...
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/backup_information.yml
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/db
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/repositories
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/uploads.tar.gz
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/builds.tar.gz
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/artifacts.tar.gz
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/pages.tar.gz
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/lfs.tar.gz
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/terraform_state.tar.gz
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/packages.tar.gz
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/ci_secure_files.tar.gz
2024-12-19 15:07:10 UTC -- Cleaning up /var/opt/gitlab/backups/external_diffs.tar.gz
2024-12-19 15:07:10 UTC -- Deleting tar staging files ... done
2024-12-19 15:07:10 UTC -- Deleting backups/tmp ...
2024-12-19 15:07:10 UTC -- Deleting backups/tmp ... done
2024-12-19 15:07:10 UTC -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
2024-12-19 15:07:10 UTC -- Backup 1734620821_2024_12_19_17.2.1 is done.
2024-12-19 15:07:10 UTC -- Deleting backup and restore PID file ... done
バックアップデータはデフォルトだとコンテナ内の/var/opt/gitlab/backups
に出力されます。
ホストのディレクトリにマウントしているので、./data/backups
配下にあります。
$ ls -la ./data/backups/
合計 548
drwx------ 2 systemd-network root 4096 12月 20 00:07 .
drwxr-xr-x 22 root root 4096 12月 20 00:06 ..
-rw------- 1 systemd-network systemd-network 552960 12月 20 00:07 1734620821_2024_12_19_17.2.1_gitlab_backup.tar
また、ログにWarning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data and are not included in this backup. You will need these files to restore a backup. Please back them up manually.
というような出力がありました。
要約すると、
-
gitlab.rb
とgitlab-secrets.json
は機密情報を含んでいるよ - バックアップを戻す際に必須だけど、バックアップには含まれてないよ。手動でバックアップしてね
ということらしいです。
このファイルがどこにあるかというと、コンテナ内の/etc/gitlab
に該当します。
このディレクトリもホストにマウントしているので、./config
配下にあります。
$ ls -la ./config/
合計 216
drwxrwxr-x 3 root root 4096 12月 19 16:34 .
drwxrwxr-x 7 cairn01 cairn01 4096 12月 20 00:06 ..
-rw------- 1 root root 19057 12月 20 00:06 gitlab-secrets.json
-rw------- 1 root root 156276 12月 19 16:34 gitlab.rb
-rw------- 1 root root 749 12月 19 16:34 initial_root_password
-rw------- 1 root root 537 12月 19 16:34 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 196 12月 19 16:34 ssh_host_ecdsa_key.pub
-rw------- 1 root root 432 12月 19 16:34 ssh_host_ed25519_key
-rw-r--r-- 1 root root 116 12月 19 16:34 ssh_host_ed25519_key.pub
-rw------- 1 root root 2622 12月 19 16:34 ssh_host_rsa_key
-rw-r--r-- 1 root root 588 12月 19 16:34 ssh_host_rsa_key.pub
drwxr-xr-x 2 root root 4096 12月 19 16:34 trusted-certs
ここはOS上からtarなどでバックアップしてしまいましょう。
$ sudo tar -cvzf "$(date +"%Y%m%d")_gitlab_etc.tar.gz" ./config
./config/
./config/ssh_host_ed25519_key
./config/ssh_host_ed25519_key.pub
./config/initial_root_password
./config/gitlab-secrets.json
./config/trusted-certs/
./config/ssh_host_ecdsa_key.pub
./config/gitlab.rb
./config/ssh_host_rsa_key.pub
./config/ssh_host_rsa_key
./config/ssh_host_ecdsa_key
$ tar -tvf "$(date +"%Y%m%d")_gitlab_etc.tar.gz"
drwxrwxr-x root/root 0 2024-12-19 16:34 ./config/
-rw------- root/root 432 2024-12-19 16:34 ./config/ssh_host_ed25519_key
-rw-r--r-- root/root 116 2024-12-19 16:34 ./config/ssh_host_ed25519_key.pub
-rw------- root/root 749 2024-12-19 16:34 ./config/initial_root_password
-rw------- root/root 19057 2024-12-20 00:06 ./config/gitlab-secrets.json
drwxr-xr-x root/root 0 2024-12-19 16:34 ./config/trusted-certs/
-rw-r--r-- root/root 196 2024-12-19 16:34 ./config/ssh_host_ecdsa_key.pub
-rw------- root/root 156276 2024-12-19 16:34 ./config/gitlab.rb
-rw-r--r-- root/root 588 2024-12-19 16:34 ./config/ssh_host_rsa_key.pub
-rw------- root/root 2622 2024-12-19 16:34 ./config/ssh_host_rsa_key
-rw------- root/root 537 2024-12-19 16:34 ./config/ssh_host_ecdsa_key
リストアについては私も未実施なのでまた検証して補記します。
8.GitLabのバージョンアップ
今回17.2.1
から17.6.2
へ直接アップグレードしようとしていますが、段階バージョンアップが必要と怒られます。
皆さんはアップデート前のバックアップや公式ドキュメントの確認をよく行ってから実行してください。
冒頭でも説明しましたが、使用しているGitLabのバージョンが古く、以下のように警告メッセージが表示されるようになってしまいました。
今回は最新の17.6.2
にアップデートしようかと思います。
8-1.最新バージョンの取得
まずはdocker-compose.yml
を以下のように編集します。
バージョンのタグは今回明示的に指定します。
services:
web:
- image: 'gitlab/gitlab-ce:latest'
+ image: 'gitlab/gitlab-ce:17.6.2-ce.0'
いつまで経っても起動しなかったのでログを確認した所、以下のメッセージが表示されていました。
メジャーバージョンアップをする際は段階リリースをするようにシステムとして止めてくれるみたいです。
$ docker logs -f gitlab-test-web-1
Thank you for using GitLab Docker Image!
Current version: gitlab-ce=17.6.2-ce.0
# 途中省略
If this container fails to start due to permission problems try to fix it by executing:
docker exec -it gitlab update-permissions
docker restart gitlab
Cleaning stale PIDs & sockets
It seems you are upgrading from 17.2.1 to 17.6.2.
It is required to upgrade to the latest 17.5.x version first before proceeding.
Please follow the upgrade documentation at https://docs.gitlab.com/ee/update/#upgrade-paths
8-2.アップグレードパスの確認
色々調べた所、こちらのサイトを見ると、指定のアップデートまでの方法を教えてくれます。
どうやら17.3.7-ce.0
→ 17.5.4-ce.0
→ 17.6.2-ce.0
でアップグレードしてねと書いてあります。
8-3.段階アップグレードの実施
8-3-1. 17.3.7へのアップグレード
まずは17.2.1
から17.3.7
にアップグレードしていきます。
services:
web:
- image: 'gitlab/gitlab-ce:17.6.2-ce.0'
+ image: 'gitlab/gitlab-ce:17.3.7-ce.0'
また5分くらいすると起動しました。
バージョンを確認するとちゃんと上がっています。
$ docker exec -it gitlab-test-web-1 gitlab-rake gitlab:env:info
GitLab information
Version: 17.3.7
8-3-2. 17.5.4へのアップグレード
続いて17.5.4
にアップグレードしていきます。
services:
web:
- image: 'gitlab/gitlab-ce:17.3.7-ce.0'
+ image: 'gitlab/gitlab-ce:17.5.4-ce.0'
同じく5分くらいすると起動しました。
こちらも問題なくバージョンが上がっています。
$ docker exec -it gitlab-test-web-1 gitlab-rake gitlab:env:info
GitLab information
Version: 17.5.4
8-3-3. 17.6.2へのアップグレード
最後は17.6.2
にアップグレードしていきます。
services:
web:
- image: 'gitlab/gitlab-ce:17.5.4-ce.0'
+ image: 'gitlab/gitlab-ce:17.6.2-ce.0'
最後のアップグレードも同様に5分くらいすると起動しました。
最後も問題なくバージョンが上がっています。
$ docker exec -it gitlab-test-web-1 gitlab-rake gitlab:env:info
GitLab information
Version: 17.6.2
9.最後に
GitLabは便利ですがバージョンアップも早く気が付いたら大変なことになっていました…。
今回Qiitaに投稿するまでバージョンアップは控えていたので今後は気を付けるようにします…。
参考サイト
・Install GitLab in a Docker container
https://docs.gitlab.com/ee/install/docker/installation.html
・GitLab Dockerイメージ
https://gitlab-docs.creationline.com/ee/install/docker.html
・GitLabとGitLab Runnerをdocker-composeで手軽に構築する
https://qiita.com/handy-dd18/items/8eb4e4a754fbd8b42448
・GitLab RunnerでCI/CDしてみる(前編)
https://dev.classmethod.jp/articles/gitlab-runner-ci-cd-1/
・GitLabのバックアップとリストア
https://qiita.com/fy406/items/742edd103d9f0593e7d6