1. 程式人生 > 實用技巧 >GitLab安裝部署

GitLab安裝部署

GitLab安裝部署

以Centos為例,安裝如下:

在CentOS系統上安裝所需的依賴:ssh,防火牆,postfix(用於郵件通知) ,wget,以下這些命令也會開啟系統防火牆中的HTTP和SSH埠訪問。依次執行以下命令:

1.安裝ssh

sudo yum install -y curl policycoreutils-pythonopenssh-server

2.將SSH服務設定成開機自啟動

sudo systemctl enable sshd

3.啟動SSH服務

sudo systemctl start sshd

4.新增http服務到firewalld,pemmanent表示永久生效,若不加--permanent系統下次啟動後就會失效。

sudo firewall-cmd --permanent --add-service=http

5.重啟防火牆

sudo systemctl reload firewalld

6.安裝Postfix以傳送通知郵件

sudo yum install postfix

7.將postfix服務設定成開機自啟動

sudo systemctl enable postfix

8.啟動postfix

sudo systemctl start postfix

9.從外網上下載gitlab

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/?C=M&O=A#下載gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm版本

10.安裝gitlab

cd /opt/software #下載的軟體拷貝到此目錄
rpm -ivh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm

11.修改gitlab配置檔案指定伺服器ip和自定義埠

vim  /etc/gitlab/gitlab.rb
#將預設的external_url = 'http://git.example.com'修改為自己的IP地址:http://xxx.xx.xxx.xx
external_url 'http://192.168.70.195:9001'
unicorn['port'] = 9002#修改unicorn埠,防止與8080埠衝突
git_data_dirs #修改程式碼儲存路徑,修改其中的path
儲存後執行 gitlab-ctl reconfigure    gitlab-ctl restart
/* 無須參考以下文字
1 修改nginx埠
vim /etc/gitlab/gitlab.rb
nginx['listen_port'] = 9001#如果external_url中已加埠,此處可省略
vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
server {
 
  listen *:9001;
2 修改unicorn埠(可以不修改)
vim /etc/gitlab/gitlab.rb
unicorn['port'] = 9002
vim /var/opt/gitlab/gitlab-rails/etc/unicorn.rb
listen "127.0.0.1:9002", :tcp_nopush => true
3 儲存配置,重啟。
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-ctl status
4 ip:9001。(重啟服務有延時,耐心等待一會,如果是centos可能會打不開網頁,防火牆裡面放開8081埠即可)
*/

ps:注意這裡設定的埠不能被佔用,預設是8080埠,如果8080已經使用,請自定義其它埠,並在防火牆設定開放相對應得埠

假如遇到502錯誤,一般是埠被佔用,可以輸入netstat -ntpl檢視Nginx的名字,把不是9001埠的程序kill掉,再重啟gitlab即可

13.重置並啟動GitLab

gitlab-ctl reconfigure


gitlab-ctl restart

提示 "ok: run:"表示啟動成功

14.訪問 GitLab頁面

如果沒有域名,直接輸入伺服器ip和指定埠進行訪問

初始賬戶: root 密碼:5iveL!fe

第一次登入修改密碼

漢化

https://gitlab.com/xhang/gitlab/-/tree/v12.0.3-zh

下載對應版本

gitlab配置檢視

gitlab的配置主要是etc/gitlab/gitlab.rb下的兩個地方;檢視更多配置資訊可以

vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml 檢視具體的詳情

相關操作

啟動服務:gitlab-ctl start 檢視狀態:gitlab-ctl status 停掉服務:gitlab-ctl stop 重啟服務:gitlab-ctl restart 讓配置生效:gitlab-ctl reconfigure

檢視日誌:gitlab-ctl tail

檢視防火牆狀態:netstat -ntpl

開啟防火牆埠:firewall-cmd --zone=public --add-port=6379/tcp --permanent firewall-cmd --reload

參考

資料遷移:https://www.jianshu.com/p/1f38f01440e9

