Dim*_*iwa 5 backup cron crontab docker
我正在使用这个 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
Run Code Online (Sandbox Code Playgroud)
如果您在代码中看到推荐的链接,则说:
# 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
Run Code Online (Sandbox Code Playgroud)
crontab -f吗?crontab -e修改了什么文件?/etc/cron.d/my-backup-cron它是否会是相同的预期行为?所以,BigDong ...使用Docker意味着你不会有一个可用于在容器中运行crons的init系统.这是因为在CMDDockerfile指令(或ENTRYPOINT)中指定的任何命令将在容器内作为PID1运行.这就是你不能service myservice start或类似的原因.
这里的"最佳实践"是在新的gitlab-ce容器中运行备份实用程序.这意味着您将用于docker run创建一个"备份"gitlab-ce映像,您可以在主机上由cron触发的某些场合运行该映像.然后你的备份命令实际上就在你的docker run命令中.这听起来令人困惑,所以让我来说明一下.像这样的东西:
docker run -d --rm gitlab-ce sh -c "/opt/gitlab/bin/gitlab-rake gitlab:backup:create"
如果您正在使用容器中的数据卷来保存数据(或通过bind-mount存储在主机上的特定目录中),则应将其更改为:
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-ce容器)以访问容器中的数据卷(如果有).但是,由于您专门使用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实用程序.
如果由于某种原因这不具吸引力,另一种选择是创建一个使用docker run或docker exec在其他容器中运行任务的cron 容器.
关于你备份Gitlab的特定需求......另一个需要考虑的选择就是这个Gitlab docker镜像.它内置了在某个特定时间点运行备份的能力,也是我个人用于自动备份的功能.看起来新版本允许您直接备份到S3,而不是在主机上运行cron以转移到S3.在这种情况下,如果docker镜像专门提供了不使用外部资源进行备份的功能,那么这样做就可以了.从广义上讲,关注点分离(备份是一个单独的问题),您不应该将这些功能组合到一个容器中.人们的本能是将尽可能多地放入容器中,但你会发现Docker最适合作为微服务提供者.
主要的是Docker在完成任务方面为您提供了很多选择.它的部分功能在于通常有多种方法可以完成单个任务,因此您需要确定哪种方法最适合您的情况.祝好运!
tl; dr用于docker run启动由主机上运行的cronjob触发的提供的gitlab-ce备份实用程序(gitlab-rake).
小智 9
根据Gitlab Doku的说法,您可以使用" docker run"方法,而不仅仅是:
docker exec -t <your container name> gitlab-rake gitlab:backup:create
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6577 次 |
| 最近记录: |