开启 Gitlab Pages 服务

开启 Gitlab Pages 服务

在团队内部没有独立的文档管理系统时,我们可以利用 Gitlab 提供的 Pages 服务来实现项目的文档或演示页面的发布,你只需要修改一些配置文件即可开启这项功能。

开启 Pages 服务

添加域名解析记录

将域名的 * 记录解析到 Gitlab 服务器对应的 IP 地址。

验证解析结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Georges:~ george$ dig *.example.com

; <<>> DiG 9.10.6 <<>> *.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25903
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;*.example.com. IN A

;; ANSWER SECTION:
*.example.com. 599 IN A 192.168.2.88

;; Query time: 909 msec
;; SERVER: 192.168.5.1#53(192.168.5.1)
;; WHEN: Fri May 31 14:51:10 CST 2019
;; MSG SIZE rcvd: 59

如果确定已经解析了,但是 IP 仍然不是预期的 IP 那么可能是 DNS 缓存导致的。

在运行容器时默认开启

1
2
3
4
5
6
7
8
9
10
docker run --detach \
--hostname example.com \
--env GITLAB_OMNIBUS_CONFIG="external_url 'https://example.com'; gitlab_rails['lfs_enabled'] = true; nginx['redirect_http_to_https'] = true; pages_external_url 'https://example.com'; gitlab_pages['enable'] = true; gitlab_pages['inplace_chroot'] = true; pages_nginx['enable'] = true; nginx['ssl_certificate'] = '/etc/gitlab/ssl/fullchain.cer'; nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/example.com.key'; pages_nginx['ssl_certificate'] = '/etc/gitlab/ssl/fullchain.cer'; pages_nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/example.com.key';" \
--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 \
gitlab/gitlab-ce:latest
  • gitlab_pages[‘enable’] = true; 开启 Pages 服务
  • pages_external_url ‘https://example.com'; 替换成你自己的域名
  • gitlab_pages[‘inplace_chroot’] = true; 以Docker container 方式运行的 Gitlab 必须开启此项
  • pages_nginx[‘enable’] = true; 开启 Pages 服务的 vhost,该项开启后将会在 /var/opt/gitlab/nginx/conf 目录下生成独立的名为 gitlab-pages.conf Nginx 配置文件。
  • nginx[‘ssl_certificate’] = ‘/etc/gitlab/ssl/fullchain.cer’;
  • nginx[‘ssl_certificate_key’] = ‘/etc/gitlab/ssl/example.com.key’;
  • pages_nginx[‘ssl_certificate’] = ‘/etc/gitlab/ssl/fullchain.cer’;
  • pages_nginx[‘ssl_certificate_key’] = ‘/etc/gitlab/ssl/example.com.key’;

最后四项配置分别用于指定 Gitlab 主站 和 Pages 服务的 HTTPS 证书路径。

可以看到我们将 Gitlab 的运行参数附加到启动容器的命令环境中。免去再次配置的麻烦。如果你已经运行了容器,只需在 gitlab.rb 配置文件中修改如上所述的配置项,然后执行如下命令:

1
2
3
4
# 进入 Gitlab 容器
docker exec -it gitlab /bin/bash
# 执行生成服务配置文件命令
gitlab-ctl reconfigure

Pages 服务的域名如果要开启 HTTPS 的话,一定要使用通配证书,关于如何获取,请参考我的博文《为你的域名申请统配证书》

验证结果

创建项目

访问创建项目页面然后和点击 Create from template 并点击列表中 Pages/Plain HTML 项的 Use template 按钮来创建项目。

从模板创建项目

为项目开启 Runner

访问项目设置 > CI/CD 展开 Runners 项的配置,查看是否有可用 Runner 如果有,则记录下 Tag,如果没有则参考我的文章《DevOps 之注册 Gitlab Runner》 进行注册。

修改 .gitlab-ci.yml

修改项目的 CI/CD 配置文件,添加 tags 配置项,将刚才 Runner 的 Tag 填入这里。这样当你提交后将会在 Tag 同名的 Runner 上执行自动部署操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
image: alpine:latest

pages:
stage: deploy
script:
- echo 'Nothing to do...'
artifacts:
paths:
- public
only:
- master
tags:
- pages

如果你的 Runner 是 Docker 或其他容器类的,则需要定义 image 选项,如果是 shell、ssh 则可以忽略。另外值得一提的是 artifacts 的选项,该选项是用于定义,将部署结果上传到 Gitlab 的配置,例如 Golang 项目编译后生成的二进制文件等,详细的使用说明后续将会做更多详细介绍。

等待任务执行完成后,则可以访问项目设置 > Pages 页面,查看 Pages 服务生成的 URL

查看项目的 Pages 服务配置

关于访问控制

如果你希望你的 Pages 页面只能被授权的人看到,那么可以参考官方文档的配置。

评论