1. 程式人生 > >Gitlab搭建內網伺服器一篇就夠

Gitlab搭建內網伺服器一篇就夠

0 寫在前面

首先大概捋一下概念:Git是版本管理工具,GitServer是遠端管理倉庫,但是這個倉庫沒有介面只能命令列管理。多個倉庫時又很麻煩,Gitlab是一個私有的倉庫Web管理工具,基於RoR。GitHub則可以看成一個世界級公開的GitLab。
總結起來大概如下:
* 支援類似於github那樣強大而又簡單的UI互動型操作
* 支援安裝包部署在自己伺服器上,安全、開源,並且免費
* 支援郵件服務
* 支援分支保護(許可權機制,以免被人胡亂push)等等

本文分兩部分,第一部分介紹傳統方式安裝GitLab,第二部分介紹Docker安裝(推薦)。

1 安裝過程

平臺使用centos7.4安裝。

#yum install curl policycoreutils openssh-server openssh-clients 
#systemctl enable sshd 
#systemctl start sshd 
#yum install postfix 
#systemctl enable postfix 
#systemctl start postfix 
#firewall-cmd --permanent --add-service=http 
#systemctl reload firewalld

上述命令,安裝ssh、postfix(郵件通知),配置防火牆。下面開始下載、安裝(較大,380M+):

#curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash 
#yum install -y gitlab-ce 

編輯gitlab.rb

#vi /etc/gitlab/gitlab.rb

要編輯的項有(以QQ郵箱為例):

external_url表示你要訪問gitlab時的url,http打頭。另,若自定義埠,可以用X.X.X.X:port。警告:此處不要用8080埠,且要保證沒有其他服務使用8080,因為unicorn(git的webserver)預設使用8080.

猜測:貌似gitlab使用nginx作為反向代理,unicorn作為webserver。也就是說gitlab會用掉兩個埠(80用於對外訪問,8080用於unicorn使用)。

...
external_url 'http://10.211.55.5' #預設80埠
...
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = 'smtp.qq.com'
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = '[email protected]'
gitlab_rails['smtp_password'] = 'XXXXXX'
gitlab_rails['smtp_domain'] = 'smtp.qq.com'
gitlab_rails['smtp_authentication'] = :plain
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_user_email'] = '[email protected]'
gitlab_rails['gitlab_email_display_name'] = 'Kyle_Gitlab'
gitlab_rails['gitlab_email_reply_to'] = '[email protected]'
gitlab_rails['smtp_tls'] = false
...
#unicorn預設使用8080,除非你修改這裡,否則請保持系統8080無佔用。
#unicorn['port'] = 8080
...

接下來讓配置生效(以後每次編輯gitlab.rb都要重新配置):

#firewall-cmd --zone=public --add-port=8080/tcp --permanent
#firewall-cmd --reload
#gitlab-ctl reconfigure

重啟後進入X.X.X.X,設定密碼,然後就能用了。

2 漢化

漢化有一定風險,比如我漢化後開啟就報502,後來發現/var/log/gitlab/gitlab-rails/sidekiq.log不停的刷錯誤日誌,cpu使用率暴增……

建議先做好快照吧(特指虛擬機器)。
最後,善用 gitlab-ctl tail unicorn這個監控命令。

#gitlab-ctl stop
#cat /opt/gitlab/embedded/service/gitlab-rails/VERSION //檢視版本
10.3.5
#git clone https://gitlab.com/xhang/gitlab.git
#cd gitlab
#cat VERSION
10.3.5    //恰好版本相同,如果不同要diff換一下。
#git diff 

使用docker安裝Gitlab

上面講的都是傳統的搭建過程,下面說一下使用docker如何搭建。

1 先決條件

2 安裝

到gitlab官網,找到docker的安裝方法。
在centos上建立一個gitlab資料卷目錄,如:

#/home/kyle/dockers/gitlab

然後使用docker中國來先下載gitlab映象(注意版本tag):

