Mac miniで始める「GitLab」入門!

この記事では「オンプレミスのGitLabの構築方法」をまとめていきます。チームで開発したり、データを共有したりする際に、オンプレのGitLabは大変便利です。会社 / 研究室 / 自宅などにおいて、GitLabを構築 / 運用する方々に対して、価値のある情報媒体となれば幸いです。

具体的なゴールとしては、会社 / 研究室 / 自宅などのローカルのネットワークからしかアクセスできないようなオンプレのGitLabサーバーを立ち上げ、組織内で機密性の高いソースコード管理を実現します。GitLabを使ったことのない人もいるかと思いますが、GitHubの主要な機能を網羅している上、UIも類似していて大変使いやすいです。

Mac mini以外でも大丈夫!
macOSであれば、Mac mini以外のコンピュータでも大丈夫です。昔使っていた古いMac Bookなどを計算機サーバーとして再利用するのもありなので、ぜひ挑戦してみてください。

実は、本シリーズ(「Mac miniで始める」シリーズ)は3作目になります。もしも計算機サーバーやNASの構築にも興味がありましたら、こちらもぜひご参照ください👍

また、GitLab内のデータを管理していく上で、先にNASの構築を実施しておくことをおすすめします!

Mac miniで始める「計算機サーバー」入門! Mac miniで始める「NAS」入門!

1. 前提知識

1-a. Gitとは?

Gitとは、ソースコードやドキュメンテーションなどに対する「分散型バージョン管理システム」です。
具体的には、ソースコード(プログラミングをする際に編集するテキストファイル)に対して「いつ(when)誰が(who)どの場所で(where)どこの部分を(what)どのように(how)変更したか」という履歴を一括管理できます。もしも共通ファイルを編集する際に生じる情報の煩雑性を減らすことができます。

  • When: 2021年6月23日23時10分30秒に、
  • Who: A君が、
  • Where: 新機能Xを追加するためのブランチで、
  • What: index.htmlの8行目の<h1>というコードを、
  • How: <h2>というコードに変更した。

では、わざわざGitを使わなくてもいいと思う方もいるかもしれません。しかし、Gitを使用することで以下のようなメリットがあります。

  1. チーム開発の際に便利
    • 一人一人の変更履歴を確認し、レビューが可能。
    • 複数の人が編集した差分を結合することが可能。
  2. バージョン管理を行う上で便利
    • 各時点のバックアップを保管することができ、いつでも過去のファイルに戻すことが可能。
    • サーバーとクライアントの間でデータのやり取りをする際に、差分のみをやり取りするため、軽量な通信が可能。
  3. サーバーとクライアントの両方にソースコードが分散している観点で便利
    • 万が一誰かデータを消去しても、更新時点までのデータの復旧可能。
    • クライアントにダウンロード(Clone)していれば、オフライン環境下でも編集可能。

もしもより詳しくGitを知りたい方はこちらの記事をご参照ください。

1-b. GitLabとは?

GitLabとは「GitLab社が開発したウェブ型のGitリポジトリマネージャー」です。
競合として、GitHubやBitbucketがあります。

GitとGitLabの根本的な違い

「ソースコードを管理するためのシステム」という意味ではどちらも広義では同じなのですが、Gitは「システムを実現するための手法」であり、GitLabやGitHubなどは「Gitを応用したサービス」になります。

また、GitLabやGitHubは企業によって運営されており、Gitはコミュニティによって成り立っています。

1-c. GitLabのメリットとデメリット

先ほど、例示したGitHubとBitbucketのメリットデメリット併せて、説明していきたいと思います。

GitLabGitHubBitbucket
概要・GitLab社が運営
・2014年に開設
・Microsoft社傘下のGitHub社が運営
・2008年に開設
・Atlassian社が運営
・2008年に開設
メリット・オンプレミスにおける圧倒的シェア
・一部のコードがOSSとして開発されている
・オンプレミスの場合は、無料プランあり
・圧倒的シェア(オンプレミス以外において)
・学生(およびアカデミック機関)に対する優良なプランあり
・CI機能(GitHub Actionsなど)が充実(Azure DevOpsともシームレス)
・JIRAというタスク管理システムとの連携
・日本ではあまり聞かないが、アメリカでは一定のシェアがあるらしい
デメリット・クラウドのシェアはあまりないこと・自社サーバーへ立てる場合の無料プランがないこと(GitHub Enterprise Server)・日本でのシェアはあまりないこと

以上の点から、日本においては「オンプレミスの場合はGitLab、それ以外はGitHub」というのが落とし所な気がします。

参考 GitHub / GitLab / BitBucketの3大Gitプラットフォーム紹介

1-d. オンプレとクラウドとは?

  • オンプレミス(on-premises):自分の組織内に情報システムのハードウェアを設置し、運用していく手法。
  • クラウド(cloud):GoogleやMicrosoftやAmazonやIBMなどが運営するサーバーを用いて運用していく手法。

