gitlab 镜像分为两个版本:gitlab-ce 社区版(我们使用这个版本)、gitlab-ee 企业收费版
docker镜像地址:https://hub.docker.com/r/gitlab/gitlab-ce
gitlab docker镜像使用文档:https://docs.gitlab.com/omnibus/docker/README.html
gitlab 帮助文档:https://about.gitlab.com/get-help/
[vagrant@gitlabServer ~]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:4d:77:d3 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 85838sec preferred_lft 85838sec
inet6 fe80::5054:ff:fe4d:77d3/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:89:b0:0c:3b brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
6: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:fb:e2:0f brd ff:ff:ff:ff:ff:ff
inet 192.168.1.101/24 brd 192.168.1.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fefb:e20f/64 scope link
valid_lft forever preferred_lft forever
# 找一个物理主机能ping 通的ip 192.168.1.101
$ sudo mkdir -p /opt/data/gitlab && sudo chmod -R 777 /opt/data && \
docker run -d \
--publish 443:443 --publish 80:80 --publish 222:22 \
--hostname 192.168.1.101 \
--restart always \
--volume /opt/data/gitlab/config:/etc/gitlab \
--volume /opt/data/gitlab/logs:/var/log/gitlab \
--volume /opt/data/gitlab/data:/var/opt/gitlab \
--name gitlab \
gitlab/gitlab-ce:13.7.4-ce.0
# --hostname 192.168.1.101 没有域名的需求可以不指定hostname,后期可以改配置文件设置()
docker 启动需要花费点时间,稍等几分钟在访问
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml # 能配置web服务相关的信息
vi /etc/gitlab/gitlab.rb # 能配置邮件服务器、数据备份和恢复
或者使用挂载到主机的目录 vi /opt/data/gitlab/config/gitlab.rb
浏览器访问gitlab 服务,出现502
使用docker logs查看gitlab容器中运行情况
docker logs -f gitlab
修改目录权限
sudo chmod -R 777
如果还是不可以,就重启一下gitlab容器
docker restart gitlab
访问 http://192.168.1.101
登陆
我这里就不注册了,直接教你如何开启smtp服务
# 配置文件内容
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '你的QQ邮箱'
gitlab_rails['gitlab_email_display_name'] = '陈洋'
gitlab_rails['gitlab_email_reply_to'] = '你的QQ邮箱'
gitlab_rails['gitlab_email_subject_suffix'] = ''
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com" # 不同邮件服务提供商这里不一样,比如163邮箱的是 smtp.163.com
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "你的QQ邮箱(带@的)"
gitlab_rails['smtp_password'] = "授权码,不是邮箱密码"
gitlab_rails['smtp_domain'] = "smtp.qq.com" # 不同邮件服务提供商这里不一样,比如163邮箱的是 smtp.163.com
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
# 重启gitlab
$ docker restart gitlab
# 测试发送邮件
[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-rails console
--------------------------------------------------------------------------------
Ruby: ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]
GitLab: 13.7.4 (2f14978e280) FOSS
GitLab Shell: 13.14.0
PostgreSQL: 12.4
--------------------------------------------------------------------------------
Loading production environment (Rails 6.0.3.3)
irb(main):001:0> Notify.test_email('[email protected]','xxx','xxx').deliver_now
查看邮箱嗯看到邮件,说明gitlab配置邮件服务器成功了
测试邮件时报错501
Net::SMTPSyntaxError: 501 mail from address must be same as authorization user
原因:配置文件gitlab.rb中### Email Settings没有设置邮箱地址,意思就是发送邮件的地址和SMTP认证的账号必须一致
解决办法:配置好### Email Settings即可
测试邮件时报错SSLError
原因:此类报错通常是SMTP服务器没有使用SSL,但是配置却开启了
解决办法:注释掉以下配置
# gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = true
注意:通过备份文件恢复gitlab必须保证两台主机的gitlab版本一致,否则会提示版本不匹配
[vagrant@gitlabServer ~]$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[vagrant@gitlabServer ~]$ docker exec -it gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
13.7.4
# /opt/data/gitlab/config/gitlab.rb
gitlab_rails['manage_backup_path'] = true # 开启备份
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" # 设置备份数据的目录
# 需要注意的是backup_path 的路径是容器内的路径,所以最好是写我们挂载到主机的目录(比如 --volume /opt/data/gitlab/data:/var/opt/gitlab)
该项定义了默认备份出文件的路径,可以通过修改该配置,并执行gitlab-ctl reconfigure
或者gitlab-ctl restart
或者docker restart gitlab
重启服务生效。
[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-ctl reconfigure
[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-ctl restart
[vagrant@gitlabServer ~]$ docker restart gitlab
[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-rake gitlab:backup:create
可以解压查看,会发现备份的还是比较全面的,数据库、repositories、 build.upload等分类还是比较清晰的。
scp /opt/data/gitlab/data/backups/1610783686_2021_01_16_13.7.4_gitlab_backup.tar [email protected]:/Users/haitao/Desktop
# linux cron表达式每位的含义
添加定时任务 : crontab -e
基本格式 :
* * * * * command
分 时 日 月 周 命令
[vagrant@gitlabServer ~]$ crontab -e
0 3 * * * docker exec -it gitlab gitlab-rake gitlab:backup:create # 每天3点进行备份
防止每天执行备份,有目录被爆满的风险,打开gitlab.rb配置文件
设置备份保留7天(7360024=604800),秒为单位,如果想增大或减小,可以直接在该处配置,并通过gitlab-ctl restart重启服务生效。
备份完成,会在备份目录中生成一个当天日期的tar包。
sudo mkdir -p /opt/data/gitlab && sudo chmod -R 777 /opt/data && \
docker run -d \
--publish 443:443 --publish 80:80 --publish 222:22 \
--hostname 192.168.1.102 \
--restart always \
--volume /opt/data/gitlab/config:/etc/gitlab \
--volume /opt/data/gitlab/logs:/var/log/gitlab \
--volume /opt/data/gitlab/data:/var/opt/gitlab \
--name gitlab \
gitlab/gitlab-ce:13.7.4-ce.0
# 修改备份文件路径(这里不想开启备份,所以只打开一个注释)
[vagrant@gitlabServerBackup ~]$ sudo chmod -R 777 /opt/data/gitlab/
[vagrant@gitlabServerBackup ~]$ sed -i "s/# gitlab_rails\['backup_path'\]/gitlab_rails['backup_path']/g" /opt/data/gitlab/config/gitlab.rb
任选一个命令,重启服务使配置生效
[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-ctl reconfigure
[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-ctl restart
[vagrant@gitlabServer ~]$ docker restart gitlab
如果是台新搭建的主机,不需要操作,理论上不停这两个服务也可以。停这两个服务是为了保证数据一致性。
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-ctl stop unicorn
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up
# 使用 scp 或者 rsync 都可以复制文件。但 rsync 功能更强大 复制过去的文件权限都还保留着
[vagrant@gitlabServer ~]$ sudo chmod -R 777 /opt/data/
[vagrant@gitlabServer ~]$ cd /opt/data/gitlab/data/backups/
[vagrant@gitlabServer backups]$ rsync -avz 1610783686_2021_01_16_13.7.4_gitlab_backup.tar vagrant:192.168.1.102:/opt/data/gitlab/data/backups
# 如果backups 目录下只有一个文件可以直接执行
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-rake gitlab:backup:restore
# 如果有多个文件,可以指定你想恢复到那个备份文件
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=1610783686_2021_01_16_13.7.4 # _gitlab_backup.tar 省略后缀
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G3ejuruE-1610788538253)(.gitlab的搭建和使用_imgs/image-20210116165508035.jpeg)]
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-ctl start unicorn
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-ctl start sidekiq
# 或
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-ctl restart
[vagrant@gitlabServerBackup ~]$ sudo chmod -R 777 /opt/data/
[vagrant@gitlabServerBackup ~]$ docker restart gitlab
修改文件的权限,然后重启gitlab服务
[vagrant@gitlabServerBackup ~]$ docker logs gitlab
[vagrant@gitlabServerBackup ~]$ sudo chmod -R 777 /opt/data/
[vagrant@gitlabServerBackup ~]$ docker restart gitlab
使用浏览器访问gitlab 服务