#docker pull registry.docker-cn.com/gitlab/gitlab-ce:10.4.1-ce.0

接著使用docker tag 重新命名你的docker映象(下面命令根據實際情況不能照抄):

#docker images
#docker tags re....218/gitlab-ce-zh:10.4.1 gitlab/gitlab-ce:10.4.1
#docker rmi ...<img:tag>(那個舊映象)...
#docker images (再次檢視)

然後建立一個docker-compose.yml檔案用來控制gitlab的容器的引數:

version: '2'
services:
    gitlab:
        image: 'twang2218/gitlab-ce-zh:10.4'
        restart: unless-stopped
#        hostname: 'localhost' 若有域名就寫上
        container_name: gitlab
        environment:
            TZ: 'Asia/Shanghai'
            GITLAB_OMNIBUS_CONFIG: |
                external_url 'http://10.211.55.5'
                gitlab_rails['time_zone'] = 'Asia/Shanghai'
                gitlab_rails['gitlab_shell_ssh_port'] = 2222
                gitlab_rails['smtp_enable'] = true
                gitlab_rails['smtp_address'] = 'smtp.qq.com'
                gitlab_rails['smtp_port'] = 25
                gitlab_rails['smtp_user_name'] = '[email protected]'
                gitlab_rails['smtp_password'] = '<密碼或授權碼>'
                gitlab_rails['smtp_domain'] = 'smtp.qq.com'
                gitlab_rails['smtp_authentication'] = :plain
                gitlab_rails['smtp_enable_starttls_auto'] = true
                gitlab_rails['gitlab_email_from'] = '[email protected]'
                gitlab_rails['gitlab_user_email'] = '[email protected]'
                gitlab_rails['gitlab_email_display_name'] = 'Kyle_Gitlab'
                gitlab_rails['gitlab_email_reply_to'] = '[email protected]'
                gitlab_rails['smtp_tls'] = false
        ports:
            - '80:80'
            - '443:443'
            - '2222:22'
        volumes:
            - ./config:/etc/gitlab
            - ./logs:/var/log/gitlab
            - ./data:/var/opt/gitlab
volumes:
    config:
    data:
    logs:

[1] 上方關於docker-compose的config配置語法格式詳見其文件。這裡要注意我們用了https,開放443(稍後我們會建一個證書)。如果你不用證書,就改成’http’。

[2] docker擁有預設的幾個網路(使用docker network ls可以檢視到),最著名到當屬brideg(172.17.0.0/16)。使用docker run時容器預設加入bridge。而compose up每啟動一個容器預設都會為建立名為_default的網路。該網路擁有新的網段(如172.18.0.0/16),且可以和原bridge通訊。假設未來你要啟動Jenkins並讓它使用Gitlab,那麼就在yml裡使用networks標籤指定external網路(詳見Jenkins搭建筆記)。

然後在yml目錄下執行映象(-d表示掛在後臺):

#docker-compose up -d

提示:通常你都dockerd服務都是root執行的,所以這裡docker-compose也要使用root,否則會導致‘cannot connect to docker daemon…is it running?’

然後檢視埠對映:

docker ps

yml目錄下實時輸出日誌(-f):

#docker-compose logs -f

首次啟動時間會很長(5min),穩定後,你會發現一直不斷的輸出錯誤,說找不到X.X.X.X.crt證書,那是因為我們使用的是https但卻沒有為他設定證書。

3 設定https證書(謹慎使用)

要謹慎了,自簽名證書可能會引起和jenkins連線的問題。所以如果領導並沒要求,儘量不要用https。

進入到./config/下,可以看到已經有很多以root身份建立的檔案了。

# mkdir ssl
# cd ssl
# openssl req -newkey rsa:4096 -nodes -sha256 -keyout 10.211.55.5.key -x509 -days 3650 -out 10.211.55.5.crt
###在CountryName輸入【CN】;CommonName輸入【10.211.55.5】或你的域名(重要!);其餘欄位直接回車。

