距離上次gitlab升級快過去一年了,期間gitlab已更新了好多新版本,都沒有進行升級。理由很簡單,因為升級很麻煩,秉着能用就先用着的想法。但是最近gitlab接連發出之前舊版本有安全漏洞,看到的公告是:《GitLab 叕發布安全補丁 12.0.3, 11.11.5 和 11.10.8,請即刻升級》,都出現“叕”字了(好幾個“又”了,哈哈),說明不得不升級了,畢竟代碼是公司的核心資產。
那么說干就干,首先去gitlab官網查看升級文檔,看需要升級哪些東西。我這gitlab之前是用源碼包安裝的,版本是10.8.7,需要升級到11.11.5(11版本的最高版本),最后才能升級到最新的12版本。總結對比了下,需要做如下升級:
軟件 | 10.8.7版本 | 11.11.5版本 |
Ruby version | 2.4.4p96 | 2.5.3p105 |
Gem version | 2.6.14.1 | 2.7.6 |
Bundler version | 1.16.3 | 1.17.3 |
Rake version | 12.3.1 | 12.3.1 |
Redis version | 4.9.104 | 4.9.104 |
Git version | 2.18.0 | 2.21.x |
sidekiq version | 5.0.5 | 5.0.5 |
Go version | go1.9.6 | go1.11.5 |
gitlab version | 10.8.7 | 11.11.5 |
Gitlab shell version | 7.1.2 | 9.1.0 |
node version | v8.9.4 | v8.10.x |
yarn version | --- | v1.10.x |
為了在升級過程中不影響gitlab的正常使用(升級過程中需要停機,升級時長未知,升級過程會不會出問題也未知),所以根據現有的gitlab服務器環境做了鏡像和快照,然后根據鏡像和快照克隆了一個完全一樣的環境;這些升級操作先全在克隆的環境中進行,就算出現問題也不影響舊環境的正常使用,待這邊流程跑通了后在舊的gitlab服務器上進行升級。在升級完這些軟件,進行升級gitlab的時候,出現問題了。。。。。主要是在更新gitlab源碼的時候由於它官網是在國外,更新的時候很慢,然后就一直報超時。還有一個問題是,我看到官網說gitlab從12版本后就不在支持mysql數據庫了,這。。。。
正好最近公司想把gitlab從騰訊雲上遷移回內網,而我上次升級的時候就想把源碼包安裝的gitlab換成rpm包的安裝方式,這樣以后升級就沒那么麻煩,不用升級一大堆軟件了,直接yum update就好。那就借這次機會嘗試下,思路:現在內網的一台服務器上直接裝rpm版的11.11.5,把數據遷移過來后再升級到12版本。(這里有個難點,那就是需要把MySQL的數據遷移到postgresql,這里我百度了下,有mysql數據遷移到postgresql的成功案例,那么就說明這條路應該是行的通的)
下面這部分是源碼包升級時的操作記錄:
1、停止服務: service gitlab stop 2、升級ruby: #mkdir /tmp/ruby && cd /tmp/ruby #curl --remote-name --progress https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.3.tar.gz #tar xvf ruby-2.5.3.tar.gz && cd ruby-2.5.3 #./configure --prefix=/usr/local/ruby ----disable-install-rdoc && make && make install 3、升級bundler: #gem install bundler --no-document --version '< 2' 4、檢測gitlab環境基礎: $bundle exec rake gitlab:env:info RAILS_ENV=production 注:此時會提示rake-12.3.1沒有安裝,按報錯信息進行安裝,bundle install(耗時會比較久) 此步安裝rbnacl-libsodium 1.0.11會報錯 解決辦法:https://gitlab.com/Fenlly/gitlab-ce/commit/2af2140ceeb2e8dff7c15a23195f5050a11a6ab4 可能會報: Depending on your version of ruby, you may need to install ruby rdoc/ri data: <= 1.8.6 : unsupported = 1.8.7 : gem install rdoc-data; rdoc-data --install = 1.9.1 : gem install rdoc-data; rdoc-data --install >= 1.9.2 : nothing to do! Yay! 解決辦法: #gem install rdoc-data 5、升級go: yum -y update golang 6、升級node: #npm install -g n #n stable #node -v --查看node版本 7、安裝yarn: #wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo #yum -y install yarn #yarn -v 8、升級git: #cd /usr/local/src #curl --remote-name --location --progress https://www.kernel.org/pub/software/scm/git/git-2.21.0.tar.gz #tar xvf git-2.21.0.tar.gz -C /tmp/git #cd /tmp/git/git-2.21.0 && ./configure --prefix=/usr/local/git #make && make install #git --version --查看升級后的git版本 9、更新gitlab遠程分支: #su - git $git fetch --all --prune --這一步會很慢,可以給服務器掛上代理在嘗試(掛代理的方法可看我的另一篇博客:https://www.cnblogs.com/liangyou666/p/11231743.html)
下面則是轉為rpm包安裝的操作記錄:
1、內網服務器上安裝gitlab 11.11.5版本:
[root@dev ~]#yum install -y curl policycoreutils-python openssh-server
[root@dev ~]#systemctl enable sshd [root@dev ~]#systemctl start sshd [root@dev ~]#firewall-cmd --permanent --add-service=http [root@dev ~]#systemctl reload firewalld [root@dev ~]#yum install postfix [root@dev ~]#systemctl enable postfix [root@dev ~]#systemctl start postfix [root@dev ~]#curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash [root@dev ~]#cd /usr/local/src [root@dev src]#wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-11.11.5-ce.0.el7.x86_64.rpm
--國內清華大學源站下載地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ [root@dev src]#yum -y install gitlab-ce-11.11.5-ce.0.el7.x86_64.rpm
[root@dev src]#ps -ef |grep gitlab --可以看到gitlab已經啟動
[root@dev src]#cat /var/opt/gitlab/gitlab-rails/VERSION --查看gitlab的版本
11.11.5
2、修改配置:
#mkdir -p /data/gitlab/backups
#mkdir -p /data/gitlab/git-data/repositories
#chown -R git:root /data/gitlab/backups/
#chown -R git.root /data/gitlab/git-data/
#vim /etc/gitlab/gitlab.rb
a、更改gitlab的訪問URL:
ps:注意這里設置的端口不能被占用,默認是8080端口,如果8080已經使用,請自定義其它端口,並在防火牆設置開放相對應得端口
b、更改gitlab的備份路徑:
c、更改gitlab的項目默認存放路徑:
3、使配置生效及重啟:
#gitlab-ctl reconfigure --這一步需要一點時間
#gitlab-ctl restart --全部“ok: run”表示重啟成功
4、訪問:http://192.168.1.204 初始賬戶:root 密碼:5iveL!fe 第一次登入會要求修改密碼
5、postgresql配置:
#cd /var/opt/gitlab/postgresql/data #vim pg_hba.conf host all all 192.168.1.0/24 trust 添加這行,192.168.1.0/24這個段的ip地址不需要密碼可以連接 #vim postgresql.conf listen_addresses = '192.168.1.204' 修改監聽地址為本機ip #gitlab-ctl restart postgresql 重啟數據庫 #/opt/gitlab/embedded/bin/psql -U gitlab -d gitlabhq_production -h 192.168.1.204 不用輸密碼可進入
psql(9.6.11)
Type "help" for help
gitlabhq_production=> alter user gitlab with password 'gitlab123#@!'; 修改gitlab密碼,gitalb創建的數據庫超級用戶為gitlab-psql,想修改密碼自己通過命令修改即可
gitlabhq_production=>\q 退出
#vim /var/opt/gitlab/postgresql/data/pg_hba.conf
host all all 192.168.1.0/24 md5 修改trust為md5,即連接需要密碼
#gitalb-ctl restart postgresql
#/opt/gitlab/embedded/bin/psql -U gitlab -d gitlabhq_production -h 192.168.1.204
Password for user gitlab: 輸入gitlab用戶的密碼回車即可進入數據庫
既然修改了數據庫gitlab用戶的密碼,gitlab服務器中數據庫配置文件,也需要修改,不然數據庫連接不上
#vim /var/opt/gitlab/gitalb-rails/etc/database.yml
#gitlab-ctl restart 修改完數據庫配置重啟下服務
做完以上配置后,就可以使用Navicat Premium連接postgresql了,用圖形界面直觀些。
6、數據遷移:
這里按照之前寫的一篇gitlab升級(二)文檔,把keys,namespaces,users三個表的數據遷移過來就好,其他的暫且就不遷了
步驟:
a、mysql中用mysqldump把這幾個表只導出數據,不要表結構,表結構安裝gitlab的時候已經有了
#mysqldump -t gitlabhq_production -u gitlab -p keys >keys.sql
#mysqldump -t gitlabhq_production -u gitlab -p users >users.sql
#mysqldump -t gitlabhq_production -u gitlab -p namespaces >namespaces.sql
b、查看了下gitlab 11.11.5的postgresql的表結構和 gitalb 10.8.7的mysql 表結構差不多,無非是新版本有的表多了一些字段,或者多了一些新表,但這都不影響我們導入數據。但是有個要注意的地方是,postgresql里有些字段是用的bool類型,這在mysql里沒有這個類型,故數據不能直接導入,需要把mysql里不是bool類型的字段數據改成postgresql所對應的bool型數據,然后在導入。
c、導入完后,我們檢查下數據是否正確,也可以拿幾個賬號測試下登入是否正常,如正常的話則導入就成功了,這里貼下keys表的數據:
7、導入項目,這一步開始和之前寫的gitlab升級(二)里的步驟是一樣的,這里就不過多闡述了。
8、gitlab 11.11.5 升級到gitalb 12.1.0
#gitlab-rake gitlab:backup:create STRATEGY=copy --升級前先進行備份
#gitlab-ctl stop unicorn
#gitlab-ctl stop sidekiq
#yum info gitlab-ce --查看gitlab-ce的版本信息,可以看到最新的版本是12.1.0 #yum -y update gitlab-ce --升級gitlab
#cat /var/opt/gitlab/gitlab-rails/VERSION --查看gitlab版本

注:升級完可能數據庫的配置被初始化了,需要重新配置下,不然數據庫會連不上
9、訪問htt://192.168.1.204
10、配置郵箱:QQ exmail (騰訊企業郵箱)其他郵箱可去官方文檔里查看 Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
#vim /etc/gitlab/gitlab.rb gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.exmail.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "xxxx@xx.com" gitlab_rails['smtp_password'] = "password" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com' gitlab_rails['smtp_domain'] = "exmail.qq.com"
配置完成后執行:
#gitalb-ctl reconfigure --使配置生效
測試配置是否成功:
執行 gitlab-rails console
進入控制台。 然后在控制台提示符后輸入下面的命令 發送一封測試郵件:Notify.test_email('收件人郵箱', '郵件標題', '郵件正文').deliver_now
測試成功,添加gitlab用戶就可以收到郵件了!