Back

/ 5 min read

Docker部署Gitlab

安装Gitlab CE版本

Terminal window
docker pull gitlab/gitlab-ce:latest # ce是社区版,也可以选择自己的版本安装

配置$GITLAB_HOME

    我们需要一个配置目录,当Docker中的Gitlab容器启动时,会将配置文件、日志文件、数据文件挂载到这个目录中。这样我们可以在容器重启后,不会丢失数据。

    并且可以方便的在宿主机中,修改Gitlab容器的配置文件。

首先在想要保存容器数据的目录下创建三个文件夹。

Terminal window
mkdir -p /srv/gitlab/{config,logs,data}

    将export GITLAB_HOME=/srv/gitlab添加到/etc/profile中,然后执行source /etc/profile

    在终端中使用echo $GITLAB_HOME查看是否配置成功。

启动Gitlab容器

Terminal window
docker run -d -p 18443:443 -p 18080:80 -p 18022:22 --name gitlab --restart always -v $GITLAB_HOME/config:/etc/gitlab -v $GITLAB_HOME/logs:/var/log/gitlab -v $GITLAB_HOME/data:/var/opt/gitlab gitlab

    这里面有几个重要的参数需要注意:

  1. -p 18443:443,我们将宿主机的18443端口映射到Gitlab容器的443端口,这样我们就可以通过https://ip:18443访问Gitlab
  2. -p 18080:80,我们将宿主机的18080端口映射到Gitlab容器的80端口,这样我们就可以通过http://ip:18080访问Gitlab
  3. -p 18022:22,我们将宿主机的18022端口映射到Gitlab容器的22端口,这样我们就可以通过ssh -p 18022 git@ip访问Gitlab

配置SSL证书

    我们使用自行注册的证书来配置https协议。首先我们需要已经准备好的SSL证书。

Terminal window
# 需要注意,我们必须要将证书放在$GITLAB_HOME/config目录下,否则容器无法读取到证书。
cp xxx.top.pem /srv/gitlab/config/xxx.top.pem
cp xxx.top.key /srv/gitlab/config/xxx.top.key

配置gitlab.rb文件

    在$GITLAB_HOME/config目录下,我们可以找到gitlab.rb文件,这个文件是Gitlab的配置文件。每当使用gitlab-ctl reconfigure命令时,Gitlab会读取这个文件的配置。并通过这个文件中的配置,生成GitlabNginxPostfix等服务的配置文件。

Terminal window
external_url 'https://git.xxx.top' # 这里填写你的域名
gitlab_rails['gitlab_shell_ssh_port'] = 18022 # 这里填写你自己映射的ssh端口
nginx['redirect_http_to_https'] = false # 是否将http重定向到https
nginx['ssl_certificate'] = "/etc/gitlab/xxx.top.pem" # 这里填写你的证书路径
nginx['ssl_certificate_key'] = "/etc/gitlab/xxx.top.key" # 这里填写你的证书路径
letsencrypt['enable'] = false # 关闭自动生成的证书
puma['worker_processes'] = 0 # 配置puma集群数量,减少内存占用
gitlab_rails['time_zone'] = 'Asia/Shanghai' # 配置时区

    配置完成后,我们需要执行gitlab-ctl reconfigure命令,让Gitlab读取配置文件并生成配置文件。

    但是为了方便,我们直接重新启动容器,重新启动也会让Gitlab读取配置文件。

Terminal window
docker restart gitlab

配置Nginx反向代理

server {
listen 80;
server_name git.xxx.top;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
listen 443 ssl;
server_name git.xxx.top;
ssl_certificate /srv/gitlab/config/xxx.top.pem;
ssl_certificate_key /srv/gitlab/config/xxx.top.key;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_pass https://127.0.0.1:18443; # 这里填写你的Gitlab容器的ip和端口
}
}

    配置完成后,我们需要执行sudo nginx -s reload命令,让Nginx重新加载配置文件。

    如果每一步都配置正确,那么我们就可以通过https://git.xxx.top访问我们的Gitlab了。

    如果你的Gitlab无法访问,可以查看容器的日志,找到错误原因。

Terminal window
docker logs -f -t --tail=100 gitlab # 查看容器日志 只看最后100行 滚动查看

配置Gitlab初始化密码

    我们可以通过cat $GITLAB_HOME/config/initial_root_password查看Gitlab的初始化密码。需要注意的是,这个文件会在24小时后失效。

    我们需要通过这个密码,登录Gitlab后台,修改密码。

总结

    Gitlab的服务占用实在是太大了,我的2核4G服务器很难吃得消,所以后续使用更轻便的Gitea来配置。