本地備份‘遠端備份:https://www.cnblogs.com/straycats/p/7671204.html


以下內容複製自上方連結,以防以後連結失效

gitlab 本地 定時備份

一、環境準備

我們預設一臺伺服器已成功部署了gitlab。

如果還沒有成功部署,可以參考 http://www.cnblogs.com/straycats/p/7637373.html


二、手動備份gitlab

很方便,因為gitlab有指令直接支援手動備份。

gitlab-rake gitlab:backup:create

這裡要特別說明,如果 /etc/gitlab/gitlab.rb 配置了引數“backup_path”(例如gitlab_rails['backup_path'] = '/backup'),則備份的目錄就是該目錄下(/backup/);

如果沒有配置引數“backup_path”,則gitlab把備份檔案生成到預設目錄/var/opt/gitlab/backups。

僅僅這樣不夠,每天我這裡的運維工作也有不少,如果每天都來手動備份,雖然只要幾分鐘,但是人工成本很高,所以還是要考慮使用自動定時的方式進行備份。


三、定時自動備份gitlab(本地)

定時備份的思路建立在手動的基礎上,通過crontab新增定時計劃就可以解決這個問題。

一般新增定時計劃可以有2種方式:

1.使用命令crontab -e,將定時任務新增後儲存。

2.將定時任務新增到/etc/crontab檔案中。

我這裡採取第一種,使用crontab -e。

crontab -e

根據我們部門的工作時間,我設計一天備份2次,分別在每天12:00、19:00,故我新增下面的內容,並儲存。

0 12 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
0 19 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create

重啟crontab

systemctl restart crond

但是僅僅實現自動備份還是不夠,備份如果不能及時清理硬碟的空間很快會不夠用,同時也要能夠自動清理不需要人工花時間在這一塊。


四、自動清理

這一塊由於gitlab已經支援,我就走簡單的方案,配置gitlab來實現自動清理功能。

vim /etc/gitlab/gitlab.rb

將其中backup_keep_time的配置取消註釋,根據需要設定自動清理多少天前的備份,我這裡是設定備份保留7天(7360024=604800),儲存。

gitlab_rails['backup_keep_time'] = 604800

重新載入gitlab的配置檔案

gitlab-ctl reconfigure

參考資料:

1.http://www.cnblogs.com/shansongxian/p/6599144.html

2.http://blog.csdn.net/ouyang_peng/article/details/77070977

gitlab 遠端 定時備份

一、環境準備

1.gitlab所在的伺服器A(centos7,192.168.1.1)

2.備份伺服器B(centos7,192.168.1.2)

3.gitlab本地備份目錄設定為/var/opt/gitlab/backups/log,本篇也是以此展開

gitlab已經配置了本地備份。如果沒有配置,可以參考http://www.cnblogs.com/straycats/p/7671204.html


二、通過金鑰配對取消scp傳輸密碼的限制

手動備份資料費時費力。最好的方法就是通過指令碼實現遠端自動備份。但遠端無論是通過SSH登陸,還是通過scp拷貝檔案都需要輸入密碼。

為了克服這個問題,首先需要實現不需要密碼的SSH登陸,這樣就可以使用 rsync,scp,rexec等命令來做的遠端備份了。

2.1 生成金鑰對

假設A,B兩伺服器,現在需要在A機上用root登陸B機,而不需要輸入密碼。那我們可按照下面的步驟來做:

1)在gitlab伺服器A上生成rsa證書

ssh-keygen -t rsa

(這裡需要增加截圖,我第一次部署時忘記截了之後補)

1、生成的過程中提示輸入金鑰對儲存位置,直接回車,接受預設值就行了。 2、因為之前已經有/root/.ssh/id_rsa 檔案存在,因此提示你是否覆蓋,輸入y表示覆蓋 3、接著會提示輸入一個密碼,直接回車,讓它空著。當然,也可以輸入一個密碼。 4、接著輸入確認密碼,輸入完之後,回車金鑰對就生成完了。

