【Gitlab-CE】Docker中部署

本文介绍了如何在服务器 Centos7 上使用 Docker 搭建 Gitlab-CE。

老系统备份

  1. 首先需要登录网页查看当前的Gitlab版本,看到的是 13.11.1

  2. 然后切换到root

    1
    2
    sudo passwd root
    su
  3. 然后修改备份路径

    1
    2
    3
    # 创建备份用的目录
    mkdir -p /mnt/remote/gitlab_ce/bak_szc
    vim /etc/gitlab/gitlab.rb

    找到 gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" 取消注释,然后后面的路径修改为 /mnt/remote/gitlab_ce/bak_szc

  4. 停止服务

    1
    gitlab-ctl stop
  5. 将相关文件移动过去

    1
    mv /var/opt/gitlab/backups/* /mnt/remote/gitlab_ce/bak_szc/
  6. 然后应用配置并重启服务

    1
    2
    gitlab-ctl reconfigure
    gitlab-ctl start
  7. 然后备份数据

    1
    gitlab-rake gitlab:backup:create

    备份的结果在文件夹:/mnt/remote/gitlab_ce/bak_szc

  8. 备份配置文件和认证文件

    1
    2
    cp /etc/gitlab/gitlab.rb /mnt/remote/gitlab_ce/bak_szc/211222_gitlab.rb
    cp /etc/gitlab/gitlab-secrets.json /mnt/remote/gitlab_ce/bak_szc/211222_gitlab-secrets.json

    备份完成

新系统

  1. 安装 Docker

  2. 设置 Docker 的保存路径

  3. 设置 Docker 代理

  4. 预先拉取镜像

    1
    docker pull gitlab/gitlab-ce
  5. 运行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    docker run -d \
    --hostname hostname.com \
    --publish 443:443 --publish 80:80 --publish 222:22 \
    --name gitlab \
    --restart always \
    --volume gitlab_config:/etc/gitlab \
    --volume gitlab_logs:/var/log/gitlab \
    --volume gitlab_data:/var/opt/gitlab \
    --shm-size 256m \
    gitlab/gitlab-ce:13.11.1-ce.0

    这里指定老版本是因为我下面要恢复之前服务器的文件,官方要求必须使用相同版本的。

  6. 查看实时日志

    启动时间较长,可以看看当前状态

    1
    docker logs -f gitlab
  7. 通过浏览器访问

  8. 将之前备份的数据包使用 scp 下载到 docker挂载的卷宗的备份文件夹中,移动完成后路径是 gitlab_data/_data/backups/1643015420_2022_01_24_13.11.1_gitlab_backup.tar

    1
    2
    3
    4
    5
    6
    7
    8
    # 赋权限
    chmod 777 gitlab_data/_data/backups/1643015420_2022_01_24_13.11.1_gitlab_backup.tar
    # 进入容器
    docker exec -i -t gitlab /bin/bash
    # 容器内操作
    gitlab-rake gitlab:backup:restore BACKUP=1643015420_2022_01_24_13.11.1
    # 操作完成,退出容器
    exit

    这需要漫长的时间,可以再开个终端,先进行第十步的拉取镜像操作。

  9. 将之前备份的配置恢复

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cd gitlab_config/_data

    # 备份一下默认的配置文件 和 secrets 文件
    mv gitlab.rb gitlab.rb_bak
    mv gitlab-secrets.json gitlab-secrets.json_bak

    # 将两个文件直接放到相应的目录就可以了
    mv 211222_gitlab.rb gitlab.rb
    mv 211222_gitlab-secrets.json gitlab-secrets.json
    chmod 777 gitlab.rb
    chmod 777 gitlab-secrets.json
    1
    2
    3
    4
    5
    6
    # 进入容器
    docker exec -i -t gitlab /bin/bash
    gitlab-ctl reconfigure
    gitlab-ctl restart
    gitlab-rake gitlab:check SANITIZE=true
    gitlab-rake gitlab:doctor:secrets
  10. 然后就是更新Gitlab,参考 官方升级线路

    我的是 13.11.1 -> 13.12.15 -> 14.0.11 -> 14.1.8 -> 14.2.6

    1
    2
    3
    4
    docker pull gitlab/gitlab-ce:13.12.15-ce.0
    docker pull gitlab/gitlab-ce:14.0.11-ce.0
    docker pull gitlab/gitlab-ce:14.1.8-ce.0
    docker pull gitlab/gitlab-ce:14.2.6-ce.0

    升级步骤:

    1. 确保可以正常访问,且所有资源可以访问后,批处理任务完成后
    2. 进入当前实例,运行 gitlab-ctl stop 停止服务,然后退出
    3. 把当前的 gitlab 实例删掉
    4. 启动下一个版本
    5. 回到第一步,直到最新版本

    如何检查当前版本升级成功?

    1. 登录网页端
    2. 进入管理员设置
    3. Monitoring(监控) > Background Migrations(后台迁移)
    4. 等待列表中所有任务都完成。

    请注意 更新到 GitLab 14.2 或更高版本时,可能会出现数据库迁移失败并显示如下消息:

    1
    2
    3
    4
    StandardError: An error has occurred, all later migrations canceled:

    Expected batched background migration for the given configuration to be marked as 'finished', but it is 'active':
    {:job_class_name=>"CopyColumnUsingBackgroundMigrationJob", :table_name=>"push_event_payloads", :column_name=>"event_id", :job_arguments=>[["event_id"], ["event_id_convert_to_bigint"]]}

    这是因为上一个版本的迁移工作尚未完成导致的,重新启动上一个版本,然后等待所有任务都完成后再进行升级 官方参考链接

【Gitlab-CE】Docker中部署

https://biteax.com/b9d0c0e4.html

作者

石志超

发布于

2022-01-25

更新于

2023-09-27

许可协议