一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

GitLab搭建與維護(hù)(基于docker鏡像sameersbn/docker

 黃金屋1 2017-03-28

tag: git, gitlab, subversion, sameersbn/docker-gitlab

1. 閱讀本文基礎(chǔ)

  • 熟悉git使用
  • 熟悉docker

2. GitLab簡介

2.1. 概述

  • GitLab 是一個用于倉庫管理系統(tǒng)的開源項目。使用Git作為代碼管理工具,并在此基礎(chǔ)上搭建起來的web服務(wù)。Github是公共的git倉庫,而Gitlab適合于搭建企業(yè)內(nèi)部私有g(shù)it倉庫
  • 官網(wǎng):
    https://about./
    
    https://github.com/gitlabhq/gitlabhq
  • GIT與SVN的比較:
    http://www./wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374027586935cf69c53637d8458c9aec27dd546a6cd6000
    
    http://www.oschina.net/news/12542/git-and-svn
  • 截止本文創(chuàng)建時間,GitLab最新版本為v7.4.3

2.2. 架構(gòu)

  • 示意圖:
  • gitlab_arch

2.3. 組件

  • 前端:Nginx,用于頁面及Git tool走h(yuǎn)ttp或https協(xié)議
  • 后端:Gitlab服務(wù),采用Ruby on Rails框架,通過unicorn實(shí)現(xiàn)后臺服務(wù)及多進(jìn)程
  • SSHD:開啟sshd服務(wù),用于用戶上傳ssh key進(jìn)行版本克隆及上傳。注:用戶上傳的ssh key是保存到git賬戶中
  • 數(shù)據(jù)庫:目前僅支持MySQL和PostgreSQL
  • Redis:用于存儲用戶session和任務(wù),任務(wù)包括新建倉庫、發(fā)送郵件等等
  • Sidekiq:Rails框架自帶的,訂閱redis中的任務(wù)并執(zhí)行

3. GitLab安裝部署

3.1. 官方支持的方式

  • 包含一切的RPM包: https://about./downloads/ (官方推薦)
    個人不推薦,因?yàn)镽PM包容量太大,200多M,適合于Linux初學(xué)者,未嘗試過
  • 手動安裝: https:///gitlab-org/gitlab-ce/blob/master/doc/install/installation.md (深入了解)
    可以最大程度了解GitLab的組件之間架構(gòu),但對于入門并不適合
  • 第三方docker鏡像: https://github.com/sameersbn/docker-gitlab (筆者推薦)
    鏡像可以快速實(shí)現(xiàn)部署并使用,適合于熟悉Docker的人使用,入門很快。而且使用Docker鏡像就使用戶不用過多了解內(nèi)部細(xì)節(jié),通過啟動容器帶上環(huán)境變量參數(shù)即可實(shí)現(xiàn)GitLab參數(shù)的配置

3.2. 采用docker鏡像安裝GitLab

3.2.1. 簡介

3.2.2. 架構(gòu)圖

docker_gitlab_arch

3.2.3. 下載鏡像

  • docker pull sameersbn/gitlab:7.4.3 # 下載gitlab鏡像
  • docker pull sameersbn/mysql:latest # 下載gitlab所用到的mysql鏡像
  • docker pull sameersbn/redis:latest # 下載gitlab所用到的redis鏡像

3.2.4. 安裝

3.2.4.1. 啟動redis

  • 命令:
    docker run 	--name=gitlab_redis 	-tid 	sameersbn/redis:latest

3.2.4.2. 啟動mysql

  • mkdir -p /opt/gitlab/mysql
  • 命令:
    docker run 	--name=gitlab_mysql 	-tid 	-e 'DB_NAME=gitlabhq_production' 	-e 'DB_USER=gitlab' 	-e 'DB_PASS=password' 	-v /opt/gitlab/mysql:/var/lib/mysql 	sameersbn/mysql:latest

3.2.4.3. 啟動gitlab

  • mkdir -p /opt/gitlab/data /opt/gitlab/log
  • 命令:
    docker run 	--name='gitlab' 	-itd 	--link gitlab_mysql:mysql 	--link gitlab_redis:redisio 	-e 'GITLAB_PORT=80' 	-e 'GITLAB_SSH_PORT=22' 	-e 'GITLAB_HOST=gitlab.' 	-v /var/run/docker.sock:/run/docker.sock 	-v $(which docker):/bin/docker 	-v /opt/gitlab/data:/home/git/data 	-v /opt/gitlab/log:/var/log/gitlab 	sameersbn/gitlab:7.4.3
    
    
    上述是開啟一個基本gitlab。
    完整(包含LDAP、EMAIL):
    docker run 	--name='gitlab' 	-itd 	--link gitlab_mysql:mysql 	--link gitlab_redis:redisio 	-e 'GITLAB_PORT=80' 	-e 'GITLAB_SSH_PORT=22' 	-e 'LDAP_ENABLED=true' 	-e 'LDAP_HOST=192.168.1.1' 	-e 'LDAP_PORT=389' 	-e 'LDAP_UID=sAMAccountName' 	-e 'LDAP_METHOD=plain' 	-e 'LDAP_BIND_DN=test@' 	-e 'LDAP_PASS=passwd' 	-e 'LDAP_BASE=OU=example_users,DC=example-family,DC=com' 	-e 'LDAP_ACTIVE_DIRECTORY=true' 	-e 'LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN=false' 	-e 'GITLAB_HOST=gitlab.' 	-e 'SMTP_ENABLED=true' 	-e 'SMTP_DOMAIN=' 	-e 'SMTP_HOST=192.168.1.2' 	-e 'SMTP_PORT=25' 	-e 'SMTP_STARTTLS=false' 	-v /var/run/docker.sock:/run/docker.sock 	-v $(which docker):/bin/docker 	-v /opt/gitlab/data:/home/git/data 	-v /opt/gitlab/log:/var/log/gitlab 	sameersbn/gitlab:7.4.3

這一步驟會耗時幾分鐘,因?yàn)檫@一步會做一些初始化操作,例如導(dǎo)入數(shù)據(jù)表結(jié)構(gòu)等??梢酝ㄟ^docker logs gitlab來查看安裝過程。同理,mysql、redis容器也可以通過docker logs gitlab_mysql和docker logs gitlab_redis來查看啟動信息。

注意:上面創(chuàng)建的3個容器必須位于同一臺宿主上,因?yàn)楱Clink gitlab_mysql:mysql –link gitlab_redis:redisio就是將同個宿主上的容器做鏈接

  • 當(dāng)然,redis和mysql也支持使用ip+端口,不用–link,帶上環(huán)境變量即可,方法是:
    完整:
    docker run 	--name='gitlab' 	-itd 	--net=none 	--hostname='gitlab.' 	-e 'DB_TYPE=mysql' 	-e 'DB_HOST=192.168.3.1' 	-e 'DB_PORT=3356' 	-e 'DB_NAME=gitlabhq_production' 	-e 'DB_USER=gitlab' 	-e 'DB_PASS=passwd' 	-e 'REDIS_HOST=192.168.3.2' 	-e 'REDIS_PORT=6402' 	-e 'UNICORN_WORKERS=20' 	-e 'GITLAB_PORT=80' 	-e 'GITLAB_SSH_PORT=22' 	-e 'LDAP_ENABLED=true' 	-e 'LDAP_HOST=192.168.3.3' 	-e 'LDAP_PORT=389' 	-e 'LDAP_UID=sAMAccountName' 	-e 'LDAP_METHOD=plain' 	-e 'LDAP_BIND_DN=test@' 	-e 'LDAP_PASS=passwd' 	-e 'LDAP_BASE=OU=example_users,DC=example-family,DC=com' 	-e 'LDAP_ACTIVE_DIRECTORY=true' 	-e 'LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN=false' 	-e 'GITLAB_HOST=gitlab.' 	-e 'SMTP_ENABLED=true' 	-e 'SMTP_DOMAIN=' 	-e 'SMTP_HOST=192.168.3.4' 	-e 'SMTP_PORT=25' 	-e 'SMTP_STARTTLS=false' 	-v /var/run/docker.sock:/run/docker.sock 	-v $(which docker):/bin/docker 	-v /opt/gitlab/data:/home/git/data 	-v /opt/gitlab/log:/var/log/gitlab 	sameersbn/gitlab:7.4.3
    
    sameersbn/gitlab:7.4.3不支持redis的任何驗(yàn)證,只能無密碼使用

