拉取鏡像及啟動(dòng)容器
首先使用dao加速器拉取daocker鏡像:
dao pull gitlab/gitlab-ce
創(chuàng)建volumes
簡單來說volumes够滑,就是可以映射到容器中去的容器外部存儲(chǔ)空間吕世。你可以將一些比價(jià)通用的配置文件,數(shù)據(jù)寞冯,或者是代碼等都使用volumes的形式存儲(chǔ)在容器所在的宿主機(jī)器上。這樣不僅可以永久保留數(shù)據(jù)吮龄,保證數(shù)據(jù)的安全性。同時(shí)還可以方便的修改volumes中的內(nèi)容母债,然后重新映射到容器中尝抖,這對于需要經(jīng)常動(dòng)態(tài)修改文件的容器非常有用。
在本次部署gitlab的時(shí)候昧辽,創(chuàng)建三個(gè)volumes,分別是/mnt/volumes/gitlab下的 config搅荞,logs框咙,data目錄喇嘱。
啟動(dòng)一個(gè)gitlab容器
sudo docker run --detach \
--hostname git.xiaohuruwei.com \
--publish 8443:443 --publish 8080:80 --publish 2222:22 \
--name gitlab \
--restart always \
--volume /mnt/volumes/gitlab/config:/etc/gitlab \
--volume /mnt/volumes/gitlab/logs:/var/log/gitlab \
--volume /mnt/volumes/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
命令參數(shù)解釋:
--hostname
指定容器中綁定的域名塞栅,會(huì)在創(chuàng)建鏡像倉庫的時(shí)候使用到,這里綁定git.xiaohuruwei.com
--publish
端口映射作烟,冒號前面是宿主機(jī)端口,后面是容器expose出的端口
--volume
volume 映射庄敛,冒號前面是宿主機(jī)的一個(gè)文件路徑,后面是容器中的文件路徑
配置nginx绷雏,支持https
參考:gitlab set nginx
nginx 配置文件
server {
listen 80;
server_name git.xiaohuruwei.com;
access_log /var/log/nginx/gitlab.xiaohuruwei.access.log;
error_log /var/log/nginx/gitlab.xiaohuruwei.error.log;
rewrite ^ https://git.xiaohuruwei.com;
}
https proxy
server {
listen 443 ssl;
server_name git.xiaohuruwei.com;
access_log /var/log/nginx/https-gitlab.xiaohuruwei.access.log;
error_log /var/log/nginx/https-gitlab.xiaohuruwei.error.log;
# ssl 證書配置涎显,這里使用的是自己生成的證書,在訪問時(shí)會(huì)提示證書問題期吓,選擇相信即可。
# 如果想要公認(rèn)的證書讨勤,需要在網(wǎng)絡(luò)上的一些授權(quán)中心生成
ssl on;
ssl_certificate /etc/nginx/ssl/getbase.crt;
ssl_certificate_key /etc/nginx/ssl/getbase_nopass.key;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://localhost:8443;
}
}
開放gitlab的https支持
僅僅由nginx反向代理https是不行的晨另,因?yàn)檫€需要打開gitlab的https支持。
- 修改配置文件刨晴,在/mnt/volumes/gitlab/config/ 目錄下的gitlab.rb中添加:
# note the 'https' below
external_url "https://gitlab.example.com"
-
新建ssl目錄路翻,同時(shí)在該目錄下添加ssl證書文件,命名要與上述域名中保持一致
git.xiaohuruwei.com.crt
git.xiaohuruwei.com.key 重新啟動(dòng)容器
docker restart gitlab
訪問gitlab測試
- 打開web界面蝶桶,默認(rèn)登錄名為root,密碼為5iveL!fe(已經(jīng)改為厘米腳印的默認(rèn)密碼)真竖,新建一個(gè)project倉庫:test
- 因?yàn)閟sl證書是自己生成的儡蔓,并不具有全網(wǎng)通用性,因此只能先選擇相信證書召锈。在本地設(shè)置環(huán)境變量:
export GIT_SSL_NO_VERIFY=1
- 然后克隆倉庫: git clone https://git.xiaohuruwei.com/root/test.git
開啟郵件服務(wù)
默認(rèn)的郵件服務(wù)不太好使,所以這里配置自己的郵件服務(wù)涨岁。參考官方gitlab stmp文檔。
使用163郵箱, 按照官方文檔配置后蹬铺,會(huì)發(fā)現(xiàn)發(fā)送郵件沒有起作用秉撇。
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "xiaohuruwei@163.com"
gitlab_rails['smtp_password'] = "xxxx"
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
查看log時(shí),由于log比較雜亂琐馆,沒有發(fā)現(xiàn)問題,后來在ruby社區(qū)發(fā)現(xiàn)有人解決過同樣的問題:
GitLab 配置通過 smtp.163.com 發(fā)送郵件
以及網(wǎng)易的官方解釋:
網(wǎng)易服務(wù)器smtp機(jī)器要求身份驗(yàn)證帳號和發(fā)信帳號必須一致瘦麸,如果用戶在發(fā)送郵件時(shí),身份驗(yàn)證帳號和發(fā)件人帳號是不同的厉碟,因此拒絕發(fā)送。
所以又添加了兩行配置后測試可以正常使用了:
gitlab_rails['gitlab_email_from'] = "xiaohuruwei@163.com"
user['git_user_email'] = "xiaohuruwei@163.com"
ssh方式訪問
因?yàn)槭鞘褂胐ocker部署的箍鼓,通過ssh方式(比如git clone git@git.xiaohuruwei.com)訪問會(huì)有兩層認(rèn)證:
- 一層是freelancer服務(wù)器的認(rèn)證
- 另一層是gitlab的認(rèn)證勿她。
后者需要使用ssh-key
前者可能需要ssh本身的反向代理(現(xiàn)在使用的nginx不支持除http,https以外的反向代理)逢并,
現(xiàn)在發(fā)現(xiàn)使用端口轉(zhuǎn)發(fā)的形式比較困難,但是可以改變默認(rèn)的gitlab的ssh端口為非標(biāo)準(zhǔn)端口:
直接修改gitlab配置文件中的變量:
gitlab_shell_ssh_port = 2222
然后重新啟動(dòng)docker容器背稼,就可以在web界面中看到相應(yīng)的ssh地址發(fā)生了改變:
ssh://git@git.xiaohuruwei.com:2222/root/test.git 然后就直接可以繼續(xù)使用git clone來繼續(xù)操作了