Centos7中安裝維護Gitlab暴力從8.12升級到最新版本

小弟調調發表於2017-01-05

這裡記錄了Gitlab暴力從8.12升級到8.15.2的過程,包括不停的安裝過程中遇到的問題。

這裡持續更新修正,我會在我使用過程中把一些問題記錄下來

官方安裝

下面是官網複製過來的官方安裝方法,最簡單的安裝,在我大天朝,只能望天興嘆,你可翻牆安裝或者略過這裡,看下面的。

  1. 安裝並配置必要的依賴項

If you install Postfix to send email please select 'Internet Site' during setup. Instead of using Postfix you can also use Sendmail or configure a custom SMTP server and configure it as an SMTP server.

On Centos 6 and 7, the commands below will also open HTTP and SSH access in the system firewall.

sudo yum install curl openssh-server openssh-clients postfix cronie
sudo service postfix start
sudo chkconfig postfix on
sudo lokkit -s http -s ssh
  1. 新增gitlab伺服器包和安裝包
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce

If you are not comfortable installing the repository through a piped script, you can find the entire script here and select and download the package manually and install using
gitlab/gitlab-ce

curl -LJO https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/6/gitlab-ce-XXX.rpm/download
curl -LJO https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm/download
rpm -i gitlab-ce-XXX.rpm
  1. 配置並啟動GitLab
sudo gitlab-ctl reconfigure
  1. 瀏覽器開啟並登入

On your first visit, you'll be redirected to a password reset screen to provide the password for the initial administrator account. Enter your desired password and you'll be redirected back to the login screen.

The default account's username is root. Provide the password you created earlier and login. After login you can change the username if you wish.

第三方映象安裝

編輯源

新建 /etc/yum.repos.d/gitlab-ce.repo,內容為

使用清華大學 TUNA 映象源 開啟網址將內容複製到gitlab-ce.repo檔案中,編輯路徑vim /etc/yum.repos.d/gitlab-ce.repo

