經過 docker 搭建自用的 gitlab 服務

前言

git 是當下如日中天的版本管理系統。如今若是不是工做在 git 版本管理系統之下,幾乎都很差意思和人打招呼了。有不少現成的互聯網的 git 服務提供給你們使用,例如號稱程序員社交網絡的 GitHub,還有低調好用的 bitbucket 。這些給我的使用或者公司用來作開源使用都沒有什麼問題。但若是在部門內推廣使用就會涉及到代碼不能公開或者額外的費用的問題。本人原來在部門內採用的是手工在 linux 服務器上來管理代碼倉庫。權限無法設置,也很是不方便。因此也一直很苦惱。linux

正好 gitlab 公司提供了 gitlab 社區版,看了看基本知足了部門內 git 管理的需求。gitlab 提供了各類各樣的安裝方式,最方便的固然仍是 docker 方式的安裝,適合我這種不想多折騰的。抽空搭建了一個。也趟了幾個坑,將步驟記錄以下,但願對其餘有此需求的人有所幫助。git

docker 安裝

既然是基於 docker 來安裝 gitlab ,首先是安裝 docker 環境了。我是在 centos 7 的基礎上安裝的。根據官網的指南程序員

刪除舊版本的 docker

舊版本的 docker 的叫作 docker 或者 docker-engine,若是系統中已經安裝舊版本,則須要刪除。經過一下命令刪除舊的 docker 版本github

yum remove docker docker-common docker-selinux docker-engine
複製代碼

增長 docker yum 源

新的 docker 叫作 docker-ce ,若是第一次安裝 docker-ce 須要設置 docker-ce 的 yum 源。用以下的命令來增長 docker-ce 的yum 源redis

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-test
複製代碼

安裝 dokcer-ce

首先咱們查看全部有效的 docker-ce 的版本docker

yum list docker-ce --showduplicates | sort -r
複製代碼

獲得以下的列表json

docker-ce.x86_64         17.12.0.ce-1.el7.centos              docker-ce-test   
docker-ce.x86_64         17.12.0.ce-1.el7.centos               docker-ce-stable 
docker-ce.x86_64         17.12.0.ce-1.el7.centos               @docker-ce-stable
docker-ce.x86_64         17.12.0.ce-0.4.rc4.el7.centos         docker-ce-test   
docker-ce.x86_64         17.12.0.ce-0.3.rc3.el7.centos         docker-ce-test   
docker-ce.x86_64         17.12.0.ce-0.2.rc2.el7.centos         docker-ce-test   
docker-ce.x86_64         17.12.0.ce-0.1.rc1.el7.centos         docker-ce-test   
docker-ce.x86_64         17.11.0.ce-1.el7.centos               docker-ce-test   
docker-ce.x86_64         17.11.0.ce-0.4.rc4.el7.centos         docker-ce-test   
...
docker-ce.x86_64         17.03.1.ce-0.1.rc1.el7.centos         docker-ce-test   
docker-ce.x86_64         17.03.0.ce-1.el7.centos               docker-ce-stable
複製代碼

從這裏能夠看到最新的穩定版本是 17.12.0.ce。咱們用下面的命令選擇安裝該版本windows

yum install docker-ce-17.12.0.ce
複製代碼

自定義 docker 配置

由於衆所周知的緣由,訪問 docker 的中央倉庫下載 docker 鏡像的速度很是慢。爲了得到較好的體驗,咱們須要配置一個尋找一個國內的鏡像加速服務。centos

默認狀況下,docker 將運行的目錄配置到了/var/lib/docker 目錄下。一般這個目錄是在 linux 的根分區下,空間比較有限,因此咱們須要將 docker 的運行目錄配置到其餘目錄下。安全

鏡像加速服務可使用阿里雲的鏡像加速服務。註冊阿里雲的用戶後,登陸 https://cr.console.aliyun.com ,在管理控制檯選擇鏡像加速服務,則出現以下的信息。這裏紅色打碼部分就是你的阿里雲鏡像加速服務的地址。

阿里雲鏡像加速服務

爲了自定義 docker 的默認運行目錄和鏡像倉庫地址,咱們須要修改 /etc/docker/daemon.json

