部署gitlab
这里介绍使用docker部署gitlab的方法,主要结合官方文档挑重点介绍
文档地址
- https://docs.gitlab.com/16.2/ee/install/docker.html
https需要的ssl证书这里不做介绍,假设已经有域名有证书了,这里假设域名为:gitlab.examle.com,证书文件名前缀为:gitlab-cert
假设你对docker有基础的了解
gitlab对硬件资源要求还是比较高的,官方建议至少4核4G,能支撑500用户
安装准备
docker镜像
- https://hub.docker.com/r/gitlab/gitlab-ee/
在启动容器前先准备好宿主机的映射目录,以便将数据存储在宿主机中,容器中的数据需要映射的目录主要为三个
- /var/opt/gitlab 应用数据
- /var/log/gitlab 日志
- /etc/gitlab 配置
建议在宿主机中建立gitlab目录,在该目录中分别建立这以下目录与其一一映射
- {path}/data
- {path}/logs
- {path}/config
这里因为我们需要安装证书,所以需要多映射一个目录,在宿主机的gitlab目录再建立一个**{path}cert**目录
假设gitlab数据存储在一块挂载的磁盘中,磁盘挂载目录为/mnt/custom_disk
,那么我们需要准备的目录完整路径为
/mnt/custom_disk/gitlab/data
/mnt/custom_disk/gitlab/logs
/mnt/custom_disk/gitlab/config
/mnt/custom_disk/gitlab/cert
安装
首先拉取镜像,官方镜像有两个,gitlab/gitlab-ee和gitlab/gitlab-ce,第二是社区版免费的,第一个是企业版收费的,但是企业版在没有购买license的时候只有社区版的功能,依旧免费使用,所以建议直接使用企业版,以备后面有升级企业版的需求。强烈建议不要找破解的license,尊重版权
docker pull gitlab/gitlab-ee
我们使用docker-compose来启动容器,在/mnt/custom_disk/gitlab
目录下创建 docker-compose.yml 文件
-
文件内容如下,示例邮件服务器使用163的smtp服务,需要到163邮箱开启相关配置,不清楚邮件服务如何使用的自行百度
version: '3.3' services: web: image: 'gitlab/gitlab-ee:latest' restart: always hostname: 'gitlab.examle.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://gitlab.examle.com' gitlab_rails['gitlab_shell_ssh_port'] = 2224 nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab-cert.pem' nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab-cert.key' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.163.com" # 163邮箱的SMTP服务器地址 gitlab_rails['smtp_port'] = 465 # 163邮箱的SMTP端口号 gitlab_rails['smtp_user_name'] = "xxx@163.com" # 你的163邮箱地址 gitlab_rails['smtp_password'] = "*****" # 你的163邮箱密码,注意是授权吗,需要到163官网设置里获取 gitlab_rails['smtp_domain'] = "163.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_ssl'] = true gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = 'xxx@163.com' # 你的163邮箱地址 # Add any other gitlab.rb configuration here, each on its own line ports: - '8929:443' - '2224:22' volumes: - '/mnt/custom_disk/gitlab/cert:/etc/gitlab/ssl' - '/mnt/custom_disk/gitlab/config:/etc/gitlab' - '/mnt/custom_disk/gitlab/logs:/var/log/gitlab' - '/mnt/custom_disk/gitlab/data:/var/opt/gitlab' shm_size: '256m'
这里我将宿主机的8929端口映射到容器的https端口443,2224端口映射到容器ssh端口22
目录的映射已经在前面说明过,需要注意的是这里多映射了一个ssl证书的目录,需要将证书下载下来放到那个目录中
environment配置下的GITLAB_OMNIBUS_CONFIG可以添加任何gitlab的配置,也就是容器中
/etc/gitlab/gitlab.rb
中的所有配置,我们不在容器中做任何配置是因为这样我们可以随时删除容器再创建而不影响数据和配置
接下来我们需要启动容器,在/mnt/custom_disk/gitlab
目录下执行docker-compose up -d
,容器启动很快,但是gitlab服务的启动还需要一点时间,这个时候你可以通过docker ps
来看一下你的gitlab容器的名称,然后执行docker logs 容器名
来查看日志看服务是否启动完成。
到这里,你应该可以在局域网通过你宿主机的ip+端口来访问到你的gitlab了,比如 https://127.0.0.1:8929
内网穿透
内网穿透我们选择使用frp,可以带GitHub上获取最新的frp压缩包,解压到你的服务器和本地宿主机中,在这之前假设你已经将域名解析到你的云服务器上
- https://github.com/fatedier/frp
这里不做过多的介绍,直接上配置
-
云服务器(服务端)frps的配置,位于解压目录下的文件
frps.ini
[common] bind_addr = 0.0.0.0 bind_port = 7000 log_file = /tmp/frps.log log_level = trace log_max_days = 3 vhost_https_port=8929 tls_version = TLSv1.2 tls_enable = true tls_cert_file = /root/frp_0.51.2_linux_386/cert-gtilab/gitlab.fabunion.com.pem tls_key_file = /root/frp_0.51.2_linux_386/cert-gtilab/gitlab.fabunion.com.key
证书需要下载到服务器并且放在合适的位置,路径换成自己的路径即可
服务器需要开放7000的端口
-
本地宿主机(客户端)frpc的配置,位于解压目录下的文件
frpc.ini
[common] server_addr = yun addr server_port = 7000 tls_version = TLSv1.2 [gitlab] type = https local_ip = 127.0.0.1 local_port = 8929 custom_domains = gitlab.examle.com [ssh] type = tcp local_ip = 127.0.0.1 local_port = 2224 remote_port = 2224
这里的ssh配置是为了gitlab在clone和推送代码时可以使用ssh链接
-
先在服务器解压的frp目录下启动frps
./frps -c frps.ini
-
再在本地宿主机解压的frp目录下启动frpc
./frpc -c frpc.ini
-
你也可以通过nohup将两个程序放在后台执行,自行百度nohup的用法
到这里如果你也将服务器的8929端口开放的话你应该可以在外网通过 https://gitlab.examle.com:8929来访问到你的gitlab了
Nginx配置
我们每次访问域名+端口来访问我们的gitlab会显得麻烦,其实我们可以用frp直接监听443端口来直接通过域名访问就可以
但是如果我们的服务器还有其他https的监听需求会出现冲突,并且这样也不够灵活
通常我们会用nginx将请求代理到frp上
在nginx的配置文件目录下添加gitlab.conf
的配置文件一般这个目录是/etc/nginx/conf.d
# gitlab.conf
server {
#HTTPS的默认访问端口443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
listen 443 ssl;
#填写证书绑定的域名
server_name gitlab.examle.com;
#填写证书文件名称
ssl_certificate /etc/nginx/conf.d/cert/gitlab-cert.pem;
#填写证书私钥文件名称
ssl_certificate_key /etc/nginx/conf.d/cert/gitlab-cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
#表示优先使用服务端加密套件。默认开启
ssl_prefer_server_ciphers on;
location / {
proxy_redirect off;
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 $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Url-Scheme $scheme;
#以下三行配置wss
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_ssl_name gitlab.examle.com;
proxy_ssl_server_name on;
proxy_pass https://127.0.0.1:8929;
access_log /var/log/nginx/frps.access.log;
error_log /var/log/nginx/frps.error.log;
}
}
证书和前面frps使用的证书是一样的,可以放在合适的位置,一起使用
proxy_ssl_name gitlab.examle.com;
和proxy_ssl_server_name on;
是不能少的,否则frps会拿不到host无法将请求转发给客户端的对应htts监听
到这里我们的配置全部结束,你应该可以通过 https://gitlab.examle.com来访问到你的gitlab了