搭建 gitlab 以及 gitlab pages 问题总结
[TOC]
gitlab
安装的环节就不多赘述了,网上比较多,请自行谷歌或百度
安装好 gitlab 后比较大的问题是 nginx
默认情况下,gitlab使用自带的nginx,占用80端口,这样就与系统原本安装的nginx冲突
有两个方案:
- 方案一:通过修改 gitlab 的 nginx 端口解决冲突
- 方案二:禁用 gitlab 自带 nginx 并把 UNIX 套接字 更改为 TCP端口
我采用了方案一,步骤如下:
vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
- 将
listen *:80;
改成listen *:888;
(888是你自定义的端口,随便换成其他没应用占用的都可以)
- 将
vim /etc/gitlab/gitlab.rb
- 修改
external_url
字段,改成external_url 'http://example.cn'
(example.cn 是你自己的域名,记得在域名供应商那里配置好指向你的 gitlab 服务器 ip) - 修改
nginx['listen_port']
,改成nginx['listen_port'] = 888
,888 这个端口要跟上面的一致
- 修改
- 重启,执行以下两行命令
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
- ps:如果提示找不到命令的话,查一下
/usr/bin/gitlab-ctl
/opt/gitlab/bin/gitlab-ctl
,如果有,用sudo /usr/bin/gitlab-ctl reconfigure
也是可以的
- 设置本机nginx反向代理
vim /usr/local/nginx/conf/vhost/example.cn.conf
,修改成如下代码,并且重启 nginx , 执行nginx -s reload
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://0.0.0.0:888;
}
}
参考资料: GitLab CE 搭建小结 GitLab使用详解
开启 gitlab pages 服务
印象中 Gitlab CE系统版本在 9.x 以上的都有 pages 服务
准备事项
开放服务器端口
Gitlab Pages 服务默认: 8090
准备一个域名,最好是一个独立的域名 pages.example.com
,不要使用 gitlab
系统的域名
gitlab page 服务配置
启用服务,执行
vim /etc/gitlab/gitlab.rb
- 修改
gitlab_pages['enable']
字段,改成gitlab_pages['enable'] = true
- 修改
pages_external_url
字段,改成pages_external_url "http://pages.example.com"
- 修改
两种代理方式:(执行
vim /etc/gitlab/gitlab.rb
)- 方式一:开启 gitlab 的 Nginx,用本机的 Nginx 反向代理到 gitlab 的 Nginx
- 修改
pages_nginx['enable']
字段,改成pages_nginx['enable'] = true
- 修改
pages_nginx['listen_port']
字段,改成pages_nginx['listen_port'] = 888
vim /var/opt/gitlab/nginx/conf/gitlab-pages.conf
- 将
listen *:80;
改成listen *:888;
(888 要给上面的gitlab端口一致)
- 将
- 修改
- 方式二:直接开启 gitlab 的代理配置,用本机的 Nginx 反向代理 gitlab page 的服务(推荐使用这种)
- 修改
gitlab_pages['listen_proxy']
字段,改成gitlab_pages['listen_proxy'] = "127.0.0.1:888"
- 修改
- 方式一:开启 gitlab 的 Nginx,用本机的 Nginx 反向代理到 gitlab 的 Nginx
重启,执行以下两行命令
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
- ps:如果提示找不到命令的话,查一下
/usr/bin/gitlab-ctl
/opt/gitlab/bin/gitlab-ctl
,如果有,用sudo /usr/bin/gitlab-ctl reconfigure
也是可以的
设置本机nginx反向代理
vim /usr/local/nginx/conf/vhost/pages.example.cn.conf
,修改成如下代码,并且重启 nginx , 执行nginx -s reload
server
{
listen 80;
# 前面要加* 是因为启动 pages,会在给定域名前面增加多 group 的名字
server_name *.pages.example.cn;
charset utf-8;
location / {
client_max_body_size 1000m;
proxy_redirect off;
#以下确保 gitlab中项目的 url 是域名而不是 http://git,不可缺少
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 反向代理到 gitlab 内置的 nginx
proxy_pass http://127.0.0.1:888/;
index index.html index.htm;
}
}
安装Gitlab Runner
因为Gitlab Runner 会消耗大量内存,以及可能的安全隐患,尤其是以shell执行器的方式使用Gitlab Runner。如果有多台服务器可供使用,官方推荐的做法是将Runner安装到与Gitlab不同的另外的服务器上
ps:我选择直接用 yum 安装
注册 Gitlab Runner
使用官网文件进行注册
ps:我选择了将 runner 跑在 docker 上,所以需要在安装 runner 的服务器上安装 docker,并且拉取 alpine 镜像
创建项目
我在项目的根目录下创建了 docs 目录,把 jsdoc 打包出来的 html 文档都放里面
然后在根目录创建 .gitlab-ci.yml
文件,代码如下:
image: alpine:latest
pages:
stage: deploy
script:
- ls
- cp -r docs public
artifacts:
paths:
- public
tags:
- pages-tag
这样当你提交后将会在 pages-tag
同名的 Runner 上执行自动部署操作
成功后在项目的 pages 中会有如下图
参考资料: Exploring GitLab Pages | GitLab 中文文档教程 开启 Gitlab Pages 服务 Gitlab搭建与Gitlab Pages配置 Gitlab CI yaml官方配置文件翻译
升级 gitlab
升级指南
GitLab 社区版不支持直接跨版本升级,需按照官方指南一步步向上升级,若版本越旧,需要跨的版本就越多
这次是从 9.1.2-ce.0.el6.x86_64
升级到 gitlab-ce-12.8.7-ce.0.el6.x86_64
选择的路径是:
9.1.2
-> 9.1.10
-> 9.2.0
-> 9.2.6
-> 9.5.10
-> 10.8.7
-> 11.11.8
-> 12.0.12
-> 12.8.5
-> 12.8.7
备份
在原主机上执行备份命令,生成备份文档,路径为 /var/opt/gitlab/backups/
gitlab-rake gitlab:backup:create
关停核心服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
使用 yum 升级
因为一开始是直接用 yum 安装的,所以升级时也是直接用 yum 进行升级
在官网的 packages 中找到以上安装路径的安装包(ps:Distro/Version
都要对上,跟一开始的要一直,像我用的是 x.x.x-ce.0.el6.x86_64
,所有信息都要对上)
第一次要先拉脚本,执行:
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
然后安装升级:
sudo yum install gitlab-ce-9.1.10-ce.0.el6.x86_64
安装好后,可以使用 cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
查看版本号是否对上
为了保险起见,再执行,关闭gitlab 核心服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
然后再升级下一个版本
sudo yum install gitlab-ce-9.2.0-ce.0.el6.x86_64
一直到目标版本
过程遇到的问题
sudo yum install 的出错
执行以上命令后,报错:
Package gitlab-ce-9.1.10-ce.0.el6.x86_64.rpm is not signed
解决方案:
- 将
/etc/yum.conf
中gpgcheck=1
改为gpgcheck=0
- 执行:
sed -i'' 's/^gpgcheck=0/gpgcheck=1/' /etc/yum.repos.d/gitlab_gitlab-ce.repo
- 执行
vim /etc/yum.repos.d/gitlab_gitlab-ce.repo
- 把
gpgcheck=1
改为gpgcheck=0
- 把
gpgkey
都改成以下代码
- 把
gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey
https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg