使用 Docker 搭建 GitLab

gitlab-logo.png

作爲互聯網工作者,相信對 GitHub 這個 全球最大的同性交友網站 一定不會陌生,GitHub 使用的是目前如日中天的 Git 分佈式版本控制系統。

Git 是什麼?Git 是目前世界上最先進的分佈式版本控制系統,沒有之一!關於 GitGitHub 的相關內容可以查看我往期的教程。而本篇博客要介紹的是如何搭建一套私人的類似於 GitHub 的網站【GitLab】,它可以爲個人、組織、企業提供項目或代碼的管理功能。

Git 與 GitHub

具體請查看我往期的博客文章:

安裝環境

GitLab 的搭建有多種方式,在本篇博客將介紹一種比較簡單快捷的方式,那就是使用 Docker 來搭建。

  • 系統:Ubuntu 18.04
  • Docker: 18.9.05
  • GitLab: 最新版本 latest
  • 需求內存:最低 2 GB

想要使用 Docker 來搭建 GitLab 的話需要先安裝 Docker, 關於 Docker 的詳細安裝步驟已經在我的上一篇博客中介紹了。請前往查看:Docker 之 ubuntu 安裝

搭建 GitLab

在按照上篇博客成功安裝了 Docker 之後,我們就可以在 Docker 中來搭建 GitLab 了。

GitLab 分爲 社區版(Community Edition,縮寫爲 CE)和 企業版(Enterprise Edition,縮寫爲 EE)。社區版是免費的,而企業版包含一些收費服務,一般來說個人開發者用社區版就足夠了,本篇博文的教程也只是針對社區版。

首先需要先下載 GitLab CE 的鏡像,使用下面的命令進行下載,因爲文件較大,所以可能需要一點時間,耐心等待即可。

# 不加 tag 則默認爲最新版本 latest (一般使用這種)
$ sudo docker pull gitlab/gitlab-ce

# 如果需要下載其他版本,加上對應的 tag 即可,如:
$ sudo docker pull gitlab/gitlab-ce:rc

docker-pull-gitlab.png

下載完成之後只需要一行命令即可啓動 GitLab ,複製下面的命令直接運行即可。

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

這條命令很長,我們來分解一下看看每行都代表什麼意思。

$ sudo docker run --detach \
  --hostname gitlab.example.com \   # 設置主機名或域名
  --publish 443:443 --publish 80:80 --publish 22:22 \ # 本地端口的映射
  --name gitlab \     # gitlab-ce 的鏡像運行成爲一個容器,這裏是對容器的命名
  --restart always \  # 設置重啓方式,always 代表一直開啓,服務器開機後也會自動開啓的
  --volume /srv/gitlab/config:/etc/gitlab \   # 將 gitlab 的配置文件目錄映射到 /srv/gitlab/config 目錄中
  --volume /srv/gitlab/logs:/var/log/gitlab \ # 將 gitlab 的log文件目錄映射到 /srv/gitlab/logs 目錄中
  --volume /srv/gitlab/data:/var/opt/gitlab \ # 將 gitlab 的數據文件目錄映射到 /srv/gitlab/data 目錄中
  gitlab/gitlab-ce:latest  # 需要運行的鏡像

運行成功之後,可以使用下面的命令列表所有的容器,當然其中應該包括剛運行的 gitlab容器。

$ sudo docker container ls

docker-run-gitlab.png

如上圖所示,可以看到 GitLab 已經在運行了,其他有一個屬性 STATUShealth: starting,說明 gitlab 的服務正在啓動中,還沒有啓動完畢。等這個狀態變成 healthy 時則說明已經部署完成,可以訪問了。使用 ip addr 命令查看系統的 IP 地址,然後在瀏覽器輸入地址即可訪問。

gitlab-login.png

gitlab-show.png

配置郵件服務器

想要讓 GitLab 給你發送郵件,還要配置一下郵件服務器,這裏以QQ郵箱的 IMAP/SMTP服務 來配置。

打開郵箱->設置->賬戶,然後開啓 IMAP/SMTP服務,然後根據文檔獲取 授權碼 ,這步比較重要。

然後打開在系統中打開文件 /srv/gitlab/config/gitlab.rb 文件,可以使用geditvivim等等編輯器編輯。找到 Email Settings的註釋位置,然後添加以下內容:

### Email Settings
gitlab_rails['smtp_enable'] = true # 開啓 SMTP 功能
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465 # 端口不可以選擇587,測試過會發送郵件失敗
gitlab_rails['smtp_user_name'] = "212****[email protected]" # * 你的郵箱賬號,也可以是ge**[email protected]等
gitlab_rails['smtp_password'] = "cdns********fdgc" # * 授權碼,不是密碼
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '212****[email protected]' # * 發件人信息,必須跟‘smtp_user_name’保持一致,否則報錯
gitlab_rails['smtp_domain'] = "qq.com" # 修改並不影響 可修改爲exmail.qq.com/james.com 經測試完全不影響,刪除也不影響,並且發送的郵件都是一樣的。

上面這些參數,除了註釋開頭加了 * 的需要修改爲你自己的信息之外,其他信息照寫即可,配置完成後保存。然後輸入下面的命令使配置生效。

# 使用 Docker安裝的 gitlab 只能使用下面的命令,gitlab-ctl reconfigure命令是不會生效的
$ sudo docker exec gitlab gitlab-ctl reconfigure

使配置生效之後我們可以使用 gitlab 自帶的工具進行一下測試。依次執行下面的命令:

# 開啓 gitlab 的 bash 工具
$ sudo docker exec -it gitlab bash

# 開啓 gitlab-rails 工具
$ gitlab-rails console production

# 發送郵件進行測試,換自己郵箱哈~
Notify.test_email('[email protected]', 'Message Subject', 'Message Body').deliver_now

mail-test.png

測試完成之後重啓 gitlab 即可。

配置 Git 倉庫訪問路徑

在之前第一次運行 gitlab 容器的時候,有一個參數 hostnamegitlab.example.com , 如果你沒有配置相應域名的話,你的倉庫的地址將會變爲下面這樣:

如果域名不存在的話,這個地址是無法進行 clone 的。

爲了解決這個問題,我們可以設置成 IP 或 你配置了的域名來訪問。

打開文件 /srv/gitlab/config/gitlab.rb 文件並找到 # external_url 'GENERATED_EXTERNAL_URL' 這行,去掉註釋,並按照下面的格式修改。

# ip 形式
external_url 'http://192.168.1.44'

# 域名形式
external_url 'http://JemGeek.com'

# 子域名
external_url 'http://gitlab.JemGeek.com'

# 其他形式
external_url 'http://JemGeek.com/gitlab'

以上形式都是可以的。修改完成後,輸入命令 sudo docker exec gitlab gitlab-ctl reconfigure 使配置生效,然後重啓 gitlab 即可。

重啓之後,倉庫的地址將變爲下面這樣,以 ip 形式爲例:

容器的常用操作

在 Docker 中,gitlab 是作爲一個容器存在的,gitlab 的所有程序,配置,依賴等都在這個容器中。下面列出一些容器的常用操作命令。

# 開啓 gitlab 容器
# 上面那個特別長的那一條命令僅在第一次運行 gitlab 的時候需要
# 之後開啓 gitlab 使用下面的命令即可
$ sudo docker start gitlab

# 關閉 gitlab
$ sudo docker stop gitlab

# 重啓 gitlab
$ sudo docker restart gitlab

其他

關於DockerGitLab 的知識還有很多,我會在後續的文章繼續介紹,歡迎您持續關注本博客。

更多技術文章歡迎關注我的博客主頁:http://JemGeek.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章