GitLabをインストールする

この記事では、ソフトウェア開発プロジェクトの管理、コードのバージョン管理、CI/CD(継続的インテグレーション/継続的デリバリー)などを行うための統合プラットフォームであるGitLabの構築手順について紹介します。
GitLabをインストールする
GitLabは、Gitという分散型バージョン管理システムをベースにしており、開発者がコードを管理し、チームで共同作業を進めるためのツール群を提供するものです。
今回は、RHEL8のコンテナを利用して、移植性の高いGitLabの環境を構築していきます。
OS | Red 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のシステム運用管理に関するお悩みごとについて、なんでもお気兼ねなくご相談ください。
現役システムエンジニアのスタッフが、ボランティアでご相談にご対応させていただきます。