mkdir /etc/docker
vi /etc/docker/daemon.json
複製代碼

輸入以下內容

{
  "graph":"/u1/docker",
  "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
複製代碼

graph 定義 docker 運行的目錄, registry-mirrors 定義了 docker 獲取鏡像的倉庫的地址。

啓動 docker

執行以下的命令啓動 docker 的服務

systemctl start docker
複製代碼

執行以下命令查看 docker 信息

docker info
複製代碼

能夠看到以下的信息

docker 信息

能夠看到 Docker Root Dir 和 RegistryMirrors 都變成了 /etc/docker/daemon.json 中配置的內容了

安裝 gitlab

下載鏡像

執行下面的命令,從 docker 的鏡像倉庫中下載 gitlab 社區版的鏡像

docker pull gitlab/gitlab-ce:latest
複製代碼

鏡像有 1g 多,因此須要等待一段時間

數據持久化保存

由於容器的數據是不能持久化保存的。因此咱們須要用 docker volume 的方式將存儲的數據映射到操做系統的目錄中來。這樣就算運行的容器崩潰,咱們從新啓動一個新的容器,原來容器中的數據仍是不會丟失

咱們創建了目錄 /u1/gitlab 來保存 gitlab 容器中的數據

準備映射 sshd

另外,爲了 git 採用 ssh 協議來操做 git 倉庫,咱們將主機的 sshd 的 22 端口映射到 容器中去。將主機的 sshd 端口更改成 15678。這裏由於 centos 7 更嚴格的安全機制,算是一個坑,須要按照下面的步驟去進行。

編輯文件 /etc/ssh/sshd_config,將其中的 #Port 22 註釋去掉,將數字 22 更改成 15678

執行下面的命令重啓 sshd 服務

systemctl restart sshd
複製代碼

運行下面的命令使 15678 端口能夠對外提供服務。不然沒法進行遠程的 ssh 登陸。

semanage port -a -t ssh_port_t -p tcp 15678
firewall-cmd --permanent --add-port=15678/tcp
firewall-cmd --reload 
複製代碼

運行 gitlab

docker run \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --volume /u1/gitlab/config:/etc/gitlab \
    --volume /u1/gitlab/logs:/var/log/gitlab \
    --volume /u1/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce
複製代碼

這裏把主機的 44三、80、22 端口直接轉發到容器,同時利用 --volume /u1/gitlab/config:/etc/gitlab 、 --volume /u1/gitlab/logs:/var/log/gitlab 、 --volume /u1/gitlab/data:/var/opt/gitlab 這三個參數將 gitlab 的配置、數據和日誌持久化到主機文件系統上來。

管理員配置 gitlab

登陸 gitlab

等待 docker 容器啓動完成後,訪問 http://ip 就進入 gitlab 訪問界面。第一次訪問是讓咱們修改管理員密碼。以下所示

初始化 gitlab 管理員密碼

設置後管理員密碼後,就進入登陸頁面,輸入用戶名 root 和剛纔設置的密碼就進入了 gitlab 的控制檯。以下圖所示

gitlab 管理員控制檯

建立組( group)

gitlab 裏面有三類對象:組( group)、項目( project)和用戶 (people)。

爲了方便管理,咱們應該基於組來建立項目。一個項目就是一個 git 的倉庫。基於組建立項目 ,而後將用戶設置合適的權限後加入到組裏面。這樣用戶就有了組裏面全部項目的對應權限。

點擊 「Create a group」 連接,以下圖所示建立一個「健康醫療開發組」 的組

gitlab 建立組

建立用戶(people)

點擊 「Add people」 連接,以下圖所示建立一個 「yanggch」 的用戶

gitlab 增長用戶

由於尚未配置好郵件服務,因此還不能發送用戶初始化密碼的郵件。咱們須要編輯用戶,手動設置一個密碼。以下圖所示。若是用戶忘記了密碼,充值密碼也能夠在這裏進行。

gitlab 修改用戶信息

將用戶加入組

爲了方便管理,須要將用戶加入到對應的組裏面。以下圖所示,在組管理界面中,點擊組的名稱,進入組用戶設置界面。將剛纔建立的用戶 「yanggch」 加入到組 「健康醫療開發組」中,而且給他設置爲 「Master」 角色。只有 「Master」 或者 「Owner」 角色才能推送 git 的更新。

image.png

建立項目(project)

增長 gitlab 組的時候,爲了讓項目讓組裏面的人都能訪問,注意要將項目創建在組之下。以下圖所示,在「健康醫療開發組」之下創建了 「redis_util」 的項目。

gitlab 建立項目

這樣項目建好以後就能夠被組裏的用戶訪問了。

客戶端訪問

安裝 git 客戶端

這裏演示在 window上安裝 git 客戶端。首先根據 window 版本下載 git 客戶端安裝程序。這裏我下載的是

https://github.com/git-for-windows/git/releases/download/v2.15.1.windows.2/Git-2.15.1.2-64-bit.exe
複製代碼

命令行訪問

安裝後,在準備 clone 項目的目錄下點擊鼠標右鍵,出現下面的右鍵菜單。

右鍵菜單

點擊 「Git Bash Here」 進入 git 命令行環境。咱們會從 redis_util 項目中看到該項目基於 http 協議的 clone 命令是

git clone http://7a45cd079bdc/healthcare_dev/redis_util.git
複製代碼

這裏的 7a45cd079bdc 其實是 docker 容器的機器名。實際執行的時候咱們把這個字符串更換成容器所在主機的 ip 地址便可。以下所示

git clone http://10.110.2.50/healthcare_dev/redis_util.git
複製代碼

這種狀況下會要求輸入登陸的用戶名和密碼。這裏輸入剛纔建立的用戶的用戶名和密碼便可。在使用前,須要用這個用戶登陸 gitlab 控制檯修改一下初始密碼才能使用。

gitlab http 權限驗證

出現以下提示表示從 gitlab clone 項目成功

Cloning into 'redis_util'...
warning: You appear to have cloned an empty repository.
複製代碼

免密碼登陸

剛纔那種方式經過 http 協議和 gitlab 進行通訊,每次都要輸入用戶名和密碼,很是不方便。用戶能夠設置經過 ssh 進行交互,將ssh key 加入到用戶的 sshkey 設置列表中。

參考「命令訪問」 章節進入 git 的 bash 環境。執行下面的命令進入 ssh key 存儲目錄

cd ~/.ssh
複製代碼

目錄中 id_rsa.pub 是 ssh 訪問的公鑰。若是不存在則執行下面的命令生成

ssh-keygen -t rsa
複製代碼

所有回車後,會生成 id_rsa.pub 文件。

將文件中的內容拷貝到剪貼板。而後經過前面建立的用戶名和密碼登陸 gitlab 控制檯。在下面的界面中,將 id_rsa.pub 文件的內容填入文本框

配置用戶 ssh key

保存後。再經過 ssh 協議操做 git 倉庫,將再也不須要輸入用戶名和密碼。以下所示

免登錄操做 gitlab 倉庫

推送一次提交

首先配置當前倉庫的用戶名和用戶郵箱配置

cd redis_util
git config --local user.name "yanggch"
git config --local user.email "yanggch@inspur.com"
複製代碼

而後在 redis_util 目錄下加入一個 readme.txt,執行下面的命令提交併將更新推送到 gitlab 遠程服務器

#將新文件加入到版本管理
git add readme.txt
#提交
git commit -m"第一次提交"
#將當前分支 master 推送到遠程倉庫
git push
#以 master 分支爲基礎創建一個新的 dev 本地分支
git checkout -b dev
#將本地倉庫分支推送到遠程倉庫,在遠程倉庫創建對應的 dev 分支
git push --set-upstream origin dev
複製代碼

到 gitlab 控制檯查看 redis_util 的狀態。以下圖所示

redis_util 分支情況

到此,咱們就完成了一個公司級別的 gitlab 服務器的搭建工做。小夥伴們就能夠在這個上面流暢的進行開發了。

原文發表在簡書中,原始連接

相關文章
相關標籤/搜索