首先安装 docker 和 docker-compose,然后新建 doker-compose.yml 并配置如下:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'git.example.com'
ports:
- '80:80'
- '443:443'
- '9922:22'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
然后根据需要修改 /srv/gitlab/config/gitlab.rb
文件,然后重启容器或者或者进入到容器内执行 gitlab-ctl reconfigure
命令使新配置生效
smtp 配置成功以后可以进入容器,执行 gitlab-rails console
,然后再执行 Notify.test_email('test@example.com', 'Subject', 'Text').deliver_now
发送一封邮件来检查 smtp 配置
由于 git 的 ssh 和系统 ssh 都使用 22 号端口,所以需要映射出来的端口需要不一样,或者服务器有多个 ip,ssh 和 gitlab 分别监听不同 ip 的 22 号端口。
如果只有一个 ip,又觉得 ssh clone 的地址是
-
进入到容器内查看
/etc/group
和/etc/passwd
中 git 用户配置的 gid 和 uid,这里假设都是 998 -
在宿主机上使用
groupadd -g 998 git
和useradd -m -u 998 -g git -s /bin/sh -d /home/git git
创建和容器内相同 gid 和 uid -
同时再将
/srv/gitlab/data/.ssh/authorized_keys
软链接到/home/git/.ssh/authorized_keys
,这个文件是由 gitlab 创建,用于 git ssh 认证用的 -
如果在网页上已经添加过 ssh key 会发现 authorized_keys 最前面有一个 command,使用的命令的文件实际上是 docker 容器内的文件,在 ssh 连接的时候实际上会执行这个 command,所以我们在宿主机中建立一个同名的文件
/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell
,内容如下:#!/bin/sh ssh -i /home/git/.ssh/id_rsa -p 9922 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
-
上面文件的作用就是将 ssh 连接转发到 9922 端口,这样就就交给容器了,这里实际上还是一个 ssh 连接做的转发,宿主机连接到容器还需要一次然认证,所以需要使用
su git
命令切换为 git 用户,使用ssh-keygen -t rsa -b 4096
生成 ssh key -
把
/home/git/.ssh/id_rsa.pub
修改为/home/git/.ssh/authorized_keys_proxy
,再将这个文件映射为容器内/gitlab-data/ssh/authorized_keys 文件 -
在这次提交中,添加了除了
/.ssh/authorized_keys
以外的/gitlab-data/authorized_keys
文件用于 ssh 认证,这样就可以宿主机的 git 账户就可以连接到容器了 -
这样就可以
git clone git@example.com:xxx/xxx.git
的方式进行操作了,同时之前的 9922 端口可以限制为只监听 127.0.0.1
最终配置如下:
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'git.example.com'
ports:
- '80:80'
- '443:443'
- '127.0.0.1:9922:22'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
- '/home/git/.ssh/authorized_keys_proxy:/gitlab-data/ssh/authorized_keys'
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于