docker用來(lái)隔離應(yīng)用還是很方便的,一來(lái)本身的操作較為簡(jiǎn)單,二來(lái)資源占用也比虛擬機(jī)要小得多,三來(lái)也較為安全,因?yàn)橄駭?shù)據(jù)庫(kù)這樣的應(yīng)用不會(huì)再全局暴露端口,同時(shí)應(yīng)用間的通信通過(guò)加密和端口轉(zhuǎn)發(fā),更加安全。
Gitlab是目前比較流行的開(kāi)源類Github代碼管理平臺(tái)。Gitlab使用Rails開(kāi)發(fā),使用PostgreSQL或MySQL數(shù)據(jù)庫(kù),Redis做緩存。一般自己搭建私有代碼倉(cāng)庫(kù),Gitlab通常是首選。這里簡(jiǎn)單介紹一下dockerized Gitlab。
Gitlab的docker鏡像早已有人做好了,并且維護(hù)相當(dāng)不錯(cuò)。大家可以前往其GitHub倉(cāng)庫(kù)了解該鏡像的情況。官方repo的readme中已經(jīng)有詳細(xì)的安裝配置方案,這里我簡(jiǎn)單的梳理一下部署流程。
安裝Docker
這里以Ubuntu 14.04發(fā)行版為例,在bash中輸入一下命令安裝最新的docker:
sudo apt-get purge docker.io
curl -s https://get.docker.io/ubuntu/ | sudo sh
sudo apt-get update
sudo apt-get install lxc-docker
注意: 如果你使用了阿里云最新推出的Docker鏡像,那么可以省略本節(jié)的步驟。因?yàn)榘⒗镌频倪@個(gè)鏡像已經(jīng)自帶了1.2版的docker,版本比較新,可以直接使用。
安裝docker-gitlab
使用如下命令可以使Docker下載對(duì)應(yīng)版本的Gitlab鏡像:
docker pull sameersbn/gitlab:7.5.3
上面的命令下載7.5.3版的Gitlab,如果想下載最新版本,可以輸入以下命令:
docker pull sameersbn/gitlab:latest
待下載完成后就算完成安裝了。
也可以Clone剛才的提到的倉(cāng)庫(kù),然后在本機(jī)上build鏡像:
git clone https://github.com/sameersbn/docker-gitlab.git
cd docker-gitlab
docker build --tag="$USER/gitlab" .
注意上面最后一行命令結(jié)尾有一個(gè)"."符號(hào),不要掉了。
安裝PostgreSQL
Gitlab推薦使用PostgreSQL作為數(shù)據(jù)庫(kù)。既然使用了docker,那么我們?yōu)楹尾豢紤]把所有的組件都用docker包裝起來(lái)?我們一樣可以下載PostgreSQL的鏡像完成安裝,這種安裝更加便捷。
首先輸入以下命令下載PostgreSQL鏡像:
docker pull sameersbn/postgresql:latest
然后我們要為數(shù)據(jù)庫(kù)默認(rèn)的表空間建立目錄以存放數(shù)據(jù):
mkdir -p /opt/postgresql/data
這里/opt/postgresql/data 部分可以替換成你自己希望建立的地址。
如果是使用SELinux,那么還需要改變一下這個(gè)目錄的安全設(shè)置:
sudo chcon -Rt svirt_sandbox_file_t /opt/postgresql/data
如果沒(méi)有使用SELinux,可以跳過(guò)上面一條命令。
最后使用以下命令行啟動(dòng)數(shù)據(jù)庫(kù):
docker run --name=postgresql -d -e 'DB_NAME=gitlabhq_production' -e 'DB_USER=gitlab' -e 'DB_PASS=password' -v /opt/postgresql/data:/var/lib/postgresql sameersbn/postgresql:latest
這里,"-e"選項(xiàng)后面的內(nèi)容請(qǐng)不要隨意變更,這里的配置都是Gitlab默認(rèn)的數(shù)據(jù)庫(kù)配置,如果沒(méi)有在后面Gitlab鏡像啟動(dòng)的設(shè)置里面做相應(yīng)的修改的話,這里的修改會(huì)讓程序無(wú)法正常運(yùn)行。
安裝Redis
同樣,我們可以使用docker來(lái)安裝Redis:
docker pull sameersbn/redis:latest
然后啟動(dòng)它:
docker run --name=redis -d sameersbn/redis:latest
啟動(dòng)gitlab
在最終啟動(dòng)Gitlab之前,我們還需要為Gitlab創(chuàng)建一個(gè)目錄用來(lái)存放提交上來(lái)的代碼,docker-gitlab內(nèi)部使用/home/git/data 這個(gè)目錄存放代碼,我們?cè)谌萜魍獠縿?chuàng)建一個(gè)目錄然后在啟動(dòng)的時(shí)候掛載到這個(gè)路徑即可:
mkdir -p /opt/gitlab/data
mkdir -p /opt/gitlab/backups
同樣,如果使用SELinux,需要修改目錄的安全配置:
sudo chcon -Rt svirt_sandbox_file_t /opt/gitlab/data
sudo chcon -Rt svirt_sandbox_file_t /opt/gitlab/backups
在完成上面所有的步驟以后,我們可以用以下命令啟動(dòng)Gitlab:
docker run --name='gitlab' -d -e 'GITLAB_HOST=192.168.57.91' -e 'GITLAB_PORT=10080' -e 'GITLAB_SSH_PORT=10022' -e 'GITLAB_BACKUPS=weekly' -e 'DB_TYPE=postgres' -e 'DB_HOST=172.17.0.28' -e 'DB_NAME=gitlabhq_production' -e 'DB_USER=gitlab' -e 'DB_PASS=password' -e 'REDIS_HOST=172.17.0.10' -e 'REDIS_PORT=6379' -p 10022:22 -p 10080:80 -v /gitlab/data:/home/git/data -v /gitlab/backups:/home/git/data/backups -v /gitlab/log:/var/log/gitlab sameersbn/gitlab:latest3
上面的命令將使用10080作為Gitlab的Web訪問(wèn)端口,10022將作為ssh push和pull代碼的端口。
在本地可以使用瀏覽器打開(kāi)http://192.168.57.91:10080/users/sign_in 來(lái)訪問(wèn)Gitlab,初始登錄網(wǎng)站使用root賬戶,用戶名為root ,密碼為:5iveL!fe ,登錄后需要立即修改密碼。
網(wǎng)頁(yè)打開(kāi)giblab的管理界面:
http://192.168.57.91:10080/users/sign_in
這里解釋一下各參數(shù):
-d: 后臺(tái)運(yùn)行
-e:配置Gitlab運(yùn)行的環(huán)境變量,這個(gè)參數(shù)很重要,具體有哪些環(huán)境變量,后面列舉
-p: 端口轉(zhuǎn)發(fā)規(guī)則
-v: 共享目錄掛載,即docker容器內(nèi)外數(shù)據(jù)共享
Gitlab的環(huán)境變量配置比較多,這里列舉一下比較重要的Gitlab的環(huán)境變量:
- GITLAB_HOST: 這個(gè)是Gitlab服務(wù)器的hostname,你需要將此設(shè)定為網(wǎng)站的域名或者ip(不帶端口號(hào)),默認(rèn)值為
localhost ,這個(gè)值會(huì)被Gitlab用來(lái)生成repo的鏈接,所以必須要設(shè)置。否則,在創(chuàng)建的repo中,會(huì)發(fā)現(xiàn)所有的repo鏈接都是以localhost 為hostname。 - GITLAB_PORT Gitlab網(wǎng)站的訪問(wèn)端口,這里的設(shè)置要結(jié)合端口轉(zhuǎn)發(fā)一起設(shè)置,否則會(huì)導(dǎo)致網(wǎng)站無(wú)法訪問(wèn),默認(rèn)值為
80 - GITLAB_SSH_PORT Gitlab的SSH代碼提交方式使用的SSH端口,這里的設(shè)置要結(jié)合端口轉(zhuǎn)發(fā)一起設(shè)置,否則會(huì)導(dǎo)致代碼無(wú)法提交,默認(rèn)值為
22 。如果是在VPS上部署,這個(gè)值請(qǐng)使用別的端口,比如上面提到的10022 端口,否則會(huì)與VPS原本的SSH端口產(chǎn)生沖突,造成SSH無(wú)法登錄VPS - GITLAB_BACKUPS Gitlab的自動(dòng)備份配置,有
disable , daily , weekly , monthly 四個(gè)可選值,默認(rèn)為disable 。建議打開(kāi)自動(dòng)備份 - GITLAB_BACKUP_DIR Gitlab自動(dòng)備份目錄,默認(rèn)值為
/home/git/data/backups
其他的參數(shù)請(qǐng)參考repo中的README.md.
FAQ:
如果在clone項(xiàng)目時(shí)報(bào):Permission denied (publickey). 錯(cuò)誤!處理方法如下,此方法也可以解決github的同樣問(wèn)題:
1.ssh-keygen -t rsa -C "xxxx@xxx.com" #這里你的郵箱地址生成一對(duì)加密key
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/gitlab_rsa #輸入你要生成的gitlab私鑰文件
Enter passphrase (empty for no passphrase): #輸入你在gitlab上的密碼
+--[ RSA 2048]----+
| o. |
| ... |
| .. |
| + . |
| = S.o o |
| o * +.+ . . |
| + ..... . E|
| . ...o |
| ..+o. |
+-----------------+
Enter same passphrase again:
2.把私鑰身份文件加入到ssh_config 里面。
$ vim /etc/ssh/ssh_config 找到 IdentityFile 增加一行 IdentityFile ~/.ssh/gitlab_rsa
3.在gitlab_rsa的目錄里找到 gitlab_rsa.pub 公鑰文件。復(fù)制文件內(nèi)容,通過(guò)gitlab的web管理頁(yè),添加到你的項(xiàng)目里。
再次嘗試,即可:
git clone ssh://git@192.168.57.91:10022/songaimin/test.git
|