這樣,在/root/.ssh下生成id_rsa 和 id_rsa.pub 兩個檔案,其中公共金鑰儲存在 /root/.ssh/id_rsa.pub,私有金鑰儲存在/root/.ssh/id_rsa。

2)在gitlab伺服器A上cp生成rsa公鑰證書

在/root/.ssh下複製備份一份id_rsa.pub 命名為 id_rsa.pub.A,以便拷貝到遠端伺服器B。

cd /root/.ssh
cp id_rsa.pub id_rsa.pub.A

2.2 生成rsa公鑰證書上傳到備份伺服器B

先在伺服器B上建立目錄/root/.ssh。

mkdir -p /root/.ssh

使用scp命令進行遠端複製,將伺服器A生成的id_rsa.pub.A拷貝到伺服器B的/root/.ssh目錄下。

scp /root/.ssh/id_rsa.pub.A [email protected]:/root/.ssh/

此時使用scp命令需要輸入密碼,當把下面的“2.3 金鑰配對”執行後,以後gitlab伺服器A使用scp命令複製檔案到備份伺服器B的話,就不需要輸入密碼了。

2.3 金鑰配對

1)建立authorized_keys檔案

在備份伺服器B的/root/.ssh下建立authorized_keys檔案。

touch /root/.ssh/authorized keys

2)將id_rsa.pub.A檔案內容追加到authorized_keys 檔案中

通過 cat 命令 把id_rsa.pub.A 追寫到 authorized_keys 檔案中。

cd /root/.ssh/
cat id_rsa.pub.A >> authorized_keys

3)修改authorized_keys檔案的許可權

authorized_keys檔案的許可權很重要,如果設定為777,那麼登入的時候,還是需要提供密碼的。

chmod 400 authorized_keys

4)測試上傳檔案是否還要輸入密碼

不放心的話,立刻測試下gitlab伺服器A使用scp命令複製檔案到備份伺服器B是否還要輸入密碼。

scp /root/.ssh/id_rsa.pub.A [email protected]:/root/.ssh/

發現在2.3之前,由於沒有設定ssh證書授權認證時,上傳需要輸入密碼;2.3操作完後,由於授權認證,已經不需要輸入密碼了。


三、定時將備份檔案傳到備份伺服器

3.1 建立遠端備份指令碼

在gitlab伺服器A上,在/root目錄下建立定期備份指令碼auto_backup_to_remote.sh。

vim /root/auto_backup_to_remote.sh

新增下面的內容,並wq儲存。

#!/bin/bash

# gitlab 伺服器備份路徑
LocalBackDir=/var/opt/gitlab/backups

# 遠端備份伺服器 gitlab備份檔案存放路徑
RemoteBackDir=/root/gitlab_backup

# 遠端備份伺服器 登入賬戶
RemoteUser=root

# 遠端備份伺服器 IP地址
RemoteIP=(備份伺服器B的地址,請你自行修改)

#當前系統日期
DATE=`date +"%Y-%m-%d"`

#Log存放路徑
LogFile=$LocalBackDir/log/$DATE.log

# 查詢 gitlab本地備份目錄下 時間為60分鐘之內的,並且字尾為.tar的gitlab備份檔案
BACKUPFILE_SEND_TO_REMOTE=$(find $LocalBackDir -type f -mmin -60  -name '*.tar*')

#新建日誌檔案
touch $LogFile

#追加日誌到日誌檔案
echo "Gitlab auto backup to remote server, start at  $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile
echo "---------------------------------------------------------------------------" >> $LogFile

# 輸出日誌,打印出每次scp的檔名
echo "---------------------The file to scp to remote server is: $BACKUPFILE_SEND_TO_REMOTE-------------------------------" >> $LogFile


#備份到遠端伺服器
scp $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$RemoteBackDir

