Gitlab运维

通过gitlab命令进行的迁移

自建的Gitlab服务器常常会因为使用时间的增长,其空间容量等硬件需求都需要升级,或者迁移至更高配置的服务器上。备份、迁移、恢复、升级过程如下

1、gitlab备份

备份时需要保持gitlab处于正常运行状态,执行gitlab-rake进行备份。

gitlab-rake gitlab:backup:create

备份命令会在***/var/opt/gitlab/backups***目录下创建一个名称类似为1530156812_2018_06_28_10.8.4_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1530156812_2018_06_28_10.8.4是备份创建的日期

/etc/gitlab/gitlab.rb 配置文件须备份

/var/opt/gitlab/nginx/conf nginx配置文件

/etc/postfix/main.cfpostfix 邮件配置备份

1.1 修改备份文件目录

可以通过***/etc/gitlab/gitlab.rb***配置文件来修改默认存放备份文件的目录

gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

1.2 设置备份过期时间

gitlab_rails['backup_keep_time'] = 604800        #以秒为单位

1.3 gitlab自动备份

0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create

2、gitlab迁移

迁移的整体思路是:

1、在新服务器上安装相同版本的gitlab

2、将备份生成的备份文件发送到新服务器的相同目录(备份文件目录)下

3、gitlab恢复

1、停止相关数据连接服务,修改文件权限

扫描二维码关注公众号,回复: 13128683 查看本文章
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
#修改文件权限。
chmod 777 /var/opt/gitlab/backups/1530156812_2018_06_28_10.8.4_gitlab_backup.tar

2、从备份文件恢复

#从1530156812_2018_06_28_10.8.4编号备份中恢复
gitlab-rake gitlab:backup:restore BACKUP=1530156812_2018_06_28_10.8.4    

3、启动gitlab

gitlab-ctl start          

在实际情况中访问gitlab可能是用域名访问,我们可以修改gitlab配置文件中的url再进行备份,这样就不会影响迁移过程,恢复完成后需要进行的只是修改域名对应的dns解析ip地址

4、gitlab升级

gitlab-ctl stop        #关闭gitlab服务
gitlab-rake gitlab:backup:create        #备份

#安装成功后重新加载配置并启动
gitlab-ctl reconfigure
gitlab-ctl restart

5、gitlab更改默认的nginx

vim /etc/gitlab/gitlab.rb
nginx['enable'] = false        #不启用nginx

检查默认nginx配置文件,并迁移至新Nginx服务

/var/opt/gitlab/nginx/conf/nginx.conf #nginx配置文件,包含gitlab-http.conf文件

/var/opt/gitlab/nginx/conf/gitlab-http.conf #gitlab核心nginx配置文件

重启 nginx、gitlab服务

gitlab-ctl restart
systemctl restart nginx.service

#访问可能出现报502。原因是nginx用户无法访问gitlab用户的socket文件。 重启gitlab需要重新授权
chmod -R o+x /var/opt/gitlab/gitlab-rails

Docker部署方式迁移

Docker部署方式一般会把gitlab的数据使用挂载目录的方式存储。

            "Volumes": {
    
    
                "/etc/gitlab": {
    
    },
                "/var/log/gitlab": {
    
    },
                "/var/opt/gitlab": {
    
    }
            },

把对应的目录绑定到新的服务的挂载目录上。

迁移对应的数据文件。

       "Mounts": [
            {
    
    
                "Type": "volume",
                "Name": "gitlab_config",
                "Source": "/var/lib/docker/volumes/gitlab_config/_data",
                "Destination": "/etc/gitlab",
                "Driver": "local",
                "Mode": "rw",
                "RW": true,
                "Propagation": ""
            },
            {
    
    
                "Type": "volume",
                "Name": "c4475269eda4c25ce95c5c8c353f12ee9acd52e8ccd66b1fbb2cf29acd011b63",
                "Source": "/var/lib/docker/volumes/c4475269eda4c25ce95c5c8c353f12ee9acd52e8ccd66b1fbb2cf29acd011b63/_data",
                "Destination": "/var/log/gitlab",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
    
    
                "Type": "volume",
                "Name": "gitlab_data",
                "Source": "/var/lib/docker/volumes/gitlab_data/_data",
                "Destination": "/var/opt/gitlab",
                "Driver": "local",
                "Mode": "rw",
                "RW": true,
                "Propagation": ""
            }
        ],

注意

1、实际上docker模式上通过复制目录方式,会导致权限问题,因此最好通过备份还原方式。

2、还原的时候,保证 external_url ‘http://192.168.1.XX’ ,参数设置正确,这个参数影响 代码仓库的host。

