GitLab安裝部署
以Centos為例,安裝如下:
在CentOS系統上安裝所需的依賴:ssh,防火牆,postfix(用於郵件通知) ,wget,以下這些命令也會開啟系統防火牆中的HTTP和SSH埠訪問。依次執行以下命令:
1.安裝ssh
sudo yum install -y curl policycoreutils-pythonopenssh-server
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。
如果還沒有成功部署,可以參考 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
一、環境準備
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.