【GitLab】ポートフォワードした環境(docker)でURLを正しく表示させる方法

GitLabのプロジェクトページでクローンのURLがローカルIPになっている例

想定する読み手

  • 自サーバ(ローカル環境)でGitLab(ce)を使用したい人
  • docker環境が既にあり、最低限の操作はできる状態の人
  • 22とか80とかのウェルノウンポートでGitLabを使いたくない人
  • GitLabページでcloneのURLをコピーするとgitlab.example.comになってイラっとしたことがある人

前提条件

今回の設定例

  • dockerのホストのIP:192.168.1.1
  • ポートフォワード設定
    • HTTP(80)・・・50080
    • SSH(22)・・・50022

今回は上記の設定例でコマンド等を記載します。
IP・ポート番号は、ご自身で設定される環境に合わせて適宜置換してください。

また、ポートフォワード以外の設定については、なんか良い感じになっているものとします。(=説明省略します)

手順(GitLab環境を新規作成する場合)

新規作成する場合は、IPとポート番号さえ決まっていれば、コマンド一つの簡単なお仕事なのです。

コマンド

以下のコマンドでGitLabのコンテナを作成します。

sudo docker run --detach \
  --hostname 192.168.1.1 \
  --publish 50080:50080 --publish 50022:22 \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://192.168.1.1:50080/';gitlab_rails['gitlab_shell_ssh_port'] = 50022;" \
  --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

以上です。
たったこれだけです。はい。簡単ですね。

とはいえ、注意点があるので一応説明しておきます。

注意点

①dockerのポートフォワード設定
--publishでHTTPとSSHのポートフォワードを設定しているのですが、
HTTPの方は、50080:50080、SSHの方は50022:22と設定する必要があるので注意です。

※GitLabの設定を変更しているのでSSHの方も50022:50022では?と思わなくもないのですが、何故か50022:22でないとダメっぽいです、、が、現状特に困ることはないので放置してます。。。

②GitLabのコンフィグ変更
--env GITLAB_OMNIBUS_CONFIG=の部分でGitLabのコンフィグを変更しています。

external_url 'http://192.168.1.1:50080/';
で、GitLabに表示されるURLを変更しているのですが、HTTPSを利用する場合は'https://~'と設定する必要があるのでご注意ください。

gitlab_rails['gitlab_shell_ssh_port'] = 50022;
で、GitLabのSSHのポートを変更しているはずですなのですが、①で書いた通り、ポートフォワード設定との関係が謎です…

③設定の永続化
--env GITLAB_OMNIBUS_CONFIG=で設定した値は、コンフィグに保存されない点には注意が必要です。

コンテナのstart/stop/restartなどは特に問題ありませんが、例えばGitLab更新でコンテナを入れ替える場合などには再度同じコマンドでdocker runする必要があります。
(そんな頻繁にやる作業じゃないので問題はないと思いますが…)

気になる人は、--envで指定するのではなく、コンテナ内の”/etc/gitlab/gitlab.rb”を直接編集すれば設定を永続化可能です。
(パラメータ名・設定内容は、--env GITLAB_OMNIBUS_CONFIG=内で設定する値と同じです)

手順(GitLabを既に使用している場合)

既にGitLabコンテナを動かしている場合、ポート設定を変更するのはクッソ面倒で嵌りポイントだらけなので、素直にコンテナを作り直した方が良いと思います。

コンテナ作成時に--volumeでホストのディレクトリをマウントしているかと思いますので、コンテナを作り直してもデータが消えることはありません
(※万が一に備えてバックアップは取っておいてください。また、コンテナ停止に伴いGitLabへのアクセス不可期間が発生するので複数人で共用している場合などはご注意ください)

なので、以下の通り作業をすれば新規作成時とそこまで手間は変わらないです。

コマンド

①コンテナ停止
docker stop <コンテナ名>

(コンテナの停止を確認してから)
②コンテナ削除
docker rm <コンテナ名>

③コンテナ作成

sudo docker run --detach \
  --hostname 192.168.1.1 \
  --publish 50080:50080 --publish 50022:22 \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://192.168.1.1:50080/';gitlab_rails['gitlab_shell_ssh_port'] = 50022;" \
  --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:<使用していたGitLabのバージョン>

注意点

基本的には新規作成時と同じなのですが、GitLabのバージョンにはお気を付けください。

バージョンを下手に上げると動かない場合などがあるので、ポート設定を変更する場合は、それだけを変更すると割り切ってバージョンは使用していたバージョンに合わせることをお勧めします。

終わりに

GitLabの画面からcloneのURLをコピーすると毎回gitlab.example.comになってイラっとしていたので、その解決策を今回はまとめてみました。

ローカル環境でGitLabを運用していて、同じイライラを感じている方のお役に立てれば幸いです。

以上です。

[参考]
・GitLab公式ドキュメント
https://docs.gitlab.com/ee/install/docker.html#expose-gitlab-on-different-ports
https://docs.gitlab.com/ee/install/docker.html#pre-configure-docker-container

コメント

  1. GitLabのバージョンはいくつでしょうか?
    12系でも可能でしょうか?

タイトルとURLをコピーしました