开启 Pages 服务

添加域名解析记录

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

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 缓存导致的。

在运行容器时默认开启

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 配置文件中修改如上所述的配置项,然后执行如下命令:

# 进入 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 上执行自动部署操作。

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 页面只能被授权的人看到,那么可以参考官方文档的配置。

I hope this is helpful, Happy hacking…