目前發(fā)現(xiàn)sameersbn/gitlab:7.4.3有一個非??拥牡胤剑喝萜鲉涌赡苓B不上數(shù)據(jù)庫,是因?yàn)槿萜鲉訒r會探測數(shù)據(jù)庫是否可用,而探測的方法是mysqladmin連接DB_HOST的3306端口,而不是DB_PORT指定的端口,已提交issue給作者。

3.2.4.4. 給gitlab容器配置IP

  • pipework br1 gitlab 192.168.1.1/24@192.168.1.254

在gitlab容器啟動(docker run)時可以加上-p參數(shù)來將容器里的端口映射到宿主上,但個人比較傾向給容器配置一個獨(dú)立IP,因此上述命令沒有采用-p來做端口映射,但是-e ‘GITLAB_PORT=80′ -e ‘GITLAB_SSH_PORT=22′ -e ‘GITLAB_HOST=gitlab.’依然要指定,否則gitlab無法使用

3.2.4.5. 安裝已完成,可以打開頁面

  • url: gitlab.
    賬戶:root
    密碼:5iveL!fe
  • 效果: gitlab_example

3.2.4.6. 加入開機(jī)啟動

  • 加入/etc/rc.local
    echo 'docker start gitlab_redis' >> /etc/rc.local
    echo 'docker start gitlab_mysql' >> /etc/rc.local
    echo 'docker start gitlab' >> /etc/rc.local
    echo 'pipework br1 gitlab 192.168.1.1/24@192.168.1.254' >> /etc/rc.local

4. GitLab API wrappers

  • 官方推薦: https://about./applications/
  • python:pyapi-gitlab
    基本使用:
    pip install pyapi-gitlab
    import gitlab
    git = gitlab.Gitlab("http://gitlab.", token="EHBLkwhr_WYzn-sXNnNs")		# token即在頁面上Profile settings->Account里能看到自動生成好的Private token
    git.getusers()
  • 順便推薦個Git本身的python api模塊: https://github.com/FriendCode/gittle

其他很多git庫的實(shí)現(xiàn)都太底層了,和linux的git命令完全不一樣,一點(diǎn)也不友好。但目前發(fā)現(xiàn)這個模塊上傳下載代碼只支持SSH,不支持HTTP,因此我還是更喜歡使用linux git命令

5. GitLab使用的FAQ

5.1. git代碼發(fā)布支持2種方法:ssh和http(s)

  • ssh:必須添加ssh key才能發(fā)布
  • http:使用用戶名、密碼,若接入了LDAP,就是LDAP中的賬戶密碼
  • https:暫未測試過

5.2. 限制git上傳的單個文件大小

  • 若gitlab是通過sameersbn/gitlab:7.4.3鏡像創(chuàng)建的,那么可以通過環(huán)境變量NGINX_MAX_UPLOAD_SIZE進(jìn)行限制

5.3. 通過API進(jìn)行一些操作例如創(chuàng)建Project,得到成功的響應(yīng),但卻沒有立即生效,過了幾秒才生效

  • 由于GitLab為異步架構(gòu),Ruby on Rails收到創(chuàng)建Project請求后將該任務(wù)推送到Redis中,但是沒有等待執(zhí)行完畢,而是直接返回成功。后臺Sidekiq從Redis訂閱任務(wù)并實(shí)時執(zhí)行,但由于執(zhí)行需要時間,而API返回很快,因此會造成這種情況發(fā)生。目前沒有其他解決辦法,只能在自己程序邏輯里sleep幾秒進(jìn)行重試

