熟練的使用git和github已經(jīng)成為了每個(gè)程序員必備的技能绵跷。git可以使我們更好的管理和維護(hù)自己的代碼霹琼,可以使團(tuán)隊(duì)成員之間以更高效的方式進(jìn)行工作圈膏,github作為一個(gè)免費(fèi)好用的代碼托管平臺(tái)倔矾,在一定程度上對(duì)開(kāi)源社區(qū)的發(fā)展也起到了非常積極的作用捌朴。
然而洽损,出于各種原因庞溜,比如,github對(duì)中國(guó)用戶及其不友好的網(wǎng)速、團(tuán)隊(duì)私有的項(xiàng)目不想放在第三方服務(wù)器上抑或是無(wú)法訪問(wèn)公網(wǎng)的內(nèi)網(wǎng)環(huán)境流码,搭建自己的私有代碼平臺(tái)也成了一部分開(kāi)發(fā)人員的選擇又官。針對(duì)這種需求,目前也有像gitWeb漫试、gerrit六敬、gitlab之類(lèi)的解決方案,這幾種解決方案各有優(yōu)劣驾荣,這里為大家介紹的是其中的佼佼者gitlab外构,也是我們公司內(nèi)部正在使用的一個(gè)代碼管理平臺(tái),功能十分完善播掷,頁(yè)面也和github十分相似审编,如果對(duì)github使用的熟悉,對(duì)這個(gè)也不會(huì)感到陌生歧匈。
為了方便在互聯(lián)網(wǎng)環(huán)境下使用垒酬,這里我們選擇了騰訊云輕量服務(wù)器來(lái)搭建gitlab服務(wù)器。
為什么使用騰訊云輕量服務(wù)器,首先是因?yàn)槠湫詢(xún)r(jià)比非常的高件炉,對(duì)于新用戶勘究,1核2G的配置只需要99元一年,簡(jiǎn)直是主機(jī)界的一股清流斟冕,其次口糕,對(duì)使用者也很友好,提供了各種各樣的包含docker在內(nèi)的各種預(yù)置鏡像磕蛇,能很快上手使用景描。
首先,我們需要購(gòu)買(mǎi)一臺(tái)騰訊云輕量服務(wù)器孤里,點(diǎn)擊這里打開(kāi)購(gòu)買(mǎi)頁(yè)面伏伯,選擇需要的配置、以及地域和時(shí)長(zhǎng)捌袜,鏡像選擇Docker CE 19.03.9,點(diǎn)擊立即購(gòu)買(mǎi)炸枣,等支付完畢后虏等,我們就擁有了自己的第一個(gè)云服務(wù)器。
為了方便使用适肠,還需要注冊(cè)一個(gè)域名霍衫,然后通過(guò)域名來(lái)訪問(wèn)我們的gitlab服務(wù)器。目前由于大陸的政策原因侯养,使用域名指向香港的服務(wù)器需要ICP備案(騰訊云會(huì)協(xié)助進(jìn)行備案)敦跌,備案時(shí)間通常在十天左右。如果等不及的話,可以購(gòu)買(mǎi)輕量云的香港節(jié)點(diǎn)進(jìn)行使用柠傍,使用香港節(jié)點(diǎn)不需要進(jìn)行備案麸俘。購(gòu)買(mǎi)香港服務(wù)器以及購(gòu)買(mǎi)域名和設(shè)置解析等內(nèi)容請(qǐng)參考這里。我已經(jīng)注冊(cè)好了一個(gè)域名lixf.ink惧笛,并將gitlab.lixf.ink指向了服務(wù)器的IP从媚。
購(gòu)買(mǎi)成功后,進(jìn)入到控制臺(tái)患整,在輕量應(yīng)用服務(wù)器頁(yè)面拜效,就可以看到我們有了一臺(tái)運(yùn)行中的輕量服務(wù)器
第一次使用需要重置一下密碼,這一步點(diǎn)擊上圖進(jìn)入到概要界面各谚,就可以看到相應(yīng)的選項(xiàng)紧憾。重置密碼以后要記住自己所設(shè)置的密碼。由于篇幅限制昌渤,這里不再細(xì)說(shuō)赴穗。
點(diǎn)擊上圖中的【登錄】按鈕,會(huì)彈出下圖這樣的一個(gè)黑色對(duì)話框愈涩,我們后面的命令將直接在這個(gè)對(duì)話框里輸入望抽,無(wú)需再安裝第三方的客戶端。
現(xiàn)在我們已經(jīng)有了自己的輕量服務(wù)器履婉,而且由于在購(gòu)買(mǎi)的時(shí)候煤篙,我們選擇了Docker CE作為鏡像,因此毁腿,此時(shí)的服務(wù)器里辑奈,已經(jīng)有了一個(gè)完整的docker環(huán)境,下面我們就可以直接以容器的方式快速安裝gitlab服務(wù)器已烤。
首先鸠窗,需要為gitlab的數(shù)據(jù)創(chuàng)建一個(gè)目錄,用來(lái)存儲(chǔ)gitlab在運(yùn)行過(guò)程中產(chǎn)生的數(shù)據(jù)胯究。
sudo mkdir -p /data/gitlab#/data/gitlab可以修改成合適的目錄
然后稍计,通過(guò)運(yùn)行下面命令,就可以啟動(dòng)gitlab了裕循。注意要把gitlab.lixf.ink換成自己的域名臣嚣。
sudo docker run --detach \
? --hostname gitlab.lixf.ink \
? --publish 443:443 --publish 80:80 --publish 23:22 \
? --name gitlab \
? --restart always \
? --volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
? --volume /data/gitlab/data:/var/opt/gitlab \
? gitlab/gitlab-ce:latest
第一次啟動(dòng)時(shí),由于gitlab內(nèi)部需要初始化一些數(shù)據(jù)剥哑,因此需要等待幾分鐘才能安裝完畢硅则,此時(shí)可以輸入下面命令查看安裝過(guò)程中的日志
sudo docker logs -f gitlab
或者也可以通過(guò)watch命令來(lái)監(jiān)控gitlab是否啟動(dòng)成功
sudo watch docker ps
當(dāng)看到下圖中的healthy時(shí),說(shuō)明gitlab已經(jīng)成功運(yùn)行了
此時(shí)株婴,用瀏覽器訪問(wèn) gitlab.lixf.ink怎虫,就可以訪問(wèn)到我們自己的gitlab了。
從上圖中看到gitlab已經(jīng)正確安裝了,此時(shí)由于我們還不知道gitlab管理員賬號(hào)和密碼大审,需要回到黑窗口頁(yè)面(終端)蘸际,接著設(shè)置管理員的密碼。
如果首頁(yè)上顯示了設(shè)置管理員密碼的輸入框饥努,我們?cè)谶@個(gè)界面上直接設(shè)置管理員密碼捡鱼,無(wú)需下面的過(guò)程。
輸入下面命令進(jìn)入到gitlab容器內(nèi)部的終端
sudo dockerexec-it gitlab /bin/bash
然后用下面命令進(jìn)入 到gitlab的rails控制臺(tái)
gitlab-rails console#這一步比較慢酷愧,大概在1分鐘左右驾诈,請(qǐng)耐心等待
當(dāng)打開(kāi)控制臺(tái)后依次輸入下面命令來(lái)重置管理員賬號(hào)和密碼。
user=User.find_by_username 'root'
user.password="88888888"? #這里請(qǐng)換成一個(gè)復(fù)雜的密碼
user.save!
設(shè)置過(guò)程如下圖所示
密碼設(shè)置成功以后溶浴,就可以返回到gitlab登錄頁(yè)面登錄了乍迄。下面是登錄成功的頁(yè)面。
點(diǎn)擊導(dǎo)航欄中間的+號(hào)按鈕士败,依次選擇【New Project】-> 【Create blank project】闯两,進(jìn)入到創(chuàng)建項(xiàng)目頁(yè)面,然后填寫(xiě)相應(yīng)的信息谅将,點(diǎn)擊Create project漾狼,即可創(chuàng)建新項(xiàng)目。
創(chuàng)建成功后會(huì)自動(dòng)跳轉(zhuǎn)到項(xiàng)目主頁(yè)
然后就可以上傳代碼了饥臂。新創(chuàng)建的項(xiàng)目的首頁(yè)已經(jīng)提示我們?cè)撛趺闯跏蓟⑸蟼魑覀兊拇a逊躁。我們只需要跟著操作就可以了。
第一步,先配置本地git的用戶和郵箱
git config --global user.name"Administrator"#換成自己的用戶名
git config --global user.email"admin@example.com"#換成自己的郵箱
第二步,拉取倉(cāng)庫(kù)隅熙,添加文件并提交代碼
gitclonehttp://gitlab.lixf.ink/root/hellogitlab.git
cdhellogitlab
git switch -c master
touch README.md
git add README.md
git commit -m"add README"
git push -u origin master
下面是在我電腦上的運(yùn)行結(jié)果
代碼提交成功以后稽煤,再次刷新項(xiàng)目主頁(yè),就可以看到我們提交的代碼了
我這里直接使用了管理員用戶創(chuàng)建并上傳項(xiàng)目囚戚,實(shí)際使用過(guò)程中酵熙,最好單獨(dú)創(chuàng)建一個(gè)普通用戶來(lái)進(jìn)行相應(yīng)的操作。
相信有小伙伴看出來(lái)了驰坊,我們上面使用的是HTTP協(xié)議匾二,HTTP協(xié)議是一種不安全的協(xié)議,因此拳芙,這里我們配置成HTTPS假勿,讓我們的代碼倉(cāng)庫(kù)更安全。
gitlab內(nèi)部集成了letsencrypt态鳖,因此,這里只需要啟用letsencrypt恶导,并進(jìn)行一些必要的配置
用vim打開(kāi)/data/gitlab/config/gitlab.rb浆竭,修改以下內(nèi)容
在32行左右,將external_url前面的#刪掉,并在單引號(hào)中填寫(xiě)gitlab服務(wù)器的https地址邦泄,例如https://gitlab.lixf.ink
在2235行左右删窒,修改下面幾項(xiàng)
letsencrypt['enable'] = true #刪除前面的#號(hào),并將值修改為true
letsencrypt['contact_emails'] = ['foo@email.com']? #刪除前面的#號(hào),修改為自己的郵箱
letsencrypt['auto_renew'] = true #刪除前面的#號(hào)
然后顺囊,執(zhí)行下面命令重啟gitlab容器
sudo docker restart gitlab
等容器重啟之后肌索,gitlab就會(huì)通過(guò)letsencrypt自動(dòng)簽發(fā)免費(fèi)的HTTPS證書(shū),等證書(shū)簽發(fā)成功(大概3分鐘左右)特碳,就可以通過(guò)https://gitlab.lixf.ink訪問(wèn)我們的代碼倉(cāng)庫(kù)了诚亚。此時(shí),地址欄旁邊也會(huì)顯示一把的小鎖午乓,代表這是一個(gè)安全的網(wǎng)址站宗。
前面在啟動(dòng)Docker容器的時(shí)候,指定了 -p 23:22參數(shù)益愈,將gitlab容器的22端口映射到了宿主機(jī)的端口上梢灭。這個(gè)是因?yàn)樗拗鳈C(jī)的22端口已經(jīng)被sshd服務(wù)給占用了,如果不將22端口映射到別的端口上蒸其,gitlab容器將無(wú)法啟動(dòng)敏释。但是這么做,又會(huì)造成我們無(wú)法正常的通過(guò)ssh協(xié)議來(lái)提交和拉取代碼摸袁,這會(huì)給習(xí)慣用ssh協(xié)議的小伙伴帶來(lái)不必要的麻煩钥顽。
為了解決這個(gè)問(wèn)題,我們需要修改sshd服務(wù)的端口但惶。由于篇幅限制耳鸯,這里不具體講怎么修改sshd端口,詳情請(qǐng)參考linux禁止root用戶遠(yuǎn)程登錄膀曾,并修改ssh端口這篇博客來(lái)進(jìn)行修改县爬。由于sshd是我們通過(guò)終端(包括輕量云自帶的這個(gè)黑窗口)連接服務(wù)器所依賴(lài)的一個(gè)服務(wù),修改了其端口以后添谊,將會(huì)造成輕量云自帶的終端無(wú)法正常連接到服務(wù)器财喳,因此,修改了sshd端口之后斩狱,后面就只能用終端軟件來(lái)連接服務(wù)器進(jìn)行操作耳高。另外要注意,修改了端口之后所踊,把修改后的端口添加到輕量云的防火墻中泌枪。
如果使用的是window10系統(tǒng),可以使用自帶的power shell或者cmd來(lái)連接騰訊云服務(wù)器秕岛。
打開(kāi)powershell窗口碌燕,輸入下面命令然后根據(jù)提示輸入密碼連接到服務(wù)器
ssh -p 24 root@1.1.1.1# 將24端口換成sshd服務(wù)修改后的端口误证,將1.1.1.1換成輕量云的ip
連接到服務(wù)器以后,需要把原來(lái)的容器刪除掉修壕,然后重新執(zhí)行一次啟動(dòng)的命令
sudo docker rm -f gitlab
sudo docker run --detach \
? --hostname gitlab.lixf.ink \
? --publish 443:443 --publish 80:80 --publish 22:22 \
? --name gitlab \
? --restart always \
? --volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
? --volume /data/gitlab/data:/var/opt/gitlab \
? gitlab/gitlab-ce:latest
因?yàn)槲覀冊(cè)趩?dòng)gitlab的時(shí)候愈捅,我們的配置文件和數(shù)據(jù)目錄等都掛載了宿主機(jī)的/data/gitlab目錄上宴胧,因此诬垂,即使我們刪除并重新啟動(dòng)了一個(gè)新的容器起暮,我們前面的配置和上傳的項(xiàng)目依然有效覆劈。
至此范删,一個(gè)支持HTTPS和SSH協(xié)議的gitlab搭建完成了奶躯。
本教程借助了騰訊云輕量服務(wù)器和gitlab提供的docker鏡像快速搭建了一個(gè)可用的gitlab代碼倉(cāng)庫(kù)捣鲸,并且通過(guò)進(jìn)一步的配置疙筹,使搭建的gitlab正確的支持了HTTPS協(xié)議以及SSH協(xié)議壶冒。在搭建的過(guò)程中缕题,由于騰訊輕量云自帶了Docker環(huán)境,使我們免去了自行搭建Docker環(huán)境的步驟胖腾。而且烟零,輕量云自帶的Docker環(huán)境已經(jīng)將docker的鏡像源設(shè)置為了騰訊云自帶的Docker鏡像源,拉取gitlab鏡像的速度也是非诚套鳎快锨阿,也節(jié)省了等待拉取鏡像的時(shí)間。