GitLab搭建(Docker版)
参考地址:GitLab官网地址
来到GitLab的官网地址,安装如图开始操作:


当然,上述选择系统环境包的时候是传统的二进制包安装方式,你点击进去根据页面的描述跟着走就行,这里咋们是使用Docker的方式安装,所以继续往下看就行。


你可以直接安装官方文档的走也可以,不过我自己感觉有点散,所以我就写了这篇文章来总结一下。
1. Docker-Compose编写
这里我使用docker-compose的方式来搭建GitLab。
参考官方给到的docker-compose文件,直接复制过来改改:

我改造过后的docker-compose文件如下:
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: '192.168.3.69'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.3.69:1015' #定义外部访问web地址
gitlab_rails['gitlab_shell_ssh_port'] = 1022 #定义ssh端口,通过ssh拉取仓库代码需要用到
ports:
- '1015:1015' # HTTP访问端口;注意宿主机和容器内部的端口要一致,否则external_url无法访问
- '1016:1016' # HTTPS访问端口
- '1022:22' # SSH克隆端口
volumes:
- ./gitlab/config:/etc/gitlab # GitLab配置文件
- ./gitlab/logs:/var/log/gitlab # 日志文件
- ./gitlab/data:/var/opt/gitlab # 应用数据
shm_size: '256m'
这里与官方文档有几点不同:
官方使用的镜像是
gitlab-ee(企业版)、我这里使用的是gitlab-ce(社区版);企业版有部分功能是需要付费的,而社区版是完全免费的。个人用户或小团队用社区版完全是足够的。[!tip]
其实我们2000+人的公司也是用的社区版,社区版是真的够用。
端口访问处,我修改了HTTP、HTTPS访问端口以及SSH克隆端口。因为我是家宽,所以80和443这两个端口运营商是不开放的,如果你是云服务器,那么完全就可以用80和443这两个端口。
但是有一点需要注意,正如我上面所提到的宿主机和容器内部的端口要一致,否则external_url无法访问。
external_url是外部访问的地址,相当于你必须要输入和external_url一样的地址(包括端口)才能够访问自己搭建的GitLab服务。如果你有域名,那么这里你就可以用域名访问,同时你要注意HTTP和HTTPS,并且如果你不是用的80或443端口,用的其他端口,后面也应该跟上端口,这样才能够访问。
docker-compose文件准备好了,接下来就是创建GitLab需要所需的文件以及文件夹,需要和你自己配置的volumes对应:
mkdir -p ./gitlab/config ./gitlab/logs /gitlab/data
创建好了之后,就可以使用命令启动GitLab:
docker-compose up -d
启动之后,你可以使用命令查看GitLab启动的日志:
docker logs -f gitlab
查看GitLab启动的状态
docker exec -it gitlab gitlab-ctl status

可见如上服务全部都是run的时候,就表明启动成功啦。
服务启动成功之后,就可以访问GitLab啦,访问地址就是你docker-compose文件中的external_url这个配置项的值。
初始的账号为root;
密码需要使用命令来获取:
docker exec -it gitlab cat /etc/gitlab/initial_root_password
或者直接在你挂载的目录中查看文件./gitlab/config/initial_root_password中的密码。
2. HTTPS访问配置
如果你只是想HTTP访问,那么你完全不用看本小节。
参考地址:GitLab官方SSL配置
网上很多都在说需要改gitlab.rb文件配置,其实不然,因为咋们是Docker的方式配置的,我们完全可以在docker-compose文件中的GITLAB_OMNIBUS_CONFIG配置项配置。
给我出我的完整的docker-compose文件:
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: 'xx.xxx.cn'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://xx.xxx.cn:1016' #定义外部访问web地址
gitlab_rails['gitlab_shell_ssh_port'] = 1022 #定义ssh端口,通过ssh拉取仓库代码需要用到
letsencrypt['enable'] = false #使用自己手动创建的证书,则必须禁用 Let's Encrypt 集成,否则证书可能会因自动续订而被覆盖。
nginx['redirect_http_to_https']= true #如果你要使用https访问,则需要重定向所有的http流量到https,
nginx['ssl_certificate'] = "/etc/gitlab/ssl/xx.xxx.cn.crt" #放置对应的证书名称(容器内地址)
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/xx.xxx.cn.key" #放置对应的证书名称(容器内地址)
ports:
- '1015:1015' # HTTP访问端口;注意宿主机和容器内部的端口要一致,否则external_url无法访问
- '1016:1016' # HTTPS访问端口
- '1022:22' # SSH克隆端口
volumes:
- ./gitlab/config:/etc/gitlab # GitLab配置文件
- ./gitlab/logs:/var/log/gitlab # 日志文件
- ./gitlab/data:/var/opt/gitlab # 应用数据
shm_size: '256m'
这里需要注意的配置如下:
letsencrypt['enable']:该值可以为true也可以为false,如果你是使用的自己手动创建的证书,那么你必须设置为false,防止因为证书自动续订而覆盖你手动创建的证书。nginx['redirect_http_to_https']:如果你要使用https访问,则需要重定向所有的http流量到https,所以这个配置项要设置为true。nginx['ssl_certificate']:该值为容器内的地址,通常就是容器内的/etc/gitlab/ssl/域名.crt,对应你自己的挂载位置在./gitlab/config/ssl/域名.crt。nginx['ssl_certificate_key']:该值为容器内的地址,通常就是容器内的/etc/gitlab/ssl/域名.key,对应你自己的挂载位置在./gitlab/config/ssl/域名.key。external_url:该值要为https开头,并且如果你是非443端口,那么你也要明确吧端口写出来,就如上述地址:https://xx.xxx.cn:1016
[!caution]
如果在你的挂载目录中没有ssl相关的目录,那么你需要手动创建出来。

Comments