Hyper-V上でGitLabサーバを構築する


いろいろあって、GitLabを構築を試す必要があったので手順のメモ。普段使っている検証用の VMware環境は、kubernetesが動いていて、特にメモリ確保が厳しそうだったので、 WindowsのHyper-V上に作ることにした。

Hyper-Vに仮想マシンを作る

とにかくHyper-Vのネットワークが難解で、デフォルトスイッチで作ると OS起動のたびにIPアドレスが変動するし、 外部ネットワークも下手に作ると母艦で通信できなくなるという なんでこんなことになってるの?って動きをしてくださいますので、 “管理オペレーティング システムにこのネットワーク アダプターの共有を許可する” にチェックをつけて、外部ネットワークにつなげる。 これにより、VMware Playerなどのブリッジ接続と同じになる。

多分これが一番早いと思います。

検索すると、vNICをふたつ作って内部ネットワークを固定して、インターネット通信は デフォルトスイッチにするのがよいってのが多々あったけど、めんどくさいよ。

OSは適当に最新のFedoraのISOをもってきてインストールした。

ホスト名は、シンプルに gitlab.local にしている。

ちなみに、SELinuxとFirewallは無効化している。

GitLabをインストールする

GitLab EEには魅力的な機能が多数あるが、今回はざっと作るだけなので CEの機能があれば十分。 なのだが、公式サイトにも別にライセンス登録しないEEはCEと変わらんのでEE入れれば?ってあるので GitLab EEを入れることにする。

https://www.gitlab.jp/install/ce-or-ee/

Fedoraは公式には対応していないので、あたかもRHEL8であるかのようにごまかして導入する必要がある。

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh -o script.sh
chmod +x script.sh
os=el dist=8 ./script.sh
EXTERNAL_URL="http://gitlab.local" dnf install -y gitlab-ee

インストールがおわったら、 http://gitlab.local にアクセスすると、 root ユーザのパスワード設定が求められ、 設定後ログインが可能になる。

自己署名証明書を作る

イメージレジストリを有効化したいが、こちらはhttpだとdocker操作時に怒られてしまって面倒なので、証明書を準備する。 Let’s Encriptのほうが楽だと思うのだけど、今回は自己署名証明書を作ることにする。

openssl req -newkey rsa:4096 -nodes -sha256 -keyout registry.gitlab.local.key -x509 -days 3650 -out registry.gitlab.local.crt

CNだけ指定した。

Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:registry.gitlab.local
Email Address []:

GitLabのイメージレジストリの有効化

mkdir -p /etc/gitlab/ssl
cp registry.gitlab.local.crt registry.gitlab.local.key /etc/gitlab/ssl/

/etc/gitlab/gitlab.rb を編集して、以下の行を追加(コメント化されてあるので、 コメント化解除して値を書き換え)。

registry_external_url 'https://registry.gitlab.local'

gitlab_rails['registry_host'] = "registry.gitlab.local"

変更を反映する。

gitlab-ctl reconfigure

試しに適当にプロジェクトを作ってみると、コンテナレジストリも有効化されていることがわかる。

イメージをpushする

テストとして、docker login & イメージプッシュしたいが、オレオレ証明書なので そのままでは利用できない。

  • Linuxの場合

先ほど作った registry.gitlab.local.crt を クライアント側(docker loginする側)の /etc/docker/certs.d/registry.gitlab.local/ca.crt にコピーする。 ディレクトリがなければ作成する。

  • Windowsの場合

Docker for Windowsのダッシュボードを開いて、SettingsのDocker Engineから以下のように設定する。

{
  "registry-mirrors": [],
  "insecure-registries": ["registry.gitlab.local"],
  "debug": true,
  "experimental": false
}

これで、docker loginならびにdocker pushできるはず。


関連記事