git是常用的代碼版本管理工具,github是最知名的公共代碼托管網(wǎng)站。有的時(shí)候不想在公共網(wǎng)絡(luò)上共享,需要自己搭建一個(gè)私有的代碼管理服務(wù)器,比如只限于公司或者實(shí)驗(yàn)室內(nèi)網(wǎng)使用。使用git和gitlab可以方便地搭建自己私有的git代碼托管服務(wù)器。本文將介紹git,gitlab兩種方法搭建服務(wù)器,以及gitlab備份管理工作。
1 git Server安裝
git server安裝有很多參考資料,不多介紹,筆者根據(jù)下面的參考資料成功搭建了git server。登陸服務(wù)器,根據(jù)參考添加源目錄后,需要上傳代碼,在pc端執(zhí)行如下操作:
git remote add origin git@xx.75.221.xxx:/home/git/xxxx.git
git push origin master
對(duì)于源git@xx.75.221.xxx:/home/git/xxxx.git的格式分析如下:
- xx.75.221.xxx是服務(wù)器ip地址,或者是域名(如果有域名)
- git是在服務(wù)器上申請(qǐng)的名叫g(shù)it的賬號(hào)名
- /home/git/xxxx.git是服務(wù)器上保存git源的路徑
代碼源保存后,別的pc機(jī)就可以拷貝代碼以及相關(guān)的git操作了。注意,有可能會(huì)遇到訪(fǎng)問(wèn)權(quán)限報(bào)錯(cuò)的問(wèn)題,很可能是因?yàn)閟erver上沒(méi)有保存pc端的ssh公鑰,這時(shí)需要生成ssh公鑰,向服務(wù)器管理員申請(qǐng)將自己的公鑰添加進(jìn)去。
git clone git@xx.75.221.xxx:/home/git/xxxx.git
git server沒(méi)有圖形界面,需要管理員上服務(wù)器手動(dòng)添加git代碼源,手動(dòng)管理ssh公鑰,不是很方便。如果想擁有想github那樣托管網(wǎng)站,需要安裝gitlab。
參考資料:
中文參考:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000
英文參考:
https://git-scm.com/book/ca/v1/Git-on-the-Server-Setting-Up-the-Server
ssh公鑰:
https://git-scm.com/book/zh/v1/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E7%94%9F%E6%88%90-SSH-%E5%85%AC%E9%92%A5
2 Gitlab安裝
gitlab是個(gè)開(kāi)源的git托管工具,在服務(wù)器上安裝好后用戶(hù)將能像使用github一樣使用自己的代碼托管工具。官網(wǎng)提供了源碼版和安裝包版,本文采用安裝包版在ubuntu上實(shí)現(xiàn)了gitlab server。gitlab是非常成熟的開(kāi)源工具,只需要一步步跟隨官網(wǎng)的指引就可以完成,不多贅述。
安裝好后配置文件如下,文件中給出了詳細(xì)的配置說(shuō)明。
/etc/gitlab/gitlab.rb
刷新配置:
gitlab-ctl reconfigure
3 gitlab 備份
為防止gitlab服務(wù)器出現(xiàn)災(zāi)難性的問(wèn)題導(dǎo)致代碼丟失,需要考慮到日常備份的問(wèn)題。這里介紹服務(wù)器本地備份以及將本地備份定期上傳至另一臺(tái)ftp服務(wù)器。
3.1 本地定期備份:
在配置文件/etc/gitlab/gitlab.rb中添加如下內(nèi)容,意思是保存7天內(nèi)的備份文件。
# limit backup lifetime to 7 days - 604800 seconds
gitlab_rails['backup_keep_time'] = 604800
服務(wù)器定期執(zhí)行備份工作,執(zhí)行如下命令
sudo –u
crontab –e
添加如下內(nèi)容:
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
意思是每到2:00, 執(zhí)行備份. 備份文件目錄是:
/var/opt/gitlab/backups/
備份恢復(fù)參考如下:
https://docs.gitlab.com/ce/raketasks/backup_restore.html
3.2 遠(yuǎn)程定期備份
參考前面一節(jié)添加定期任務(wù):
#每天3:00啟動(dòng)上傳腳本uploadbackup.sh
0 3 * * * /bin/sh /home/username/uploadbackup.sh CRON=1
每到3:00執(zhí)行遠(yuǎn)程上傳腳本,腳本內(nèi)容如下:
$ cat ~/uploadbackup.sh
#!/bin/sh
#找到一天以?xún)?nèi)的備份文件,并以星期號(hào)命名,拷貝至新的路徑下
```shell
find /var/opt/gitlab/backups/ -mtime -1 -name "*" -exec cp -f {} /home/username/gitbackup/`date +%a`.gitlab_backup.tar \;
#登陸ftp服務(wù)器并上傳文件
ftp -n 10.xx.xx.151 << EOF
user username password
bin
cd ftpuser/gitbackup/
lcd /home/username/gitbackup/
prompt
mput *
bye
EOF
以星期號(hào)重命名是為了只保存一個(gè)星期內(nèi)的備份文件,因?yàn)槊窟^(guò)一個(gè)星期將會(huì)有新的同樣命名的文件覆蓋一個(gè)星期之前的舊文件。如果每次備份的名字都一樣,那么可能會(huì)遇到磁盤(pán)空間不夠的問(wèn)題。也可以研究備份的時(shí)間,備份文件的命名規(guī)則,自己定義備份的策略。