今回のGtiLabの立ち上げに関しては、実装する選択肢としては3つあります。

  1. GitLabの「ウェブサービス」を利用する方法
  2. 「自社のクラウド」(GCP、Azure、AWS)にGitLabのサーバーを立ち上げる方法
  3. 「自社のオンプレサーバー」にGitLabのサーバーを立ち上げる方法

本記事では、3番目の「自社のオンプレミスサーバーにGitLabのサーバーを立ち上げる方法」を紹介していきます。

「自社のオンプレミスサーバーに立ち上げるメリット」としては以下のようなことがあります。

  1. データやソースコードをクラウドにアップロードしないため、情報の機密性が保たれる。
  2. 多量のデータ量に対する柔軟性が高い。
  3. サーバーのコンピュータに直接アクセスできるため、カスタマイズ性が高い。

2. GitLabの構築方法

今回は、以下の公式ドキュメントを参考にして、進めていきます。

参考 GitLab Docker images

また、docker-composeを用いた手法もありますが、今回はdocker engineを使ってrunする手法を採用しました。

この理由としては、最近のmacOSでdocker-composeを用いたところ、コンテナが立ち上がったが、他の人がそこへアクセスできる設定がうまく反映できなかったためです。docker runの手法に切り替えたところ解決したため、そちらの方がstableだと考えました。

また、今回はコミュニティ版のgitlab-ceを採用しました。
(もしも将来的に有料版に切り替える予定がありましたら、gitlab-eeを採用することをおすすめします。)

2-a. Dockerのインストール

以下のサイトから、Dockerをインストールしましょう。
macOSの場合は「従来のIntel chip」か「最近のApple chip」か選択する画面が出てくると思います。

参考 Get Docker

2-b. GitLabのイメージのダウンロード

Dockerのダウンロードができたら、次にGitLabのイメージをterminalからダウンロードしていきます。

参考 gitlab/gitlab-ce

では「terminal」というアプリケーションを起動し、以下のようにdocker pull gitlab/gitlab-ce:latestと入力して、実行します。

% docker pull gitlab/gitlab-ce:latest
 Using default tag: latest
 latest: Pulling from gitlab/gitlab-ce
 c549ccf8d472: Pull complete 
 7e7bfc8e3666: Pull complete 
 ee3e9c747d3d: Pull complete 
 2b4b27692c24: Pull complete 
 453c7cf5aac6: Pull complete 
 be47716098b0: Pull complete 
 5d5bf4ac6dad: Pull complete 
 444ba2036347: Pull complete 
 Digest: sha256:wf38hwhefwuh3903hgjkrotiuw0hgjskb8524934hag9w9whgaa940
 Status: Downloaded newer image for gitlab/latest
 docker.io/gitlab/gitlab-ce:latest
upgrade errorについて

最近、GitLabのversionが14.0へアップグレードしました。
それに伴いgitlab-ce:latestのイメージで進めると、以下のようなエラーが現れることがあります。

It seems you are upgrading from major version 13 to major version 14.
 It is required to upgrade to the latest 13.12.x version first before proceeding.
 Please follow the upgrade documentation at https://docs.gitlab.com/ee/update/index.html#upgrading-to-a-new-major-version

以上のエラーが出たときは「Dockerのコンテナがrunningとrestartを繰り返す」ようになり、一向に安定しません。

このような時は、以下のようにタグ一覧の中からv13の最新版のイメージをpullして、runすると成功します。
本記事を執筆した際は、13.12.5-ce.0があったため、こちらで進めたところエラーは解消されました。

参考 gitlab/gitlab-ce - Tags
% docker pull gitlab/gitlab-ce:13.12.5-ce.0
 Using default tag: latest
 13.12.5-ce.0: Pulling from gitlab/gitlab-ce
 c549ccf8d472: Pull complete 
 7e7bfc8e3666: Pull complete 
 ee3e9c747d3d: Pull complete 
 2b4b27692c24: Pull complete 
 453c7cf5aac6: Pull complete 
 be47716098b0: Pull complete 
 5d5bf4ac6dad: Pull complete 
 444ba2036347: Pull complete 
 Digest: sha256:wf38hwhefwuh3903hgjkrotiuw0hgjskb8524934hag9w9whgaa940
 Status: Downloaded newer image for gitlab/13.12.5-ce.0
 docker.io/gitlab/gitlab-ce:13.12.5-ce.0

2-c. GitLabの設定

実際にサーバーを立ち上げる前に以下の設定を行っていきます。

1. GitLabの管理フォルダの作成

Terminalで以下のようなコマンドを実行して、フォルダを作成しましょう。