#追加日誌到日誌檔案
echo "---------------------------------------------------------------------------" >> $LogFile

3.2 修改遠端備份指令碼auto_backup_to_remote.sh的許可權

要能讓系統執行auto_backup_to_remote.sh,必須修改該指令碼的許可權。

chmod 777 auto_backup_to_remote.sh

3.3 建立日誌存放目錄

mkdir -p /var/opt/gitlab/backups/log

3.4 測試遠端備份指令碼的功能是否可用

現在為了驗證指令碼是否可以正常執行,我們需要手動執行指令碼。

在gitlab伺服器A上執行find命令,看是否能夠正常查找出我們要scp到遠端伺服器的Gitlab備份檔案。

find /var/opt/gitlab/backups/log -type f -mmin -60  -name '*.tar*'

手動執行指令碼auto_backup_to_remote.sh,看是否能夠正常上傳

cd

./auto_backup_to_remote.sh

等待1-2分鐘左右,檢視備份伺服器B的目錄/root/gitlab_backup下是否有伺服器A傳過來的備份檔案。

在備份伺服器B上能找到伺服器A傳過來的備份檔案,說明遠端備份指令碼的功能OK。

如果每次上傳都通過人工執行指令碼的方式,人工的消耗太大,接著配置定時執行該指令碼。

3.5 新增定時計劃

定時備份的思路建立在手動的基礎上,通過crontab新增定時計劃就可以解決這個問題。

一般新增定時計劃可以有2種方式:

1.使用命令crontab -e,將定時任務新增後儲存。

2.將定時任務新增到/etc/crontab檔案中。

我這裡採取第一種,使用crontab -e。

crontab -e

結合我之前對公司gitlab本地備份的設計,故設計在備份完10分鐘後上傳,故分別在每天12:10、19:10進行備份,故新增下面的內容,wq儲存。

10 12 * * * /root/auto_backup_to_remote.sh -D 1
10 19 * * * /root/auto_backup_to_remote.sh -D 1

重啟crontab

systemctl restart crond


四、定時刪除備份伺服器上的備份檔案

每個Gitlab備份檔案都很大。因此每天備份兩次,過不了多久的話,備份伺服器B上的磁碟空間可能就會被Gitlab備份檔案佔用完。

故需要定期清理備份檔案,參考備份伺服器的空間,暫定保留14天的備份檔案。

4.1 建立刪除過期備份檔案的指令碼

設計備份伺服器B的/root/gitlab_backup作為接收遠端上傳備份檔案的目錄,故在備份伺服器B上,先建立該目錄。

mkdir -p /root/gitlab_backup

建立刪除過期備份檔案的指令碼auto_remove_old_backup.sh。

vim /root/auto_remove_old_backup.sh

新增下面的內容,並wq儲存。

#!/bin/bash

# 遠端備份伺服器 gitlab備份檔案存放路徑
GitlabBackDir=/root/gitlab_backup


# 查詢遠端備份路徑下,超過14天且檔案字尾為.tar 的 Gitlab備份檔案 然後刪除
find $GitlabBackDir -type f -mtime +14 -name '*.tar*' -exec rm {} \;

4.2 修改auto_remove_old_backup.sh指令碼的許可權

chmod 777 auto_remove_old_backup.sh

4.3 新增定時計劃

定時備份的思路建立在手動的基礎上,通過crontab新增定時計劃就可以解決這個問題。

一般新增定時計劃可以有2種方式:

1.使用命令crontab -e,將定時任務新增後儲存。

2.將定時任務新增到/etc/crontab檔案中。

我這裡採取第一種,使用crontab -e。

crontab -e

設計凌晨0點執行刪除過期備份檔案的指令碼,故新增下面的內容,wq儲存。

0 0 * * *  /root/auto_remove_old_backup.sh

重啟crontab

systemctl restart crond

參考資料:

\1. http://blog.csdn.net/ouyang_peng/article/details/77334215