GitLabをインストールする

この記事では、ソフトウェア開発プロジェクトの管理、コードのバージョン管理、CI/CD(継続的インテグレーション/継続的デリバリー)などを行うための統合プラットフォームであるGitLabの構築手順について紹介します。

GitLabをインストールする

GitLabは、Gitという分散型バージョン管理システムをベースにしており、開発者がコードを管理し、チームで共同作業を進めるためのツール群を提供するものです。

今回は、RHEL8のコンテナを利用して、移植性の高いGitLabの環境を構築していきます。

OSRed Hat Enterprise Linux release 8.10 (Ootpa)
コンテナツールpodman version 4.9.4-rhel
GitLab CE(Community Edition)17.8.1
構成一覧

GitLabは、複数のアプリケーションやコンポーネントで構成されており、それぞれが複雑に連携して動作しています。

それらをまとめて簡単にインストールすることができるOmnibus GitLabというパッケージを使って環境構築していきます。

なお、HTTPS化のためにSSLサーバ証明書が手元に準備できている前提で解説を進めていきます。

ベースコンテナイメージの作成

はじめに、GitLabサーバを作成するためのベースとなるコンテナイメージを作成します。

コンテナイメージは、RHEL8サーバとして最低限動作するようにRPMパッケージをあらかじめインストールしておきます。

# vi Containerfile
FROM registry.redhat.io/ubi8/ubi:latest

USER root

RUN echo root:XXXXXXXX | chpasswd
RUN dnf -y install openssh-server; dnf -y install openssh-clients
RUN dnf -y install rsyslog
RUN dnf -y install firewalld
RUN dnf -y install hostname
RUN dnf -y install procps
RUN dnf -y install diffutils
RUN dnf -y install wget
RUN dnf -y install curl
RUN dnf -y install procps-ng
RUN dnf -y groupinstall "Development Tools"
RUN dnf -y install git
RUN dnf -y install maven
RUN dnf -y install passwd
RUN dnf -y install httpd; dnf -y install httpd-devel
RUN dnf clean all
RUN echo "Port 2222" >> /etc/ssh/sshd_config
RUN systemctl enable rsyslog
RUN systemctl enable firewalld

CMD [ "/sbin/init" ]

rootのパスワードは任意に設定してください。ファイルを作成したらコンテナイメージを作成します。

# podman build -t gitlab_server:0.0.0 .

ベースコンテナイメージが作成されたか確認します。

# podman images

REPOSITORY                   TAG                    IMAGE ID      CREATED        SIZE
localhost/gitlab_server      0.0.0                  e875f20a176b  2 hours ago    2.62 GB

コンテナはデータの永続化についての考慮が必要です。今回は、GitLabに関連する以下のディレクトリをバインドして永続化していきます。

  • /var/opt/gitlab ⇒ GitLabに保存されたファイルやデータベースを格納する場所
# podman run --privileged -itd  --rm -v /var/opt/gitlab:/var/opt/gitlab --net local_macvlan_net --ip=192.168.11.10 --name gitlab_server -h gitlab.reafnex.local localhost/gitlab_server:0.0.0 /sbin/init

#podman ps

CONTAINER ID  IMAGE                                         COMMAND     CREATED        STATUS        PORTS       NAMES
d7312afc22c3  localhost/gitlab_server:0.0.0                 /sbin/init  4 seconds ago  Up 4 seconds              gitlab_server

Podmanの仮想ネットワークやボリュームについては、以下で詳しく解説しています。

作成したコンテナイメージにログインして作業を進めていきます。

# podman exec -it <Container ID> /bin/bash

コンテナにログインしたら、外部から接続できるようにSSH(2222)ポートとhttps(443)ポートを開放していきます。

# firewall-cmd --add-port=2222/tcp --zone=public --permanet
# firewall-cmd --add-service=https --zone=public --permanet
# firewall-cmd --reload

これで、直接外部から2222ポートを使ったSSH接続とHTTPS接続ができるようになりました。

GitLab CEのインストール

コンテナで作成したサーバにGitLabをインストールしていきます。最初にGitLab CEの公式Yumリポジトリをインストールします。

# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash

次に、GitLab CEをインストールします。

# dnf install gitlab-ce

インストールは、これだけの操作で完了します。Omnibus GitLab使えば、驚くほど簡単にGitLabサーバをインストールすることができます。

GitLabのHTTPS化

