首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在码头gitlab-ce中启用cron备份

如何在码头gitlab-ce中启用cron备份
EN

Stack Overflow用户
提问于 2015-11-27 16:12:56
回答 3查看 10.1K关注 0票数 6

我使用 Docker映像来安装gitlab-ce

要配置它,可以将一个名为gitlab.rb的文件作为卷挂载到./gitlab.rb:/etc/gitlab/gitlab.rb:ro上。

你可以找到gitlab.rb 这里

在备份部分,我目前有以下内容:

代码语言:javascript
复制
## 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

如果您在代码中看到这个链接的建议,它会说:

代码语言:javascript
复制
# 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

问题

  • 有没有办法在安装时做到这一点,而不是手动完成呢?
  • cron任务已经运行了吗?我们不应该从做crontab -f开始吗?
  • 命令crontab -e修改什么文件?
  • 要更改本教程的手动配置部分,使用像/etc/cron.d/my-backup-cron这样的cron文件,它会是相同的预期行为吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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 rundocker exec在其他容器中运行您的任务。

关于你支持Gitlab的具体需要..。另一个需要考虑的选项是这个Gitlab码头图像。它内置了在特定时间点运行备份的能力,并且是我个人用来自动备份的。看起来新版本允许您直接备份到S3,而不是在主机上运行cron移动到S3。在这种情况下,在不使用外部资源的情况下,坞映像专门提供备份功能,这样做是可以的。一般来说,关注点的分离(备份是一个单独的关注点),您不应该将这些功能合并到一个容器中。人们的本能是把尽可能多的东西放进一个容器里,但是你会发现Docker作为一个微型服务提供商工作得最好。

最主要的是,Docker为你提供了很多关于完成任务的选择。它的部分功能是,通常有几种方法来完成一项任务,所以应该由您来决定哪种方法最适合您的情况。祝好运!

tl;博士使用docker run启动由主机上运行的cron作业触发的gitlab-ce备份实用程序(Gitlab)。

票数 11
EN

Stack Overflow用户

发布于 2017-02-27 14:54:50

根据Gitlab Doku的说法,您也可以通过以下方式来代替“码头运行”方法:

代码语言:javascript
复制
docker exec -t <your container name> gitlab-rake gitlab:backup:create
票数 11
EN

Stack Overflow用户

发布于 2020-07-02 14:31:13

我使用以下解决方案通过go-crond实现了自动备份,go-crond附带了总括映像:

我正在设置这两个env:

代码语言:javascript
复制
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" &
  EOF

GITLAB_POST_RECONFIGURE_SCRIPT中的脚本在启动时自动执行,并启动备份调度。

当然,这只是一个解决办法。这个GitLab问题跟踪适当解决方案的实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33961240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档