% mkdir ~/gitlab
  • このフォルダは、gitlabに関わる全データが格納されるため、なるべくセキュアな場所に作ることを推奨します。
  • 容量が増えてくることを想定して、他の人がアクセスできないNAS上のフォルダなどにフォルダを作成するとことを推奨します。

2. GITLAB_HOMEの環境変数の設定

GITLAB_HOMEという名前の環境変数を作成し、その中に上記のフォルダのディレクトリを設定していきます。
余談ですが、Dockerが走り始めると、このフォルダの中に自動的にdata / logs / configのフォルダが生成されて、どんどんとデータが格納されていきます。

では、terminalで以下のようなコマンドを実行しましょう。
この時、もしもフォルダの場所を~/gitlab以外の場所に設定したい場合は、そのディレクトリを入力します。

また、zshの場合は~/.zshrcへ登録し、bashの場合は~/.bashrcへ登録しましょう。

// zshの場合
% echo "export GITLAB_HOME=~/gitlab" >> ~/.zshrc

// bashの場合
% echo "export GITLAB_HOME=~/gitlab" >> ~/.bashrc

もしも以下のようなコマンドを設定して、自分の指定したディレクトリが表示されれば設定完了です。
~はホームディレクトリを表すので、自分のユーザー名に置き換わります。

% echo $GITLAB_HOME
 /Users/masumi_morishige/gitlab

2-d. GitLabのコンテナの起動

これで全ての設定が完了したため、GitLabのイメージからコンテナを作成し、起動しましょう。

gitlab_run.sh
sudo docker run --detach \
   --hostname localhost \
   --publish 443:443 --publish 80:80 --publish 22:22 \
   --name gitlab \
   --restart always \
   --volume $GITLAB_HOME/config:/etc/gitlab \
   --volume $GITLAB_HOME/logs:/var/log/gitlab \
   --volume $GITLAB_HOME/data:/var/opt/gitlab \
   gitlab/gitlab-ce:latest

上記のコマンドを実行した後、しばらくしてからウェブブラウザ(Google Chromeなど)でlocalhostというURLを入力しましょう。以下のようなGitLabの画面が出てくれば成功です!

初回立ち上がり時間について

初回の実行時はものすごく時間がかかります。以下のdocker psコマンドでプロセスを確認することができますが、なかなかstartingのstatusから移り変わりません。ここは我慢強く待ちましょう。

パソコンのスペック環境にも寄るのですが、10分程すると、以下のようにhealthyに変わります。
そこからさらにしばらく待つと、ブラウザ(localhost)でgitlabのページが表示されます。

% docker ps
 CONTAINER ID   IMAGE                     COMMAND             CREATED         STATUS                                 PORTS                                                                                                         NAMES
 5113e4e139cf   gitlab/gitlab-ce:latest   "/assets/wrapper"   2 minutes ago   Up About a minute (health: starting)   0.0.0.0:22->22/tcp, :::22->22/tcp, 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   gitlab_web_1
% docker ps
 CONTAINER ID   IMAGE                     COMMAND             CREATED          STATUS                    PORTS                                                                                                         NAMES
 5113e4e139cf   gitlab/gitlab-ce:latest   "/assets/wrapper"   19 minutes ago   Up 14 minutes (healthy)   0.0.0.0:22->22/tcp, :::22->22/tcp, 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   gitlab_web_1

2-e. GitLabのアカウント作成

最初の画面ではrootアカウントのパスワード設定を行うことができるため、パスワードを入力し、保存しましょう。

アカウント作成が完了したら、以下のようにhttp://localhost/users/sign_inから以下のようにサインインすることができます。

3. GitLabの利用方法

ここからはGitLabをユーザーとして利用するための方法についてまとめていきます。

3-a. アカウント作成

まずlocalhost/users/sign_inのアドレスにアクセスして、アカウントの登録をしましょう。
(もしも管理者からサーバーのIPアドレスからを教えてもらっている場合はそちらを使うことを推奨します。)

次に、必要情報を記入して、登録しましょう。

すると以下のようにログイン画面に遷移すると思います。
今の状態では、権限が付与されておらず、ログインできないため「管理者に承認してもらう」ように伝えましょう。

以下のような画面が表示されたら、ログイン成功です!

3-b. SSHの登録

ここでは、SSHを用いてterminal上でGitLabサーバーと通信する手段を紹介します。

1. シェルの起動

まず、Windowsの方は「コマンドプロンプト」を、macOSの方は「terminal」のアプリケーションを開きます。

2. 鍵の生成

シェルで以下のようなコマンドを実行しましょう。