5.4. 頁面上”Profile settings->SSH Keys”與”Project Settings里Deploy Keys”的區(qū)別

  • Profile settings->SSH Keys:是用戶全局的Key,具有對該用戶所有項目倉庫進(jìn)行上傳下載(push、clone)的權(quán)限
  • Project Settings里Deploy Keys:針對某個項目,具有下載(clone)的權(quán)限,而不具備上傳(push)的權(quán)限

5.5. gitlab默認(rèn)時區(qū)是UTC

  • sameersbn/gitlab:7.4.3鏡像無法對時區(qū)進(jìn)行修改,若是手動安裝的gitlab,可以通過修改一個.rb文件來生效,具體沒有測試過,有需要的可以自行百度搜下。

時區(qū)是UTC主要影響的是數(shù)據(jù)庫里關(guān)于時間字段的值(created_at、updated_at等),對用戶git倉庫是不影響的,因?yàn)間it倉庫的創(chuàng)建、代碼更新都是用戶通過git工具自行操作,因此是用戶自己的時區(qū)。

6. GitLab維護(hù)

6.1. 數(shù)據(jù)路徑、日志路徑

  • 由于gitlab容器在啟動時已將宿主/opt/gitlab/data、/opt/gitlab/log目錄掛載到容器里,因此可以在宿主上進(jìn)入這2個目錄中查看,另外可以通過docker logs查看。

6.2. 高可用

  • 官方有篇關(guān)于GitLab高可用的文章: https://about./high-availability/
    有1/3都在講述高可用的利弊以及不同程度的高可用帶來的收益及可能引發(fā)的更多問題,說的挺有道理的。由于筆者也才剛開始使用GitLab,因此暫不測試多機(jī)load balance或failover。
  • 2種備份恢復(fù)方式
    1. 備份配置、倉庫、數(shù)據(jù)庫。
    2. 給文件系統(tǒng)做快照。
    官方認(rèn)為第二種方法比起第一種更快,因?yàn)榭梢允∪ト藶榻槿雛estore的麻煩
    XFS文件系統(tǒng)支持快照
    
    有2篇文章可以拜讀下:
    http://www./blog/gitlab-backup-made-easy 數(shù)據(jù)庫數(shù)據(jù)備份到本地
    http://doc./ce/raketasks/backup_restore.html 官方的,和上述其實(shí)一樣
  • 我的備份方案:
    一. 簡介:每天固定時間備份數(shù)據(jù)(僅備份MySQL和GitLab倉庫重要文件,其他不備份)。若數(shù)據(jù)丟失,需要恢復(fù),則將最近備份的數(shù)據(jù)用來恢復(fù),會將所有數(shù)據(jù),包括本地文件(倉庫等文件)、數(shù)據(jù)庫一同還原回備份時刻。
    
    二. 具體操作:
    	1. 備份:
    docker run 	--name='gitlab_backup' 	-it 	--rm 	--link gitlab_mysql:mysql 	--link gitlab_redis:redisio 	-v /var/run/docker.sock:/run/docker.sock 	-v $(which docker):/bin/docker 	-v /opt/gitlab/data:/home/git/data 	-v /opt/gitlab/log:/var/log/gitlab 	sameersbn/gitlab:7.4.3 app:rake gitlab:backup:create
    
    	   過程能在屏幕上看到,備份會自動打成tar包放入/opt/gitlab/data/backups里??梢宰孕袑υ搕ar包做壓縮,例如gzip 時間戳_gitlab_backup.tar。
    	   若$?=0表示備份成功,然后將生成的文件使用gzip壓縮為.tar.gz,然后rsync推到存儲上
    	通過rsync命令傳到一臺備份存儲上
    	2. 恢復(fù):
    docker run 	--name='gitlab_restore' 	-it 	--rm 	--link gitlab_mysql:mysql 	--link gitlab_redis:redisio 	-v /var/run/docker.sock:/run/docker.sock 	-v $(which docker):/bin/docker 	-v /opt/gitlab/data:/home/git/data 	-v /opt/gitlab/log:/var/log/gitlab 	sameersbn/gitlab:7.4.3 app:rake gitlab:backup:restore
    
    	屏幕上會將/opt/gitlab/data/backups中的所有文件和目錄列出來,復(fù)制粘貼要恢復(fù)的tar包文件名,敲入回車即開始恢復(fù)。
    	   注意:恢復(fù)時會將當(dāng)前數(shù)據(jù)庫中的所有表先刪掉再導(dǎo)入備份tar包的里sql文件,因此此步要小心。
    	   
    	   若redis、mysql是使用環(huán)境變量帶入gitlab容器的,備份和恢復(fù)命令也類似,將啟動gitlab的命令復(fù)制過來,修改下--name,添加一個--rm,CMD改為gitlab:backup:create或gitlab:backup:restore即可
    
    三. 注意:
        1. 用戶配置的key(即data/.ssh)是保存在數(shù)據(jù)庫里,在gitlab服務(wù)啟動時候會從數(shù)據(jù)庫里加載并導(dǎo)入到.ssh里,被gitlab-shell管理
        2. 由于ssh目錄(保存著服務(wù)器sshd服務(wù)啟動時自己生成的ssh_key)不備份,因此還原時候若這個目錄里有文件,則不去重新生成ssh_key,若不存在,則重新生成。若重新生成,用戶使用ssh協(xié)議進(jìn)行g(shù)it push,會報錯告知不合法的認(rèn)證
        3. 備份只會備份3個目錄:repositories、db、uploads,然后會額外生成一個backup_information.yml文件
        4. gitlab-satellites和tmp都是臨時目錄,因此不參與備份
        5. docker run --rm不會影響容器退出狀態(tài)的輸出
        6. 還原時候會將數(shù)據(jù)庫里的表先DROP表再創(chuàng)建,因?yàn)閟ql文件在INSERT之前會drop table if exists
        7. 還原時候,若存在要恢復(fù)的目錄,則會將原來的目錄mv成.old.時間戳

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    美女被啪的视频在线观看| 欧美黑人黄色一区二区| 国产亚洲中文日韩欧美综合网| 中文字幕免费观看亚洲视频| 一区中文字幕人妻少妇| 欧洲日韩精品一区二区三区| 国产成人精品视频一二区| 精品丝袜一区二区三区性色| 国产午夜精品久久福利| 国产精品久久久久久久久久久痴汉| 日本欧美一区二区三区高清| 欧美日韩中黄片免费看| 国产女同精品一区二区| 日韩精品区欧美在线一区| 久久精品久久精品中文字幕| 亚洲一区二区三区中文久久| 国产户外勾引精品露出一区| 欧美日韩国产一级91| 国产免费人成视频尤物| 成年人视频日本大香蕉久久| 91亚洲国产成人久久精品麻豆| 久久永久免费一区二区| 欧美日韩国产综合在线| 欧美一区二区三区喷汁尤物| 东京热加勒比一区二区| 久久国产精品熟女一区二区三区| 久久久精品日韩欧美丰满 | 亚洲欧美日韩综合在线成成| 韩国日本欧美国产三级| 日本高清二区视频久二区| 99久久精品一区二区国产| 青青操成人免费在线视频| 欧美日韩精品视频在线| 成人午夜激情在线免费观看| 五月综合婷婷在线伊人| 国产亚洲欧美日韩国亚语| 邻居人妻人公侵犯人妻视频| 东京热男人的天堂社区| 日韩欧美中文字幕人妻| 国产真人无遮挡免费视频一区| 91亚洲熟女少妇在线观看|