《Git團隊協作》之Docker快速搭建GitLab私有倉庫

阿狸不歌發表於2019-01-23

Git在當前團隊開發中重要作用已然無須多言。Git、GitHub、Bitbucket、GitLab之間的聯絡與區別是什麼,看一下《Git團隊協作》這本書也能搞清楚。

Git團隊協作》封面

本文的主要目的則是對第12章《GitLab 上自行管理的協作》進行一些補充。在本書中安裝GitLab是通過虛擬機器的方式,略微重了些,如果我們可以用Docker來安裝,是不是可以更方便些呢( 離不開的工具之《Docker開發指南》)?答案當然是可以的!


基礎指令

最基礎的docker 命令如下:

sudo docker run -d \
    --hostname gitlab.example.com \
    -p 443:443 \
    -p 80:80 \
    -p 22:22 \
    --name gitlab \
    --restart always \
    -v /srv/gitlab/config:/etc/gitlab \
    -v /srv/gitlab/logs:/var/log/gitlab \
    -v /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

下面解釋一下重要的引數

其中--hostname 引數對應的是私有倉庫的域名,這個域名可以是公開註冊的也可以是自己私有dns命名的,但是域名對應的ip必須與部署GitLab的伺服器的ip保持一致。

-p 對應的是埠對映,443埠用於HTTPS服務、80埠用於HTTP服務、22埠用於ssh服務。我們可以根據實際需要和伺服器的情況開放相應的埠:比如我們可以只使用HTTPS服務,那麼就只需要對映443埠即可。

--name 是容器名。

--restart 為true的時候,伺服器重啟的時候,容器也會被自動重啟。

-v 是伺服器目錄與容器目錄的對應關係,會把GitLab容器上的檔案、資料儲存在伺服器的對應目錄(實際上伺服器上的目錄名也可以自擬)上,即便容器被刪除了,只要資料還在,重新啟動一個容器依然可以提供服務。

最後一行 gitlab/gitlab-ce:latest 是映象的名稱和版本, gitlab/gitlab-ce 是社群版、 gitlab/gitlab-ee是企業版。


實現HTTPS服務的細節

需要注意的是要想讓GitLab真正提供HTTPS服務,還必須通過證書加密?,加密證書可以免費申請、購買或者通過自簽名的方式獲得(《HTTPS權威指南》),此處不再贅述。

1、下面假設你已有一個域名 gitlab.example.com,並且已經獲得了該域名對應的證書:gitlab.example.com.key、gitlab.example.com.crt 。

2、在伺服器的 "/srv/gitlab/config" 目錄(對應的是容器裡的"/etc/gitlab"目錄)下建立一個 ssl目錄

sudo mkdir -p /srv/gitlab/config/ssl

3、將gitlab.example.com.key、gitlab.example.com.crt 拷貝到伺服器的 "/srv/gitlab/config/ssl"目錄中

4、進入gitlab容器並開啟配置檔案

sudo docker exec -it gitlab vi /etc/gitlab/gitlab.rb

5、將檔案中的相關行修改如下:

external_url "https://gitlab.example.com"
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key"

6、重啟容器

sudo docker restart gitlab

7、訪問 https://gitlab.example.com,就可以進入到相應的GitLab私有倉庫頁面了。


當然,上述的操作還是有些繁瑣,有沒有更好的方法?請見下集 《Docker Compose例項之nginx反向代理GitLab

相關文章