% mkdir ~/.ssh
% chmod 700 ~/.ssh
% cd ~/.ssh
% ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/masumi_morishige/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/masumi_morishige/.ssh/id_rsa.
Your public key has been saved in /Users/masumi_morishige/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:faho84hfhejrrfhadjfnw3i3-24ghihenfweuhfow masumi_morishige@Masumi-MacBook-Pro.local
The key's randomart image is:
+---[RSA 4096]----+
|.      @  @      |
|.x  x  F     B   |
|-.gb  x - - .    |
| -.  + B + = o   |
| .    + B + .    |
|    . S . .      |
|  .  + B +       |
| -    = * +      |
| @  *   o     o =|
+----[SHA256]-----+

3. 公開鍵の登録

~/.ssh/id_rsa.pubのファイル(公開鍵)を以下の画面から登録しましょう。

ファイル内の文字列(ssh-rsaから始まる文字列)をコピーして、ペーストします。
Titleは分かりやすい名前にして、Expires atは登録しなければNever(期限なし)になるため、それでも大丈夫です。
最後に、Add keyをクリックして、追加すれば登録完了です。

4. configファイルの作成

以下の内容の~/.ssh/configというファイルを作成します。

  • HostName:サーバーのIPアドレスを登録するのですが、こちらは管理者にお伺いください。
  • User:GitLabに登録した際のユーザー名を入力します。
  • IdentityFile:秘密鍵のPATHを入力します。
Host localhost
HostName 192.168.10.50
User Masumi
IdentityFile ~/.ssh/id_rsa

5. SSHでの接続

SSH Keyの登録が完了したら、自分のリポジトリをクローンするコマンドを実行しましょう。

(以下のコマンドは、git@gitlab:Masumi/test.gitというリポジトリがあることを前提としています。)

% git clone git@gitlab:Masumi/test.git

もしも接続できない場合は、SSHのポートが重複している可能性があるため、そういう時はHTTPを用いて通信しましょう。

% git clone http://192.168.10.50/Masumi/test

Cloneができれば、接続完了です!
具体的なGitの使い方は別の記事を参考にしていただければと思います。

Gitの入門記事は、以下の記事を参考にしていただければと思います。

参考 Let's Start Github!!

3. エラー対処法

3-a. ログを見たい時

Dockerのコンテナが立ち上がってからのエラーに対処する場合、まずエラーを理解することが大切です。
もしもDockerのログを見たい場合は、以下のコマンドを実行しましょう。

% sudo docker logs -f gitlab

3-b. Dockerの設定が反映されない時

GitLabの設定は、$GITLAB_HOME/config/gitlab.rbの中で編集することができます。
もしも設定した後に、設定が反映されない時は、以下のコマンドを実行しましょう。

% docker exec -it gitlab gitlab-ctl reconfigure

このコマンドは、簡単に説明すると、gitlabのコンテナの中で、gitlab-ctl reconfigureというコマンドを実行するというDockerコマンドです。

3-c. Is the docker daemon running?のエラーが出た時

Dockerコマンドを実行した時に、以下のようなエラーが出た場合は、Dockerが立ち上がっていない可能性があるため、Dockerのアプリケーションを起動しましょう。

% docker pull gitlab/gitlab-ce
Using default tag: latest
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

3-d. git version errorが出た時

色々と調べてみたところ、gitのversion要件があるようだったので、以下のコマンドを叩いてしました。
Git 2.31.x and later is required.という要件を満たしていませんでした。

% git --version
 git version 2.24.3 (Apple Git-128)

なので、以下のコマンドでgitを更新しました。

% brew install git
% git --version   
 git version 2.24.3 (Apple Git-128)

zshをsourceする必要があるので「新しいterminalのタブ」で再びバージョンを確認します。

% git --version
 git version 2.32.0

以上のように更新されれば成功です。

3-e. pending approvalのエラーが出た時

以下のようなエラーが出た場合、アカウントが承認されていないか、権限剥奪をされているため、管理者に問い合わせましょう。

Your account is pending approval from your GitLab administrator and hence blocked.
Please contact your GitLab administrator if you think this is an error.

3-f. timeoutをしてしまう時

GitLabの立ち上げなども成功し、アカウント登録などもできたが、動作が不安定でtimeoutしてしまうことがあるかと思います。もしかしたらコンテナに割り当てられているリソースが不足している場合があるので、そういう時はDockerの設定からリソースの配分を増やしてあげましょう。

3-g. IPアドレスの確認方法

管理者がサーバーのIPアドレスを確認したい場合、サーバーのterminalで以下のコマンドを実行しましょう。
すると、IPアドレスを確認することができます。

% ifconfig | grep "inet " | grep -v 127.0.0.1
inet 192.168.10.50 netmask 0xffffff00 broadcast 192.168.10.255

3-h. アカウントの承認方法について

管理者がユーザーを承認したい場合は、以下のように管理者ページ > ユーザー > 3点コロン > Approveという流れで承認することができます。

4. 最後に

いかがだったでしょうか?
普段、使用しているクラウドのGitHubやGitLabも便利ですが、組織の中で構築するのもワクワクしますね👍

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA