📖

QNAP NASのContainer StationでGitlab CEを実行する

2024/09/10に公開

目的

GitlabやGithubの容量制限とかひっかるなぁと思うことがあり、自環境でGitlabをホストしようかと思いました。
目標としては

  • 外部からアクセスできるようにする
  • Gitlab RunnerによるCI環境の構築
  • Docker Composeを使いできるだけ構築・再構築を簡単にする

です。

今回できた事

上記の目標のうち、Gitlab Runnerで環境構築までしたものの実際のCIの実行まではたどり着きませんでした。

構築

前提条件

  • (外部からアクセスする)URLは XXXXX.mycloudnas.com
  • Container Staition側で公開する
  • SSHのポートは11022
  • HTTPSのポートは11443(localhost) 公開は443
  • データはすべて gitlab という共有フォルダに保存
  • NASのIPアドレス(ローカルネットワーク側)のアドレスは192.168.1.82

QNAP自体の設定

DDNS

myQNAPcloudのDDNSの設定画面でホストの追加をします。今回のケースでは「XXXXX」というホストを追加します。l

ポートフォワーディング

UPnPポートフォワーディングの設定で11022を通すようにします

リバースプロキシ

下記のように https://XXXXX.mycloudnas.com から https://localhost:11443 へのリバースプロキシを設定します。

共有フォルダ

gitlabという共有フォルダを作成しておきます。

Docker Composeの準備

リモートアクセスの設定

こちらはローカルコンピュータ側の設定です。
Container Stationの「環境設定」→「証明書」を確認し、リモートからアクセスできるように設定をあらかじめ行ってください

Docker Compose用のファイルの準備

docker-compose.yml は下記のようにします。
この時、extra_hostsでXXXXX.mycloudnas.comを外部の公開アドレスではなくNASのアドレスへアクセスするように設定します

docker-compose.yml
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    restart: always
    ports:
      - "11443:443"
      - "11022:22"
    volumes:
      - /share/gitlab/config:/etc/gitlab
      - /share/gitlab/logs:/var/log/gitlab
      - /share/gitlab/data:/var/opt/gitlab

  gitlab-runner:
    image: gitlab/gitlab-runner:latest
    extra_hosts:
      - "XXXXX.mycloudnas.com=192.168.1.82" 
    restart: always
    volumes:
      - /share/gitlab/config/ssl:/etc/gitlab-runner/certs
      - /share/gitlab/runner-config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock

Gitlab 初回起動と初期設定

Gitlabを起動します

docker compose up -d

/share/gitlab/config/gitlab.rb が出来ましたら下記の部分を適切に変更します。
私の場合は・・・ということですので、必要に応じて修正してください

gitlab.rb
external_url 'https://XXXXX.mycloudnas.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "メールサーバ"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "メールアカウント"
gitlab_rails['smtp_password'] = "メールパスワード"
gitlab_rails['gitlab_shell_ssh_port'] = 11022

Gitlabを再起動します。

docker compose exec gitlab gitlab-ctl reconfigure

問題なければブラウザでログイン画面が表示され、Gitlab時代のインストールは完了です。

Gitlab Runner設定

Runnerの作成

Runnerを新規作成します。GitlabのRunner新規作成のボタンを押下します。
(今回はインスタンスRunnerの作成をします)

こちらの画面は何を入れればよいのかわかっておりませんので、適度に設定してください🫠

Runnerの登録

Runnerを作成すると、次のページのStep1にTokenが表示されます。

このトークンをもとに下記のようにgitlab-runner registerで登録をしていきます。

docker compose exec gitlab-runner gitlab-runner register --url https://gitlab-g.mycloudnas.com --token glrt-h2fSWcm6pySo_zZ6eXCB

実行すると色々確認事項が表示されますのでいい感じに回答してください。
(私もよく分かっておらず・・・)

Runtime platform                                    arch=amd64 os=linux pid=17 revision=782c6ecb version=16.9.1
Running in system-mode.

Enter the GitLab instance URL (for example, https://gitlab.com/):
[https://gitlab-g.mycloudnas.com]:
Verifying runner... is valid                        runner=h2fSWcm6p
Enter a name for the runner. This is stored only in the local config.toml file:
[d1ba2c9756c0]:
Enter an executor: virtualbox, docker-windows, docker+machine, instance, shell, ssh, parallels, docker-autoscaler, custom, docker, kubernetes:
docker
Enter the default Docker image (for example, ruby:2.7):
alpine:latest
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のページを表示して、オンラインになっていれば登録完了です

Runnerの設定

docker-compose.ymlでextra_hostsの設定をしましたが、RunnerのタスクをDockerで動かす場合にRunner側でもextra_hostsの設定をする必要があります。

下記のように config.toml に設定を加えます

/gitlab/runner-config/config.toml
~省略~

[[runners]]
~省略~
  [runners.docker]
~省略~
    extra_hosts = ["XXXXX.mycloudnas.com:192.168.1.82"]

終わりに

ここまで書いていてなんなのですが、正直GitlabもGitlab Runnnerに関しても初心者といって過言ではありません。
今回構築にあたって記事として情報としてのこし、再構築の際に活用しようと思ってこれを書いております。

もし間違っている点などございましたらご指摘頂けるとたすかります。

Discussion