git-url

解决方法:

修改:/var/opt/gitlab/gitlab-rails/etc/gitlab.yml -> /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml 文件中host属性,然后重启服务。

## Web server settings (note: host is the FQDN, do not include http://)
host: 192.168.1.99
port: 80
https: false

问题:

1、权限问题

日志中提到了

docker exec -it gitlab update-permissions  

docker restart gitlab

但是因为权限问题,容器启动之后很快就会关闭,所以执行第一条命令会提示容器未运行,

最好的解决办法就是,启动容器之后,迅速执行 docker exec -it gitlab update-permissions  ,然后迅速执行docker restart gitlab,就成功了,亲测有效。别等到容器挂了才执行。

docker 运行gitlab,使用NFS,会有权限问题,参考:

https://docs.gitlab.com/ee/administration/nfs.html
https://stackoverflow.com/questions/21790337/attaching-network-storage-to-a-docker-container-for-gitlab-ssh-issue
https://forum.gitlab.com/t/running-gitlab-ce-from-the-docker-image-saving-data-onto-nfs-share-acl-problems/9155/2
https://docs.gitlab.com/omnibus/docker/README.html#linux-acl-issues

2、邮件不能正常发送

我们在安装gitlab时,会配置邮件发送信息。

docker配置方式如下:

   environment:
     TZ: 'Asia/Shanghai'
     GITLAB_OMNIBUS_CONFIG: |
       external_url 'http://192.168.1.XX'
       gitlab_rails['time_zone'] = 'Asia/Shanghai'
       # 需要配置到 gitlab.rb 中的配置可以在这里配置,每个配置一行,注意缩进。
       # 比如下面的电子邮件的配置:
       gitlab_rails['smtp_enable'] = true
       gitlab_rails['smtp_address'] = "smtp.263.net"
       gitlab_rails['smtp_port'] = 25
       gitlab_rails['smtp_user_name'] = "[email protected]"
       gitlab_rails['smtp_password'] = "MMMMMM"
       gitlab_rails['smtp_authentication'] = "login"
       gitlab_rails['smtp_enable_starttls_auto'] = true
       gitlab_rails['smtp_tls'] = true
       gitlab_rails['gitlab_email_from'] = '[email protected]'

但是邮件发送不出去。

定位问题:

#进入docker容器
 docker exec -it gitlab /bin/bash
#运行测试邮件命令
#1、进入
gitlab-rails console
#2、测试
Notify.test_email('[email protected]', 'Message Subject', 'Message Body').deliver_now

结果如下:

SocketError: getaddrinfo: Temporary failure in name resolution
    from /opt/gitlab/embedded/lib/ruby/2.4.0/net/smtp.rb:539:in `initialize'
    from /opt/gitlab/embedded/lib/ruby/2.4.0/net/smtp.rb:539:in `open'
    from /opt/gitlab/embedded/lib/ruby/2.4.0/net/smtp.rb:539:in `tcp_socket'
    from /opt/gitlab/embedded/lib/ruby/2.4.0/net/smtp.rb:549:in `block in do_start'
    from /opt/gitlab/embedded/lib/ruby/2.4.0/timeout.rb:93:in `block in timeout'
    from /opt/gitlab/embedded/lib/ruby/2.4.0/timeout.rb:103:in `timeout'
    from /opt/gitlab/embedded/lib/ruby/2.4.0/net/smtp.rb:548:in `do_start'
    from /opt/gitlab/embedded/lib/ruby/2.4.0/net/smtp.rb:518:in `start'

定位问题:

应该是dns问题,编辑dns

vi resolv.conf

里面有:

namesever 127.0.0.11

再增加一个

namesever 192.168.1.XX

测试OK

3、Failed to parse advertise address

alertmanager down with “create memberlist: Failed to get final advertise address: Failed to parse advertise address “””

参考:https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/3705

In /opt/gitlab/sv/alertmanager/run add the option --cluster.advertise-address=127.0.0.1:9093

-  /opt/gitlab/embedded/bin/alertmanager --web.listen-address=localhost:9093 --storage.path=/var/opt/gitlab/alertmanager/data --config.file=/var/opt/gitlab/alertmanager/alertmanager.yml
+  /opt/gitlab/embedded/bin/alertmanager --cluster.advertise-address=127.0.0.1:9093 --web.listen-address=localhost:9093 --storage.path=/var/opt/gitlab/alertmanager/data --config.file=/var/opt/gitlab/alertmanager/alertmanager.yml

猜你喜欢

转载自blog.csdn.net/demon7552003/article/details/107725655