前言
使用Omnibus包部署gitlab服务包含了很多额外的知识,请先通过google初步了解这个包里面所包含的各组件的作用,然后请通读并理解 GitLab Docker images 官方文档。
- omnibus Gitlab服务一键安装包
- gitlab-shell Gitlab命令行工具
- gitlab-workhorse 加速http请求处理
- logrotate 日志服务
- nginx Gitlab使用nginx作为反向代理服务器将请求转发到内部的unicorn web服务器
- postgresql 数据库
- reconfigrure 配置服务
- redis 键值存储和缓存服务
- registry Docker镜像存储服务
- sidekiq Ruby平台后台任务处理服务(Github地址)
- sshd sshd服务
- unicorn Ruby实现的Web服务器
部署和配置
创建启动脚本并运行
首次运行脚本,gitlab将生成的配置文件保存在主机映射的目录中。
# github.sh
docker run -d \ #后台运行
--hostname gitlab.freemanke.com \ #容器主机名称
--name gitlab \ #镜像名称
--publish 443:443 \ #https端口
--publish 9888:9888 \ #http端口
--publish 9999:9999 \ #registry对外服务端口
--publish 2200:22 \ #内部sshd服务端口
--restart always \
--volume /home/freeman/gitlab/config:/etc/gitlab \ #配置文件
--volume /home/freeman/gitlab/logs:/var/log/gitlab \ #日志文件
--volume /home/freeman/gitlab/data:/var/opt/gitlab \ #数据存储
gitlab/gitlab-ce:latest #官方镜像源
自定义配置文件
- 打开配置文件
sudo nano /home/freeman/gitlab/config/gitlab.rb
- 配置服务链接地址
external_url 'https://gitlab.freemanke.com'
该地址表明要配置的gitlab服务最终对外提供的服务地址,如果不是使用80和443默认端口,那么地址后需要添加端口,这个端口在容器运行时需要通过--publish
参数暴露出去,否则外网无法访问,例如:https://gitlab.freemanke.com:9888
,如果schema使用的是https,还需要配置一下两个参数,你需要将ssl证书和私钥放置在/home/freeman/gitlab/config/ssl/
目录下,并使用配置好的域名命名。本例中为:gitlab.freemanke.com.crt
, gitlab.freemanke.com.pem
。
################
# GitLab Nginx #
################
...
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key"
...
- 配置邮件服务器,此处需要修改两个段的配置,第一个段,需要设置发信和收信地址,此处的发信地址必须跟SMTP段中的账号一致,否则会报错
Net::SMTPFatalError: 553 Mail from must equal authorized user
。
############################
# gitlab.yml configuration #
############################
...
gitlab_rails['gitlab_email_from'] = 'Administrative@fhit.com.cn'
gitlab_rails['gitlab_email_display_name'] = 'fhit'
gitlab_rails['gitlab_email_reply_to'] = 'Administrative@fhit.com.cn'
...
第二个段为email server settings
配置,以下以163企业邮箱服务为例,注意其中的 gitlab_rails['smtp_authentication']
配置,有的邮箱服务需要使用"login"
。
################################
# GitLab email server settings #
################################
...
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qiye.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "service@fhit.com.cn"
gitlab_rails['smtp_password'] = "pwd"
gitlab_rails['smtp_authentication'] = "plain"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
...
- 配置registry外部服务地址,该
9999
端口号需要在运行容器时通过--publish
参数暴露到外网,否则将无法通过外网访问。
###############################
# Container registry settings #
###############################
registry_external_url 'https://gitlab.freemanke.com:9999'
此地址为registry最终对外提供的服务地址,通过web浏览器访问地址,检查该服务是否可用,
https://gitlab.freemanke.com:9999/v2/_catalog```
如果返回结果如下,说明该服务配置正常。
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Name":"catalog","Action":"*"}]}]}
### 重启服务
如果配置更改了,则需要重新启动服务,可以通过以下命令
docker restart gitlab
如果启动脚本中的参数有变动,需要重新构建容器
docker stop github
docker rm -f github
sudo bash github.sh
docker start github
## 定期数据备份
创建备份脚本 `backup-gitlab-to-oss.sh`
docker exec gitlab /opt/gitlab/bin/gitlab-rake gitlab:backup:create