我使用这 Docker映像来安装gitlab-ce
要配置它,可以将一个名为gitlab.rb的文件作为卷挂载到./gitlab.rb:/etc/gitlab/gitlab.rb:ro上。
你可以找到gitlab.rb 这里
在备份部分,我目前有以下内容:
## For setting up backups
## see https://gitlab.com/gitlab-org/omnibus-gitlab/blob/629def0a7a26e7c2326566f0758d4a27857b52a3/README.md#backups
# gitlab_rails['manage_backup_path'] = true
# gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_archive_permissions'] = 0644 # See: http://doc.gitlab.com/ce/raketasks/backup_restore.html#backup-archive-permissions
# gitlab_rails['backup_pg_schema'] = 'public'
gitlab_rails['backup_keep_time'] = 604800
# gitlab_rails['backup_upload_connection'] = {
# 'provider' => 'AWS',
# 'region' => 'eu-west-1',
# 'aws_access_key_id' => 'AKIAKIAKI',
# 'aws_secret_access_key' => 'secret123'
# }
# gitlab_rails['backup_upload_remote_directory'] = 'my.s3.bucket'
# gitlab_rails['backup_multipart_chunk_size'] = 104857600
# gitlab_rails['backup_encryption'] = 'AES256' # Turns on AWS Server-Side Encryption with Amazon S3-Managed Keys for backups如果您在代码中看到这个链接的建议,它会说:
# Scheduling a backup
To schedule a cron job that backs up your repositories and GitLab metadata, use the root user:
sudo su -
crontab -e
There, add the following line to schedule the backup for everyday at 2 AM:
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create问题
crontab -f开始吗?crontab -e修改什么文件?/etc/cron.d/my-backup-cron这样的cron文件,它会是相同的预期行为吗?发布于 2015-11-29 00:19:27
所以BigDong..。使用Docker意味着您将无法使用init系统在容器中运行crons。这是因为在CMD Dockerfile指令(或ENTRYPOINT)中指定的任何命令都将以PID1的形式在容器中运行。这就是为什么你不能service myservice start或类似的。
这里的“最佳实践”是在一个新的gitlab-ce容器中运行备份实用程序。这意味着您将使用docker run创建一个在主机上由cron触发的情况下运行的“备份”gitlab映像。那么您的备份命令实际上将在您的docker run命令中。听起来很混乱,所以让我来说明一下。就像这样:
docker run -d --rm gitlab-ce sh -c "/opt/gitlab/bin/gitlab-rake gitlab:backup:create"
如果您使用容器中的数据卷来持久化数据(或通过绑定挂载存储在主机上的特定目录上),则应该将其更改为:
docker run -d --rm --volumes-from gitlab-ce gitlab-ce sh -c "/opt/gitlab/bin/gitlab-rake gitlab:backup:create"
“备份”gitlab-ce映像使用--volumes-from gitlab-ce (或调用gitlab容器的任何内容)来访问容器中的数据卷(如果有的话)。但是,因为您专门使用S3作为备份存储,正如您在配置中所定义的那样,您不需要担心处理卷。我只是想澄清一下,因为使用卷比不使用要常见得多。
您可能可以从这方面了解正在发生的事情,但是对于那些不能运行的读者,您正在运行gitlab-ce映像,以便启动一个只运行单个命令来执行备份的新容器。实际上,它使用您的sh -c备份实用程序及其参数作为参数运行gitlab-rake。然后,您将在主机上使用crontab -e每天凌晨两点在主机设置为的时区运行此命令:
0 2 * * * docker run -d --rm gitlab-ce sh -c "...gitlab-rake..."
重要的是--rm选项。这告诉Docker删除创建的任何中间容器,这样就不会在docker ps -a中放置大量孤立的备份容器。
这里要考虑的另一个选项是将gitlab-ce容器的数据安装到主机上的绑定安装卷中,然后可以对主机上的数据进行操作。但是,我想在这里我强烈建议您使用应用程序提供的任何备份基础设施。在本例中,gitlab-rake实用程序。
另一个选项,如果由于任何原因而没有吸引力,将是创建一个cron容器,它使用docker run或docker exec在其他容器中运行您的任务。
关于你支持Gitlab的具体需要..。另一个需要考虑的选项是这个Gitlab码头图像。它内置了在特定时间点运行备份的能力,并且是我个人用来自动备份的。看起来新版本允许您直接备份到S3,而不是在主机上运行cron移动到S3。在这种情况下,在不使用外部资源的情况下,坞映像专门提供备份功能,这样做是可以的。一般来说,关注点的分离(备份是一个单独的关注点),您不应该将这些功能合并到一个容器中。人们的本能是把尽可能多的东西放进一个容器里,但是你会发现Docker作为一个微型服务提供商工作得最好。
最主要的是,Docker为你提供了很多关于完成任务的选择。它的部分功能是,通常有几种方法来完成一项任务,所以应该由您来决定哪种方法最适合您的情况。祝好运!
tl;博士使用docker run启动由主机上运行的cron作业触发的gitlab-ce备份实用程序(Gitlab)。
发布于 2017-02-27 14:54:50
根据Gitlab Doku的说法,您也可以通过以下方式来代替“码头运行”方法:
docker exec -t <your container name> gitlab-rake gitlab:backup:create发布于 2020-07-02 14:31:13
我使用以下解决方案通过go-crond实现了自动备份,go-crond附带了总括映像:
我正在设置这两个env:
BACKUP_CRONTAB = <<-EOF
SHELL=/bin/bash
0 2 * * * root gitlab-backup create # Daily at 2am (UTC)
EOF
GITLAB_POST_RECONFIGURE_SCRIPT = <<-EOF
echo "$BACKUP_CRONTAB" > "/backup-crontab"
go-crond "/backup-crontab" &
EOFGITLAB_POST_RECONFIGURE_SCRIPT中的脚本在启动时自动执行,并启动备份调度。
当然,这只是一个解决办法。这个GitLab问题跟踪适当解决方案的实现。
https://stackoverflow.com/questions/33961240
复制相似问题