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:create2、gitlab遷移
遷移的整體思路是:
1、在新服務器上安裝相同版本的gitlab
2、將備份生成的備份文件發送到新服務器的相同目錄(備份文件目錄)下
3、gitlab恢復
1、停止相關數據連接服務,修改文件權限
gitlab-ctl stop unicorn gitlab-ctl stop sidekiq #修改文件權限。 chmod 777 /var/opt/gitlab/backups/1530156812_2018_06_28_10.8.4_gitlab_backup.tar2、從備份文件恢復
#從1530156812_2018_06_28_10.8.4編號備份中恢復 gitlab-rake gitlab:backup:restore BACKUP=1530156812_2018_06_28_10.8.43、啟動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 restart5、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-railsDocker部署方式遷移
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。
解決方法:
修改:/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'] = truegitlab_rails['smtp_address'] = "smtp.263.net"gitlab_rails['smtp_port'] = 25gitlab_rails['smtp_user_name'] = "XXX@jurassic.com.cn"gitlab_rails['smtp_password'] = "MMMMMM"gitlab_rails['smtp_authentication'] = "login"gitlab_rails['smtp_enable_starttls_auto'] = truegitlab_rails['smtp_tls'] = truegitlab_rails['gitlab_email_from'] = 'YYYY@jurassic.com.cn'但是郵件發送不出去。
定位問題:
#進入docker容器docker exec -it gitlab /bin/bash #運行測試郵件命令 #1、進入 gitlab-rails console #2、測試 Notify.test_email('tttt@jurassic.com.cn', 'Message Subject', 'Message Body').deliver_now結果如下:
SocketError: getaddrinfo: Temporary failure in name resolutionfrom /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總結
- 上一篇: OAuth2(一)——核心概念
- 下一篇: OAuth2(二)——实现