完成後ssl目錄下就有了證書檔案,#docker-compose logs -f應該不會再報錯了。

這時開啟瀏覽器訪問https://10.211.55.5,應該有錯誤提示,選擇信任證書即可(若需要安裝證書,請安裝到Trusted Root Certification Authorities路徑下)。然後就提示你設定root密碼到介面。

4 漢化gitlab

5 初始化設定

5.1新增ssh-key

用你的賬戶登陸後,在右上方頭像找到Settings -> SSH Keys,新增你的key(你的客戶端電腦(即將來要推送git專案的那臺電腦的~/.ssh/id_rsa.pub)到這裡。

ssh-keygen -t rsa -C "your-email"

上面這個命令用來生成key

5.2 禁止註冊

管理員登陸,然後點選頂部中間扳手圖示(admin area) -> Settings -> Sign-up Enabled -> 取消勾選 -> 點選底部Save按鈕。
此時再回到登陸頁面,就發現註冊功能已經沒有了。

6 升級與備份資料

由於gitlab升級十分頻繁,所以升級有時候很重要。倉庫資料其實都在:

#tree .data/git-data-repositories

該目錄存放了所有倉庫。有時候你會看到”XXX.wiki.git”,這些是gitlab維護的內建倉庫。

相關推薦

Gitlab搭建伺服器

0 寫在前面 首先大概捋一下概念:Git是版本管理工具,GitServer是遠端管理倉庫,但是這個倉庫沒有介面只能命令列管理。多個倉庫時又很麻煩,Gitlab是一個私有的倉庫Web管理工具,基於RoR。GitHub則可以看成一個世界級公開的GitLab。 總

【Flutter 系列——1】Flutter環境搭建及配置這了(Windows)

最近正式入坑Flutter,首先從環境搭建開始,看了網上好多關於Windows環境搭建的資料,基本都是按官方文件寫的,看完的感受是,還不如直接去看官方文件。 本文主要總結我實際搭建的過程,最後發現不一定按網上那些部落格或者官方文件寫的來也可以搭建成功。 總的來說需要的

使用teamviewer搭建伺服器

目錄 起因 下載並安裝teamviewer 伺服器安裝ccproxy 客戶端使用SwitchyOmega 起因 學習的時候,學習視訊必須使用校內的網路才能連線觀看,校外無法觀看,所以使用teamviewer

Java 存模型 ,了!

滿足 繼續 而且 undefine 按順序 發生 得到 一次 有變 Java 虛擬機 我們都知道 Java 語言的可以跨平臺的,這其中的核心是因為存在 Java 虛擬機這個玩意。虛擬機,顧名思義就是虛擬的機器,這不是真實存在的硬件,但是卻可以和不同的底層平臺進行交互

HTML5 的中文教程

odata tags 學習資源 online data 服務器推 odi xpl end HTML5 是近十年來 Web 開發標準最巨大的飛躍。HTML5 並非僅僅用來表示 Web 內容,它將 Web 帶入一個成熟的應用平臺,在 HTML5 平臺上,視頻、音頻、圖象、動畫,

【轉】【修真院“善良”系列之十八】WEB程序員從零開始到就業的全資料V1.0——只看這了!

absolute feed 自己 session rem 好的 ans 一個 css樣式 這是兩年以來,修真院收集整理的學習資料順序。以CSS15個任務,JS15個任務為基礎,分別依據要完成任務的不同的技能點,我們整理出來了這麽一篇在學習的時候需要看到的資料。這是Versi

Java中的多線程你只要看這

== 討論 cin 線程池。 locking nth lis dset tro 引 如果對什麽是線程、什麽是進程仍存有疑惑,請先Google之,因為這兩個概念不在本文的範圍之內。 用多線程只有一個目的,那就是更好的利用cpu的資源,因為所有的多線程代碼都可以用單線程來實現。

關於HTTP協議,

改變 就會 足夠 options 服務器交互 視頻 用戶 base64加密 英文字母 關於HTTP協議,一篇就夠了 作者 RaphetS 關註 2016.10.13 06:48* 字數 4806 閱讀 12969評論 26喜歡 203贊賞 1 HTT

4-關於HTTP協議,

nal ont 操作 規則 自身 .com 工作 擴展 概念 HTTP簡介 HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。 H

Azure IOT 設備固件更新技巧,看這

trigger 物聯網平臺 搭建 href ice 有效 面板 調用 創建 嫌長不看版 今天為大家準備的硬菜是:在 Azure IoT 中心創建 Node.js 控制臺應用,進行端到端模擬固件更新,為基於 Intel Edison 的設備安裝新版固件的流程。通過創建模擬設備

轉:Java中的多線程你只要看這

無法 線程不安全 str his ace oat 情況下 containe live 如果對什麽是線程、什麽是進程仍存有疑惑,請先Google之,因為這兩個概念不在本文的範圍之內。 用多線程只有一個目的,那就是更好的利用cpu的資源,因為所有的多線程代碼都可以用單線程來實現

想做好PPT折線圖,看這了!

12月 image 菊花 -c 強調 spa any border 線圖 配圖主題無關今天鄭少跟大家聊聊折線圖的使用方法,或者你有疑問,折線圖很簡單,插入修改數據不就好了嗎?如果你要是這樣想的,恭喜你,有可能你會做出下面這樣的效果。如果你要是稍微懂一點折線圖的使用方法,你就

JSON入門看這

jsb cart 開發包 fonts 數據 長度 gmv lock 在哪裏 什麽是JSON JSON:JavaScript Object Notation 【JavaScript 對象表示法】 JSON 是存儲和交換文本信息的語法。類似 XML。 JSON采用完全獨立於任何

Struts2入門這

and win ioe 了解 指正 屬性 內容 servlet 優雅 前言 這是Strtus的開山篇,主要是引入struts框架...為什麽要引入struts,引入struts的好處是什麽,以及對Struts2一個簡單的入門.... 為什麽要引入struts? 既然Serv

萬字總結:學習MySQL優化原理,這了!

ade min() 全表掃描 搜索 財務 兼容 嵌套循環 很大的 完成 前言 說起MySQL的查詢優化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用NULL字段、合理創建索引、為字段選擇合適的數據類型..... 你是否真的理解這些優化技巧?是否理解其背後的工

分布式事務看這

直接 比較 hub fir demon transacti 遇到 維護 commit 前言 不知道你是否遇到過這樣的情況,去小賣鋪買東西,付了錢,但是店主因為處理了一些其他事,居然忘記你付了錢,又叫你重新付。又或者在網上購物明明已經扣款,但是卻告訴我沒有發生交易。這一系列情

Elasticsearch入門,這

search 語義 瀏覽器 三種 http請求 機制 說明 pro .net 實時搜索引擎Elasticsearch Elasticsearch(簡稱ES)是一個基於Apache Lucene(TM)的開源搜索引擎,無論在開源還是專有領域,Lucene可以

JS 裝飾器,

finall 裝飾類 child rec symbol etop 組合 定義 陌生 更多文章,請在Github blog查看 在 ES6 中增加了對類對象的相關定義和操作(比如 class 和 extends ),這就使得我們在多個不同類之間共享或者擴展一些方法或者行為的時

了解golang的不定參數(... parameters),這

type col interface 原因 相同 tro fun cti func 在實際開發中,總有一些函數的參數個數是在編碼過程中無法確定的,比如我們最常用的fmt.Printf和fmt.Println: fmt.Printf("一共有%v行%v列\n", rows,

python3 urllib爬蟲,你只需要看這

寫在最前面:以下資料均脫敏 from urllib import request import requests import urllib if __name__ == "__main__": # 介面的url session_requests = requests.se