zoukankan      html  css  js  c++  java
  • 迁移gitlab至docker容器过程与一些坑!

    以下操作皆在root用户下, 话不多说, 直接开干

    第一步: 备份原gitlab

    进入gitlab目录下, 我这边是: /home/git/gitlab

    执行命令: sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production

    备份完成后会在: /home/git/gitlab/tmp/backups 下产生一个备份的压缩文件, 如: 1566977804_2019_08_28_9.5.3_gitlab_backup.tar (其中 9.5.3 代表gitlab的版本, 备份文件只能恢复到相同版本的gitlab服务中)

    如果备份命令不起作用(可能是gitlab安装方式的区别), 请参考: http://blog.sina.com.cn/s/blog_6ff7a3b50102w3oj.html

    第二步: 安装docker

    centos7安装方式: yum install docker    (centos6请自行搜索安装docker方式)

    启动docker服务: service docker start

    第三步: 寻找合适的gitlab镜像

    进入docker镜像官网搜索gitlab: https://hub.docker.com/r/gitlab/gitlab-ce/tags

    根据刚才备份文件名中的版本号, 在tag列表中找到对应的镜像版本

    记下tag名字, 我这里是: 9.5.3-ce.0   (一会拉取镜像时有用)

    第四步: 拉取镜像

    执行命令: docker pull docker.io/gitlab/gitlab-ce:9.5.3-ce.0    (冒号后面就是刚刚找到的对应版本号)

    拉取完成后, 执行命令:  docker images    (查看本地镜像列表, 正常的话列表中出现gitlab镜像)

    第五步: 在宿主机上准备3个挂载目录

    mkdir -p /home/docker/gitlab/config

    mkdir -p /home/docker/gitlab/data

    mkdir -p /home/docker/gitlab/logs

    开放挂载目录权限: chmod -R 777 /home/docker/gitlab

    第六步: 使用gitlab镜像启动容器

    几个坑:

    1.如果宿主机的ssh远程登入端口为22的话, 最好将其修改为其他端口, 如: 2200 (否则gitlab安装完成后, 无法正常使用项目中的ssh地址进行clone/pull/push等操作) , 修改ssh端口的方案参考: https://www.cnblogs.com/rwxwsblog/p/5756894.html

    2.启动容器时使用的映射端口需要确保没有被占用, 否则将无法正常访问, 查看当前服务器监听的端口列表命令:  netstat -lnpt

    3.确保映射的宿主机端口是开放的(1.服务器防火墙  2.阿里云安全组策略), 修改防火墙参考: https://www.linuxidc.com/Linux/2019-06/159104.htm

    执行命令: docker run --name='gitlab' -d --publish 22:22 --publish 1443:443 --publish 18080:80 --restart always --privileged=true --volume /home/docker/gitlab/config:/etc/gitlab --volume /home/docker/gitlab/logs:/var/log/gitlab --volume /home/docker/gitlab/data:/var/opt/gitlab  <本地gitlab镜像id>

    执行命令: docker ps -a   (查看docker当前容器列表, 正常的话可以看到一个 gitlab 容器, 并且状态为 Up)

    第七步: 测试gitlab服务运行状态

    回到线下环境使用浏览器访问:  http://宿主机ip:18080 , 看到如下界面代表服务启动正常 (如果无法访问或者显示 502, 可能还在启动过程中, 稍等1分钟再刷新试试)

    第八步: 使用在gitlab容器中恢复备份文件

    首先将备份文件上传至宿主机 /home/docker/gitlab 目录下

    执行命令: cp /home/docker/gitlab/备份文件名 /home/docker/gitlab/data/backups/ 

    查看gitlab容器id:  docker ps -a 

    进入容器: docker exec -it <容器id> /bin/bash

    执行恢复: gitlab-rake gitlab:backup:restore BACKUP=1566977804_2019_08_28_9.5.3  force=yes   (其中橙色字体部分为备份文件名前缀, 这里文件名为: 1566977804_2019_08_28_9.5.3_gitlab_backup.tar)

    简直不敢信, 竟然没有报错...

    第九步: 查看恢复数据

    回到线下浏览器, 再次访问 http://宿主机ip:18080

    使用原有的git账号登入

    登入成功, 看到了所有项目! 太感动了...

    但是问题随之而来:

    进入项目首页时, 看到 clone 地址中的hostname变成了一串 随机字符, 如: git@s4fad15gs1a:xxxxxx/xxxxx.git (理想中应该是: git@git.xxx.com:xxxxx/xxxx.git), 并且无法使用此链接 clone 代码

    处理方案: 

    进入容器: docker exec -it <容器id>  /bin/bash

    编辑配置文件: vi /etc/gitlab/gitlab.rb 

      找到 external_url , 取消注释, 并修改为 external_url  'http://服务器的ip或域名'

      找到 gitlab_rails['gitlab_ssh_host'], 取消注释, 并修改为 gitlab_rails['gitlab_ssh_host'] = '服务器的ip或域名'

      保存

    更新配置:  gitlab-ctl reconfigure

    重新启动:  gitlab-ctl restart

    等待1分钟启动完成后, 再次回到线下查看, 发现地址对了

    第十步: 测试clone项目

    在本地机器上新建一个文件夹, 进入文件夹, 右键调出 Git Bash

    执行: git clone git@git.flow360.cn:cardmee/page_pc.git

    结果报错..

    由于服务器的更改, 原有的 ssh 授权信息已经失效了, 需要 找到 known_hosts 文件, 将里面原来的 授权记录一行删除, 保存

    保存后再次执行 git clone git@git.flow360.cn:cardmee/page_pc.git

    询问授权输入 yes , 回车

    正常下载代码中....

    最后2个坑:

    1. 我刚刚为了修改clone地址, 改了gitlab.rb文件, 然而当我重启容器后, 修改的配置又回到了默认状态, 这就很操蛋了...

    解决方案: 

    在宿主机下进入目录: cd /home/docker/gitlab/config 

    以同样的方式修改 gitlab.rb 文件, 保存

    重启gitlab容器: docker restart <容器id>

    测试通过

    2.gitlab占用内存过高的优化

    解决方案: 

    在宿主机下进入目录: cd /home/docker/gitlab/config 

    修改 gitlab.rb 文件

      找到 unicorn['worker_processes'] , 取消注释, 修改为 unicorn['worker_processes'] = 2

      找到 unicorn['worker_memory_limit_min'] , 取消注释, 修改为 unicorn['worker_memory_limit_min'] = "200 * 1 << 20"

       找到 unicorn['worker_memory_limit_max'], 取消注释, 修改为 unicorn['worker_memory_limit_max'] = "300 * 1 << 20"

       找到 sidekiq['concurrency'] , 取消注释, 修改为 sidekiq['concurrency'] = 5

      找到 postgresql['shared_buffers'] , 取消注释, 修改为 postgresql['shared_buffers'] = "128MB"

    保存

    重启容器: docker restart <容器id>

  • 相关阅读:
    quick cocos2dx 播放序列帧动画的实现
    PS学习笔记
    python自学笔记(十一)关于函数及书写格式
    python自学笔记(十)语句与数据结构应用
    python自学笔记(九)python练习题
    python自学笔记(八)python语句
    python自学笔记(七)排序与多级排序
    python自学笔记(六)二进制与位移
    python自学笔记(五)python文本操作
    python自学笔记(四)python基本数据类型之元组、集合、字典
  • 原文地址:https://www.cnblogs.com/imyjy/p/11425457.html
Copyright © 2011-2022 走看看