[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key

更新本地YUM快取

sudo yum makecache

安裝社群版

sudo yum install gitlab-ce #(自動安裝最新版)
sudo yum install gitlab-ce-8.15.2-ce.0.el6 #(安裝指定版本)

更改配置

vim /etc/gitlab/gitlab.rb
# 找到 external_url 'http://000.00.00.00:8081'
# 修改成你的地址

配置並啟動GitLab

# 開啟`/etc/gitlab/gitlab.rb`,
# 將`external_url = 'http://git.example.com'`修改為自己的IP地址:`http://xxx.xx.xxx.xx`,
# 然後執行下面的命令,對GitLab進行編譯。
sudo gitlab-ctl reconfigure
# 清除快取
sudo gitlab-rake cache:clear RAILS_ENV=production

登入GitLab

Username: root 
Password: 5iveL!fe

解除安裝

sudo gitlab-ctl uninstall

運維

# 修改預設的配置檔案
sudo vim /etc/gitlab/gitlab.rb

# 檢視版本
sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
# echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
# sysctl -p
# echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 檢查gitlab
gitlab-rake gitlab:check SANITIZE=true --trace
gitlab-rake gitlab:check
gitlab-rake gitlab:check SANITIZE=true
# 檢視日誌
gitlab-ctl tail
# 資料庫關係升級
gitlab-rake db:migrate
# 清理快取
gitlab-rake cache:clear

# 更新gitlab包
yum update gitlab-ce

# 升級gitlab
yum install gitlab-ce

# 升級資料命令
gitlab-ctl pg-upgrade

服務管理

gitlab-ctl start # 啟動所有 gitlab 元件:
gitlab-ctl stop  # 停止所有 gitlab 元件:
gitlab-ctl stop postgresql # 停止所有 gitlab postgresql 元件:
# 停止相關資料連線服務
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl restart # 重啟所有 gitlab 元件:
gitlab-ctl restart gitlab-workhorse # 重啟所有 gitlab gitlab-workhorse 元件:
gitlab-ctl status # 檢視服務狀態
gitlab-ctl reconfigure # 生成配置啟動服務

日誌檢視

sudo gitlab-ctl tail # 檢視日誌
sudo gitlab-ctl tail redis # 檢查redis的日誌
sudo gitlab-ctl tail postgresql       # 檢查postgresql的日誌
sudo gitlab-ctl tail gitlab-workhorse # 檢查gitlab-workhorse的日誌
sudo gitlab-ctl tail logrotate # 檢查logrotate的日誌
sudo gitlab-ctl tail nginx    # 檢查nginx的日誌
sudo gitlab-ctl tail sidekiq  # 檢查sidekiq的日誌
sudo gitlab-ctl tail unicorn  # 檢查unicorn的日誌

重置管理員密碼

gitlab管理員密碼忘記,怎麼重置密碼,Gitlab 修改root使用者密碼

使用rails工具開啟終端

sudo gitlab-rails console production

查詢使用者的email,使用者名稱,密碼等資訊,id:1 表示root賬號

user = User.where(id: 1).first

重新設定密碼

user.password = '新密碼'
user.password_confirmation = '新密碼' 

儲存密碼

user.save!

完整的操作ruby指令碼

user = User.where(id: 1).first
user.password = '新密碼'
user.password_confirmation = '新密碼'
user.save!

備份恢復

使用Gitlab一鍵安裝包安裝Gitlab非常簡單, 同樣的備份恢復與遷移也非常簡單,用一條命令即可建立完整的Gitlab備份:

修改備份檔案預設目錄

修改/etc/gitlab/gitlab.rb來修改預設存放備份檔案的目錄:

gitlab_rails['backup_path'] = '/mnt/backups'  

建立備份

gitlab-rake gitlab:backup:create

以上命令將在/var/opt/gitlab/backups目錄下建立一個名稱類似為xxxxxxxx_gitlab_backup.tar的壓縮包, 這個壓縮包就是Gitlab整個的完整部分, 其中開頭的xxxxxx是備份建立的時間戳。

修改後使用gitlab-ctl reconfigure命令過載配置檔案。

開始備份

這裡放你的備份檔案資料夾,和倉庫原始檔。

/var/opt/gitlab/backups                   # 備份檔案資料夾
/var/opt/gitlab/git-data/repositories     # git倉庫原始檔

自動備份

通過crontab使用備份命令實現自動備份

crontab -e
# 每天2點備份gitlab資料
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create

上面兩行儲存之後,重新載入配置

service crond reload
# or
systemctl reload crond.service

備份保留七天

設定只儲存最近7天的備份,編輯 /etc/gitlab/gitlab.rb 配置檔案,找到如下程式碼,刪除註釋 # 儲存

# /etc/gitlab/gitlab.rb 配置檔案 修改下面這一行
gitlab_rails['backup_keep_time'] = 604800  

重新載入gitlab配置檔案

sudo gitlab-ctl reconfigure  

開始恢復

遷移如同備份與恢復的步驟一樣, 只需要將老伺服器/var/opt/gitlab/backups目錄下的備份檔案拷貝到新伺服器上的/var/opt/gitlab/backups即可(如果你沒修改過預設備份目錄的話)。 然後執行恢復命令。
如果修改了,首先進入備份 gitlab 的目錄,這個目錄是配置檔案中的 gitlab_rails['backup_path'] ,預設為 /var/opt/gitlab/backups

然後停止 unicorn 和 sidekiq ,保證資料庫沒有新的連線,不會有寫資料情況。

# 停止相關資料連線服務
gitlab-ctl stop unicorn
# ok: down: unicorn: 0s, normally up
gitlab-ctl stop sidekiq
# ok: down: sidekiq: 0s, normally up

# 從xxxxx編號備份中恢復
# 然後恢復資料,1406691018為備份檔案的時間戳
gitlab-rake gitlab:backup:restore BACKUP=1406691018

# 新版本 1483533591_2017_01_04_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=1483533591_2017_01_04_gitlab_backup.tar

# 啟動Gitlab
sudo gitlab-ctl start  

判斷是執行實際操作的gitlab相關使用者:git,沒有得到足夠的許可權。依次執行命令:

# 恢復過程中沒有許可權
mkdir /var/opt/gitlab/backups
chown git /var/opt/gitlab/backups
chmod 700 /var/opt/gitlab/backups

# 恢復成功頁面報沒有許可權的錯誤
sudo chown -R git:git /var/opt/gitlab/git-data/repositories
sudo chmod -R ug+rwX,o-rwx /var/opt/gitlab/git-data/repositories
sudo chmod -R ug-s /var/opt/gitlab/git-data/repositories
sudo find /var/opt/gitlab/git-data/repositories -type d -print0 | sudo xargs -0 chmod g+s

如果備份檔案報沒有許可權,通過ls -al檢視許可權是不是git,而不是root,通過下面方式給git使用者許可權

sudo chown -R git:git 1483533591_2017_01_04_gitlab_backup.tar

暴力升級

直接編輯源 /etc/yum.repos.d/gitlab-ce.repo,安裝 GitLab 社群版

sudo yum install gitlab-ce #(自動安裝最新版)
sudo yum install gitlab-ce-8.15.2-ce.0.el6 #(安裝指定版本)

安裝過程會報錯

gitlab preinstall: Automatically backing up only the GitLab SQL database (excluding everything else!)
Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... pg_dump: [archiver (db)] connection to database "gitlabhq_production" failed: could not connect to server: 沒有那個檔案或目錄
    Is the server running locally and accepting
    connections on Unix domain socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432"?
Backup failed
[FAILED]
gitlab preinstall:
gitlab preinstall: Backup failed! If you want to skip this backup, run the following command and
gitlab preinstall: try again:
gitlab preinstall:
gitlab preinstall:   sudo touch /etc/gitlab/skip-auto-migrations
gitlab preinstall:
error: %pre(gitlab-ce-8.15.2-ce.0.el6.x86_64) scriptlet failed, exit status 1
Error in PREIN scriptlet in rpm package gitlab-ce-8.15.2-ce.0.el6.x86_64
error:   install: %pre scriptlet failed (2), skipping gitlab-ce-8.15.2-ce.0.el6
gitlab-ce-8.11.5-ce.0.el6.x86_64 was supposed to be removed but is not!
  Verifying  : gitlab-ce-8.11.5-ce.0.el6.x86_64                                                                                                                                                             1/2
  Verifying  : gitlab-ce-8.15.2-ce.0.el6.x86_64                                                                                                                                                             2/2

Failed:
  gitlab-ce.x86_64 0:8.11.5-ce.0.el6

看上面一堆錯誤,瞬間就懵逼了,看到一條救星命令讓我嘗試執行 sudo touch /etc/gitlab/skip-auto-migrations 於是我二逼的執行了,結果真的安裝成功了,?。

...
gitlab: Thank you for installing GitLab!
gitlab: To configure and start GitLab, RUN THE FOLLOWING COMMAND:

sudo gitlab-ctl reconfigure

gitlab: GitLab should be reachable at http://114.55.148.71:8081
gitlab: Otherwise configure GitLab for your system by editing /etc/gitlab/gitlab.rb file
gitlab: And running reconfigure again.
gitlab:
gitlab: For a comprehensive list of configuration options please see the Omnibus GitLab readme
gitlab: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
gitlab:

gitlab: GitLab now ships with a newer version of PostgreSQL (9.6.1), and will be used
gitlab: as the default in the next major relase. To upgrade, RUN THE FOLLOWING COMMANDS:

sudo gitlab-ctl pg-upgrade

gitlab: For more details, please see:
gitlab: https://docs.gitlab.com/omnibus/settings/database.html#upgrade-packaged-postgresql-server
gitlab:
  清理       : gitlab-ce-8.11.5-ce.0.el6.x86_64                                                                                                                                                             2/2
Found /etc/gitlab/skip-auto-migrations, exiting...
  Verifying  : gitlab-ce-8.15.2-ce.0.el6.x86_64                                                                                                                                                             1/2
  Verifying  : gitlab-ce-8.11.5-ce.0.el6.x86_64                                                                                                                                                             2/2

更新完畢:
  gitlab-ce.x86_64 0:8.15.2-ce.0.el6

完畢!

重啟配置,可以解決大部分502錯誤。

gitlab-ctl reconfigure

錯誤處理

解決80埠被佔用

nginx配置解決 80 埠被佔用

upstream gitlab {
     server 114.55.111.111:8081 ;
}
server {
  # 偵聽的80埠
  listen       80;
  server_name  git.diggg.cn;
  location / {
    proxy_pass   http://gitlab;    #在這裡設定一個代理,和upstream的名字一樣
    #以下是一些反向代理的配置可刪除
    proxy_redirect             off;
    #後端的Web伺服器可以通過X-Forwarded-For獲取使用者真實IP
    proxy_set_header           Host $host;
    proxy_set_header           X-Real-IP $remote_addr;
    proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size       10m; #允許客戶端請求的最大單檔案位元組數
    client_body_buffer_size    128k; #緩衝區代理緩衝使用者端請求的最大位元組數
    proxy_connect_timeout      300; #nginx跟後端伺服器連線超時時間(代理連線超時)
    proxy_send_timeout         300; #後端伺服器資料回傳時間(代理髮送超時)
    proxy_read_timeout         300; #連線成功後,後端伺服器響應時間(代理接收超時)
    proxy_buffer_size          4k; #設定代理伺服器(nginx)儲存使用者頭資訊的緩衝區大小
    proxy_buffers              4 32k; #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設定
    proxy_busy_buffers_size    64k; #高負荷下緩衝大小(proxy_buffers*2)
    proxy_temp_file_write_size 64k; #設定快取資料夾大小,大於這個值,將從upstream伺服器傳
  }
}

nginx配置檢查和立即生效

# 檢查配置
/usr/local/nginx/sbin/nginx -tc conf/nginx.conf
# nginx 重新載入配置
/usr/local/nginx/sbin/nginx -s reload

頭像無法正常顯示

原因:gravatar被牆
解決辦法:
編輯 /etc/gitlab/gitlab.rb,將

# gitlab_rails['gravatar_plain_url'] = 'http://gravatar.duoshuo.com/avatar/%{hash}?s=%{size}&d=identicon'

修改為:

gitlab_rails['gravatar_plain_url'] = 'http://gravatar.duoshuo.com/avatar/%{hash}?s=%{size}&d=identicon'

然後在命令列執行:

sudo gitlab-ctl reconfigure 
sudo gitlab-rake cache:clear RAILS_ENV=production

其它錯誤

Error executing action `run` on resource 'bash[migrate gitlab-rails database]'

上面錯誤是資料庫沒有啟動,我不知道如何啟動,我重啟了伺服器,然後好球了。?
https://gitlab.com/gitlab-org...

NameError: uninitialized constant Devise::Async
Processing by RootController#index as HTML
Completed 401 Unauthorized in 17ms (ActiveRecord: 2.7ms)
/var/log/gitlab/nginx/gitlab_access.log <==
114.55.148.71 - - [04/Jan/2017:17:20:24 +0800] "GET /favicon.ico HTTP/1.0" 502 2662 "http://git.xxxxx.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36"

參考資料

相關文章