[NOTE] GitLab

Ubuntu Server + Docker + Gitlab 以及 Git 使用。

因为最近也接触了Docker,所以也算是练手,决定将Gitlab直接部署到docker当中

一、Docker容器安装

1
sudo apt-get install docker-ce

为了便于使用,修改docker镜像源

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://0ghk1qyk.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

二、安装并配置gitlab-server

1
2
3
4
5
6
7
8
9
10
sudo docker run --detach \
--hostname gitlab-server \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://192.168.1.253';" \
gitlab/gitlab-ee:latest

介绍其中的几个配置项,

  • —publish告诉容器发布数据的端口,以及主机端口与容器端口之间的关系,由于GitLab接受HTTP(80), HTTPS(443)以及SSH(22)端口的消息,所以publish这一行的设置是将主机对应的端口映射到容器的端口上。

    如果想要设置非标准的端口(由于端口已被占用),要将主机端口放在前,容器端口放在后。

    在采用这个设置之前,我将SSH设置为了2222,HTTP端口设置为了9090,并且在gitlab.rb文件中修改了相应的端口,但可能是哪个步骤有疏漏,导致GitLab页面一直显示502,这点之后会有所说明

  • —restart使容器在推出后能立即重启,保证持续提供服务

  • —volume可以讲容器中的路径挂载到本机中,此处挂载了包括应用数据、日志以及配置文件,这样在维护中会带来一些方便

这些命令在文档中都有介绍,有足够的经验之后,完全可以在需要使用时再去查询。

三、踩坑记录(1)

由于最先开始配置GItLab时,并不想去修改默认的ssh端口22,配置如下:

1
2
3
4
5
6
7
8
9
10
docker run --detach \
--hostname gitlab-server \
--publish 9090:9090 \
--publish 8022:8022 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ee:latest

修改配置文件:

1
2
3
4
vi /srv/gitlab/config/gitlab.rb
# docker exec -it gitlab vim /etc/gitlab/gitlab.rb
# 此命令等价
# 修改external_url 'http://192.168.1.253:9090'

现在看来,这显然是错误的,以我粗浅的认知,我认为应该至少应该是将publish配置为80:8888, 22:8022这样才比较合理,不知我所参考的博客的原作者是怎么成功的,反正我这样是一直显示502,在查看log文件之后logs

可以明显的看到问题出在连接端口上,此后通过docker命令停止并删除改容器,重新配置一个新的容器。

1
2
sudo docker stop gitlab
sudo docker container rm gitlab

在使用默认端口之后,ssh端口会发生端口冲突的情况,可以使用vi /etc/ssh/sshd_config文件中加入Port 26恢复对端口的监听

四、GitLab维护

4.1 GitLab升级

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo docker stop gitlab
sudo docker rm gitlab
sudo docker pull gitlab/gitlab-ee:latest

sudo docker run --detach \
--hostname gitlab-server \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://192.168.1.253/';" \
gitlab/gitlab-ee:latest

可以看到,虽然移除了当前的容器,但是由于镜像依旧在本地磁盘中,且由于挂载的关系,应用数据、日志等都还在。

五、踩坑记录(2)

5.1 提交缓存超出(solved)

在我将整个博客及其编译环境全部上传gitlab时遇到了这种情况,解决方法是修改工作目录下.git文件夹中的config文件:

1
2
[http]
postBuffer = 524288000

5.2 无法使用GitLab内置ssh(In queue)

![Screen Shot 2019-07-27 at 11.22.08](/Users/fusidic/Documents/work/hugo/test-pages/static/img/GitLab/Screen Shot 2019-07-27 at 11.22.08.png)

尚未解决,猜想应该与git账户权限有关