拉取鏡像及啟動容器
首先使用dao加速器拉取daocker鏡像:
dao pull gitlab/gitlab-ce
創(chuàng)建volumes
簡單來說volumes,就是可以映射到容器中去的容器外部存儲空間。你可以將一些比價通用的配置文件,數(shù)據(jù),或者是代碼等都使用volumes的形式存儲在容器所在的宿主機(jī)器上。這樣不僅可以永久保留數(shù)據(jù),保證數(shù)據(jù)的安全性。同時還可以方便的修改volumes中的內(nèi)容,然后重新映射到容器中,這對于需要經(jīng)常動態(tài)修改文件的容器非常有用。
在本次部署gitlab的時候,創(chuàng)建三個volumes,分別是/mnt/volumes/gitlab下的 config,logs,data目錄。
啟動一個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
指定容器中綁定的域名,會在創(chuàng)建鏡像倉庫的時候使用到,這里綁定git.xiaohuruwei.com
--publish
端口映射,冒號前面是宿主機(jī)端口,后面是容器expose出的端口
--volume
volume 映射,冒號前面是宿主機(jī)的一個文件路徑,后面是容器中的文件路徑
配置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 證書配置,這里使用的是自己生成的證書,在訪問時會提示證書問題,選擇相信即可。
# 如果想要公認(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是不行的,因為還需要打開gitlab的https支持。
- 修改配置文件,在/mnt/volumes/gitlab/config/ 目錄下的gitlab.rb中添加:
# note the 'https' below
external_url "https://gitlab.example.com"
-
新建ssl目錄,同時在該目錄下添加ssl證書文件,命名要與上述域名中保持一致
git.xiaohuruwei.com.crt
git.xiaohuruwei.com.key 重新啟動容器
docker restart gitlab
訪問gitlab測試
- 打開web界面,默認(rèn)登錄名為root,密碼為5iveL!fe(已經(jīng)改為厘米腳印的默認(rèn)密碼),新建一個project倉庫:test
- 因為ssl證書是自己生成的,并不具有全網(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郵箱, 按照官方文檔配置后,會發(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時,由于log比較雜亂,沒有發(fā)現(xiàn)問題,后來在ruby社區(qū)發(fā)現(xiàn)有人解決過同樣的問題:
GitLab 配置通過 smtp.163.com 發(fā)送郵件
以及網(wǎng)易的官方解釋:
網(wǎng)易服務(wù)器smtp機(jī)器要求身份驗證帳號和發(fā)信帳號必須一致,如果用戶在發(fā)送郵件時,身份驗證帳號和發(fā)件人帳號是不同的,因此拒絕發(fā)送。
所以又添加了兩行配置后測試可以正常使用了:
gitlab_rails['gitlab_email_from'] = "xiaohuruwei@163.com"
user['git_user_email'] = "xiaohuruwei@163.com"
ssh方式訪問
因為是使用docker部署的,通過ssh方式(比如git clone git@git.xiaohuruwei.com)訪問會有兩層認(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
然后重新啟動docker容器,就可以在web界面中看到相應(yīng)的ssh地址發(fā)生了改變:
ssh://git@git.xiaohuruwei.com:2222/root/test.git 然后就直接可以繼續(xù)使用git clone來繼續(xù)操作了