踏み台サーバを経由した時のGitLabの設定が想定よりハマりました。その時の設定方法のメモ書きです。
ssl
とかssh
については今回は設定していません。
構成
今回の構成です。
- GitLabはリモートサーバ上でDockerを使って起動します。
- リモートサーバは
8080
ポートをDockerコンテナの80
番にフォワードします。 - 踏み台サーバは
8888
番で受けたリクエストをリモートサーバの8080
番にSSHでトンネリングします。
手順
1. リモートサーバでのGitLabの起動
今回はGitLabのDocker Imageを使用しました。
まずはdocker-compose.yaml
の作成です。
version: '3.9'
services:
image: gitlab/gitlab-ee:15.1.2-ee.0
ports:
- 8080:80
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://ip.address.of.jump:8888'
nginx['listen_port'] = 80
volumes:
- ./config:/etc/gitlab
- ./logs:/var/log/gitlab
- ./data:/var/opt/gitlab
restart: always
- リモートサーバの
8080
ポートをDockerコンテナの80
番に割り当てます。 -
external_url
はGitLabのUIに表示されるURLです。
踏み台サーバを経由してアクセスするため、踏み台サーバのIPアドレスip.address.of.jump
とポート8888
を使用します。 -
nginx['listen_port']
は80
番を使用します。
デフォルトではNGINXのポートはexternal_url
の値で決まるため、external_url
とNGINXのポートが異なるときはnginx['listen_port']
を指定する必要があります (参考: https://docs.gitlab.com/omnibus/settings/nginx.html#setting-the-nginx-listen-port)。
下記コマンドで起動します。
sh user@remote$ docker compose up -d
GitLabの準備は完了です。
2. 踏み台サーバでのポートフォワード
続いてssh
コマンドを用いてポートフォワードを行います。
とりあえず踏み台サーバで鍵ペアを作成してリモートサーバに配置しましょう。
詳しくは省略しますが、踏み台サーバ上でssh-keygen
で鍵を作成し、公開鍵some_key.pub
の値をリモートサーバの.ssh/authorized_key
に書き込みましょう。
下記コマンドでポートフォワードを行いました。
nohup ssh -N -p 22 someuser@ip.address.of.remote -L 8888:localhost:8080 -g &
-
nohup ... &
バックグラウンドでコマンドを実行するためのコマンドです。 -
-N
はリモートコマンドを実行しないためのオプションです。
ssh -N -p 22 someuser@ip.address.of.remote -L 8888:localhost:8080 -g
を実行するとオプションの意味がわかるでしょう。 -
-L
はローカルフォワードのオプションです。
ローカル(踏み台)の8888
ポートをリモート(ip.address.of.remote
) の8080
ポートにフォワードしています。
この時、-L 8888:localhost:8080
のlocalhost
はssh先、つまりリモートサーバ上でのlocalhost
を指すようです (参考) 。 -
-g
オプションをつけないと、踏み台サーバからのアクセスしかフォワードされません。
3. ブラウザからアクセス
ブラウザに http://ip.address.of.jump:8888
を打ち込んでアクセスしてください。
502
が表示されるときはもう少し待ちましょう。
テキトーなリポジトリのクローン先のURLを確認しましょう。
踏み台サーバのアドレスになっていればOKです。
TANUKIアイコンが少したぬきらしくなりましたね。
おわり
以上、踏み台サーバを経由してGitLabをホストする方法でした。