做爲互聯網工做者,相信對 GitHub 這個 全球最大的同性交友網站 必定不會陌生,GitHub 使用的是目前如日中天的 Git 分佈式版本控制系統。html
Git 是什麼?Git 是目前世界上最早進的分佈式版本控制系統,沒有之一!關於 Git 與 GitHub 的相關內容能夠查看我往期的教程。而本篇博客要介紹的是如何搭建一套私人的相似於 GitHub 的網站【GitLab】,它能夠爲我的、組織、企業提供項目或代碼的管理功能。git
具體請查看我往期的博客文章:github
GitLab
的搭建有多種方式,在本篇博客將介紹一種比較簡單快捷的方式,那就是使用 Docker 來搭建。docker
想要使用 Docker 來搭建 GitLab 的話須要先安裝 Docker, 關於 Docker 的詳細安裝步驟已經在個人上一篇博客中介紹了。請前往查看:Docker 之 ubuntu 安裝。ubuntu
在按照上篇博客成功安裝了 Docker 以後,咱們就能夠在 Docker 中來搭建 GitLab 了。vim
GitLab
分爲 社區版(Community Edition,縮寫爲 CE)和 企業版(Enterprise Edition,縮寫爲 EE)。社區版是免費的,而企業版包含一些收費服務,通常來講我的開發者用社區版就足夠了,本篇博文的教程也只是針對社區版。瀏覽器
首先須要先下載 GitLab CE 的鏡像,使用下面的命令進行下載,由於文件較大,因此可能須要一點時間,耐心等待便可。bash
# 不加 tag 則默認爲最新版本 latest (通常使用這種) $ sudo docker pull gitlab/gitlab-ce # 若是須要下載其餘版本,加上對應的 tag 便可,如: $ sudo docker pull gitlab/gitlab-ce:rc
下載完成以後只須要一行命令便可啓動 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
這條命令很長,咱們來分解一下看看每行都表明什麼意思。dom
$ 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
如上圖所示,能夠看到 GitLab
已經在運行了,其餘有一個屬性 STATUS
爲 health: starting
,說明 gitlab 的服務正在啓動中,尚未啓動完畢。等這個狀態變成 healthy
時則說明已經部署完成,能夠訪問了。使用 ip addr
命令查看系統的 IP 地址,而後在瀏覽器輸入地址便可訪問。
想要讓 GitLab 給你發送郵件,還要配置一下郵件服務器,這裏以QQ郵箱的 IMAP/SMTP服務 來配置。
打開郵箱->設置->帳戶,而後開啓 IMAP/SMTP服務,而後根據文檔獲取 受權碼 ,這步比較重要。
而後打開在系統中打開文件 /srv/gitlab/config/gitlab.rb
文件,可使用gedit
、vi
、vim
等等編輯器編輯。找到 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****71@qq.com" # * 你的郵箱帳號,也能夠是ge**lin@qq.com等 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****71@qq.com' # * 發件人信息,必須跟‘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('gekylin@gmail.com', 'Message Subject', 'Message Body').deliver_now
測試完成以後重啓 gitlab 便可。
在以前第一次運行 gitlab 容器的時候,有一個參數 hostname
爲 gitlab.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
關於Docker
及 GitLab
的知識還有不少,我會在後續的文章繼續介紹,歡迎您持續關注本博客。
更多技術文章歡迎關注個人博客主頁:http://JemGeek.com