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>

  • 相关阅读:
    eclipse下c/cpp " undefined reference to " or "launch failed binary not found"问题
    blockdev 设置文件预读大小
    宝宝语录
    CentOS修改主机名(hostname)
    subprocess报No such file or directory
    用ldap方式访问AD域的的错误解释
    英特尔的VTd技术是什么?
    This virtual machine requires the VMware keyboard support driver which is not installed
    Linux内核的文件预读详细详解
    UNP总结 Chapter 26~29 线程、IP选项、原始套接字、数据链路访问
  • 原文地址:https://www.cnblogs.com/imyjy/p/11425457.html
Copyright © 2011-2022 走看看