使用docker部署gitlab應用

拉取鏡像及啟動容器

參考:gitlab documentation

首先使用dao加速器拉取daocker鏡像:

  dao pull gitlab/gitlab-ce

創建volumes

簡單來說volumes,就是可以映射到容器中去的容器外部存儲空間。你可以將一些比價通用的配置文件,數據,或者是代碼等都使用volumes的形式存儲在容器所在的宿主機器上。這樣不僅可以永久保留數據,保證數據的安全性。同時還可以方便的修改volumes中的內容,然后重新映射到容器中,這對于需要經常動態修改文件的容器非常有用。
在本次部署gitlab的時候,創建三個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

命令參數解釋:

--hostname
指定容器中綁定的域名,會在創建鏡像倉庫的時候使用到,這里綁定git.xiaohuruwei.com

--publish
端口映射,冒號前面是宿主機端口,后面是容器expose出的端口

--volume
volume 映射,冒號前面是宿主機的一個文件路徑,后面是容器中的文件路徑

配置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 證書配置,這里使用的是自己生成的證書,在訪問時會提示證書問題,選擇相信即可。
    # 如果想要公認的證書,需要在網絡上的一些授權中心生成
    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界面,默認登錄名為root,密碼為5iveL!fe(已經改為厘米腳印的默認密碼),新建一個project倉庫:test
  • 因為ssl證書是自己生成的,并不具有全網通用性,因此只能先選擇相信證書。在本地設置環境變量:
  export GIT_SSL_NO_VERIFY=1

開啟郵件服務

默認的郵件服務不太好使,所以這里配置自己的郵件服務。參考官方gitlab stmp文檔

使用163郵箱, 按照官方文檔配置后,會發現發送郵件沒有起作用。

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比較雜亂,沒有發現問題,后來在ruby社區發現有人解決過同樣的問題:
GitLab 配置通過 smtp.163.com 發送郵件
以及網易的官方解釋:
網易服務器smtp機器要求身份驗證帳號和發信帳號必須一致,如果用戶在發送郵件時,身份驗證帳號和發件人帳號是不同的,因此拒絕發送。
所以又添加了兩行配置后測試可以正常使用了:

gitlab_rails['gitlab_email_from'] = "xiaohuruwei@163.com"
user['git_user_email'] = "xiaohuruwei@163.com"

ssh方式訪問

因為是使用docker部署的,通過ssh方式(比如git clone git@git.xiaohuruwei.com)訪問會有兩層認證:

  • 一層是freelancer服務器的認證
  • 另一層是gitlab的認證。

后者需要使用ssh-key
前者可能需要ssh本身的反向代理(現在使用的nginx不支持除http,https以外的反向代理),

現在發現使用端口轉發的形式比較困難,但是可以改變默認的gitlab的ssh端口為非標準端口:
直接修改gitlab配置文件中的變量:

gitlab_shell_ssh_port = 2222

然后重新啟動docker容器,就可以在web界面中看到相應的ssh地址發生了改變:
ssh://git@git.xiaohuruwei.com:2222/root/test.git 然后就直接可以繼續使用git clone來繼續操作了

關于ssl證書參考:

https那些事,ssl證書

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容