开启 Gitlab Pages 服务
开启 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 页面只能被授权的人看到,那么可以参考官方文档的配置。
I hope this is helpful, Happy hacking…