インストールが完了したら、GitLabのHTTPS化の設定を行います。GitLabの環境設定は、gitlab.rbファイルに行います。

# cd /etc/gitlab
# vi gitlab.rb

以下のパラメータを探して、ご自身の環境に合わせて修正してください。

gitlab_rails['gitlab_shell_ssh_port'] = 2222

external_url 'https://gitlab.reafnex.local'

nginx['enable'] = true
nginx['listen_https'] = true          
nginx['ssl_certificate'] = "/etc/gitlab/ssl/reafnex.local.crt"  
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/reafnex.local.key"
nginx['redirect_http_to_https'] = true
  
letsencrypt['enable'] = false

registry_nginx['redirect_http_to_https'] = true <= 追記

設定の修正が完了したら保存し、サーバ証明書と秘密鍵を保存します。

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

上記の例では、トライアル用として自己証明機関で作成したサーバ証明書を利用しています。自身のサーバ証明書と秘密鍵にあわせて設定してください。

ここまで完了したら、GitLabの環境構築を実行します。

# gitlab-ctl reconfigure

特にエラーがなければ、「gitlab Reconfigured!」と表示されて環境設定が完了となります。

GitLabを起動する

GitLabは、gitlab-ctlコマンドで起動します。

# gitlab-ctl start
ok: run: alertmanager: (pid 975) 1s
ok: run: gitaly: (pid 986) 0s
ok: run: gitlab-exporter: (pid 1006) 1s
ok: run: gitlab-kas: (pid 1008) 0s
ok: run: gitlab-workhorse: (pid 1019) 1s
ok: run: logrotate: (pid 1029) 0s
ok: run: nginx: (pid 1035) 0s
ok: run: node-exporter: (pid 1052) 1s
ok: run: postgres-exporter: (pid 1059) 0s
ok: run: postgresql: (pid 1066) 1s
ok: run: puma: (pid 1077) 0s
ok: run: redis: (pid 1089) 1s
ok: run: redis-exporter: (pid 1096) 0s
ok: run: sidekiq: (pid 1105) 0

もし、何らかの問題が発生した場合は、以下のコマンドでアプリケーションの状態を確認することができます。

# gitlab-ctl status

また、以下のコマンドでGitLabを停止することができます。

# gitlab-ctl stop

gitlab.rbファイルの「external_url」パラメータに設定したURLでブラウザからアクセスしてみましょう。

起動直後は、以下のような画面が表示されることがあります。この画面が表示されている間は、5秒間隔で自動的にリロードされています。

しばらくすると、以下のようなログイン画面が表示されます。

初回ログインは「/etc/gitlab/initial_root_password」ファイルに記録されているパスワードを使って、「root」ユーザでログインします。

初回ログイン後は、管理スペースから「Administrator」ユーザのパスワードを変更してください。

「/etc/gitlab/initial_root_password」ファイルは、24時間後に自動削除されてしまいますので注意してください。

まとめ

いかがでしたでしょうか。

今回は、ソフトウェア開発プロジェクトの管理、コードのバージョン管理、CI/CD(継続的インテグレーション/継続的デリバリー)などを行うための統合プラットフォームであるGitLabの構築手順について紹介しました。

GitLab Community Edition(CE)は、GitLabのオープンソース版であり、基本的な機能を無料で利用することができ、個人や小規模な開発チームに最適な選択肢です。

これに対して、GitLab Enterprise Edition(EE)は、企業向けに追加機能やサポートが提供される商用版であり、より高度なセキュリティや管理機能が必要な場合に適しています。

GitLab CEを利用することで、ソフトウェア開発の効率化やコラボレーションを促進し、プロジェクト管理がよりスムーズに行えるようになります。

特に、CI/CDパイプラインの設定を行うことで、開発からデプロイ作業までのプロセスの自動化が進み、作業効率と生産性の向上が期待できるでしょう。

また、ソフトウェア開発プロジェクトの課題として、開発したソースコードをGitHubなどの部外に保存することに抵抗がある場合は、GitLabがプライベートに管理できる有力な選択肢となります。

参考になれば幸いです。

システムのお悩みについてご相談ください

本サイトの掲載内容に関するお問い合わせは、こちらから承ります。
SOHOのシステム運用管理に関するお悩みごとについて、なんでもお気兼ねなくご相談ください。
現役システムエンジニアのスタッフが、ボランティアでご相談にご対応させていただきます。