利用Docker搭建GitLab代码货仓

升级GitLab到8.2.0 
http://www.linuxidc.com/Linux/2015-12/126220.htm

图片 1

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
    

首先你已经安装了Docker

图片 2

在 Ubuntu 15.04 上如何安装Docker及基本用法
http://www.linuxidc.com/Linux/2015-09/122885.htm

2.1. 概述

  • GitLab
    是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。Github是公共的git仓库,而Gitlab适合于搭建企业内部私有git仓库
  • 官网:

    https://about.gitlab.com/
    
    https://github.com/gitlabhq/gitlabhq
    

  • 截止本文创建时间,GitLab最新版本为v7.4.3

常规做法1.0版无效

echo “DOCKER_OPTS=”$DOCKER_OPTS
–registry-mirror=http://c5175c67.m.daocloud.io””
| sudo tee -a /etc/default/docker
sudo service docker restart

然而并没有卵用,依然很慢。

## Ubuntu 16.04上的做法

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/mirror.conf
<<-‘EOF’
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd://
–registry-mirror=http://c5175c67.m.daocloud.io
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

`--registry-mirror=http://*****.m.daocloud.io`中的地址,需要自己注册分配:https://www.daocloud.io/,或者自己找个共用镜像地址。

然后在试试速度:

sudo docker pull ubuntu

## 安装gitlab试试

按照[官方文档](https://github.com/sameersbn/docker-gitlab#quick-start)

### 1. 安装postgresql

sudo docker run –name=’postgresql’ -d
-e ‘DB_NAME=gitlabhq_production’ -e ‘DB_USER=gitlab’ -e
‘DB_PASS=password’
-e ‘DB_EXTENSION=pg_trgm’
-v /home/erick/opt/postgresql/data:/var/lib/postgresql
sameersbn/postgresql:9.4-22

### 2. 安装redis

sudo docker run –name=redis -d sameersbn/redis:latest

### 3. 安装gitlab

sudo docker run –name=’gitlab’ -d
–link redis:redisio
-v /home/erick/opt/gitlab/data:/home/git/data
-p 10022:22 -p 10080:80
-e ‘GITLAB_PORT=10080’
-e ‘GITLAB_SSH_PORT=10022’
–link postgresql:postgresql
-e
‘GITLAB_EMAIL=gitlab@daocloud.io’
-e ‘GITLAB_BACKUPS=daily’
-e ‘GITLAB_HOST=gitlab.daocloud.io’
-e ‘GITLAB_GRAVATAR_ENABLED=false’
-e
‘GITLAB_SECRETS_DB_KEY_BASE=VpkLC3g4KX9gfRpPqmxc43brjz3R4jgvrMjqcXj433x7npRhKJNPdbKw7whTxWnJ’
sameersbn/gitlab:latest

安装就完了,需要等待一段时间让gitlab进行初始化,然后访问对应ip的10080端口:`http://127.0.0.1:10080`就可以看到gitlab的修改root密码界面了,**默认安装的为英文版**。

***

## 疑问:
1. Docker命令不加sudo不能运行;
2. 加速器配置位置变化的原因还不太清楚,好像跟systemd有关;
3. Docker 加速器 2.0是使用`dao pull ubuntu`进行下载image,但是原生的`docker pull ubuntu`不能加速,不知道是不是2.0就是这样的机制;

***

### 安装redmine

docker run --name=redmine -d \
  --link=postgresql:postgresql --publish=10083:80 \
  --env='REDMINE_PORT=10083' \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  sameersbn/redmine:latest

1:下载搭建gitlab的相关镜像:(这里使用postgresql数据库)

version: ‘2’

services:
    redis:
        restart: always
        image: sameersbn/redis:latest
        command:
        – –loglevel warning
        volumes:
        – /opt/data/docker_gitlab/redis:/var/lib/redis:Z
   
    postgresql:
        restart: always
        image: sameersbn/postgresql:9.5-3
        volumes:
        – /opt/data/docker_gitlab/postgresql:/var/lib/postgresql:Z
        environment:
        – DB_USER=gitlab
        – DB_PASS=password
        – DB_NAME=gitlabhq_production
        – DB_EXTENSION=pg_trgm
   
    gitlab:
        restart: always
        image: sameersbn/gitlab:8.13.5
        depends_on:
        – redis
        – postgresql
        ports:
        – "10080:80"
        – "10022:22"
        volumes:
        – /opt/data/docker_gitlab//gitlab:/home/git/data:Z
        environment:
        – DEBUG=false
       
        – DB_ADAPTER=postgresql
        – DB_HOST=postgresql
        – DB_PORT=5432
        – DB_USER=gitlab
        – DB_PASS=password
        – DB_NAME=gitlabhq_production
       
        – REDIS_HOST=redis
        – REDIS_PORT=6379
       
        – TZ=Asia/Kolkata
        – GITLAB_TIMEZONE=Kolkata
       
        – GITLAB_HTTPS=false
        – SSL_SELF_SIGNED=false
       
        – GITLAB_HOST=localhost
        – GITLAB_PORT=10080
        – GITLAB_SSH_PORT=10022
        – GITLAB_RELATIVE_URL_ROOT=
        – GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
        – GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
        – GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string
       
        – GITLAB_ROOT_PASSWORD=
        – GITLAB_ROOT_EMAIL=
       
        – GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
        – GITLAB_NOTIFY_PUSHER=false
       
        – GITLAB_EMAIL=notifications@example.com
        – GITLAB_EMAIL_REPLY_TO=noreply@example.com
        – GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com
       
        – GITLAB_BACKUP_SCHEDULE=daily
        – GITLAB_BACKUP_TIME=01:00
       
        – SMTP_ENABLED=false
        – SMTP_DOMAIN=www.example.com
        – SMTP_HOST=smtp.gmail.com
        – SMTP_PORT=587
        – SMTP_USER=mailer@example.com
        – SMTP_PASS=password
        – SMTP_STARTTLS=true
        – SMTP_AUTHENTICATION=login
       
        – IMAP_ENABLED=false
        – IMAP_HOST=imap.gmail.com
        – IMAP_PORT=993
        – IMAP_USER=mailer@example.com
        – IMAP_PASS=password
        – IMAP_SSL=true
        – IMAP_STARTTLS=false
       
        – OAUTH_ENABLED=false
        – OAUTH_AUTO_SIGN_IN_WITH_PROVIDER=
        – OAUTH_ALLOW_SSO=
        – OAUTH_BLOCK_AUTO_CREATED_USERS=true
        – OAUTH_AUTO_LINK_LDAP_USER=false
        – OAUTH_AUTO_LINK_SAML_USER=false
        – OAUTH_EXTERNAL_PROVIDERS=
       
        – OAUTH_CAS3_LABEL=cas3
        – OAUTH_CAS3_SERVER=
        – OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false
        – OAUTH_CAS3_LOGIN_URL=/cas/login
        – OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate
        – OAUTH_CAS3_LOGOUT_URL=/cas/logout
       
        – OAUTH_GOOGLE_API_KEY=
        – OAUTH_GOOGLE_APP_SECRET=
        – OAUTH_GOOGLE_RESTRICT_DOMAIN=
       
        – OAUTH_FACEBOOK_API_KEY=
        – OAUTH_FACEBOOK_APP_SECRET=
       
        – OAUTH_TWITTER_API_KEY=
        – OAUTH_TWITTER_APP_SECRET=
       
        – OAUTH_GITHUB_API_KEY=
        – OAUTH_GITHUB_APP_SECRET=
        – OAUTH_GITHUB_URL=
        – OAUTH_GITHUB_VERIFY_SSL=
       
        – OAUTH_GITLAB_API_KEY=
        – OAUTH_GITLAB_APP_SECRET=
       
        – OAUTH_BITBUCKET_API_KEY=
        – OAUTH_BITBUCKET_APP_SECRET=
       
        – OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL=
        – OAUTH_SAML_IDP_CERT_FINGERPRINT=
        – OAUTH_SAML_IDP_SSO_TARGET_URL=
        – OAUTH_SAML_ISSUER=
        – OAUTH_SAML_LABEL="Our SAML Provider"
        – OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient
        – OAUTH_SAML_GROUPS_ATTRIBUTE=
        – OAUTH_SAML_EXTERNAL_GROUPS=
        – OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL=
        – OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME=
        – OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME=
        – OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=
       
        – OAUTH_CROWD_SERVER_URL=
        – OAUTH_CROWD_APP_NAME=
        – OAUTH_CROWD_APP_PASSWORD=
       
        – OAUTH_AUTH0_CLIENT_ID=
        – OAUTH_AUTH0_CLIENT_SECRET=
        – OAUTH_AUTH0_DOMAIN=
       
        – OAUTH_AZURE_API_KEY=
        – OAUTH_AZURE_API_SECRET=
        – OAUTH_AZURE_TENANT_ID=

5.5. gitlab默认时区是UTC

  • sameersbn/gitlab:7.4.3镜像无法对时区进行修改,若是手动安装的gitlab,可以通过修改一个.rb文件来生效,具体没有测试过,有需要的可以自行百度搜下。

 

时区是UTC主要影响的是数据库里关于时间字段的值(created_at、updated_at等),对用户git仓库是不影响的,因为git仓库的创建、代码更新都是用户通过git工具自行操作,因此是用户自己的时区。

Ubuntu
14.04下安装GitLab指南 
http://www.linuxidc.com/Linux/2015-12/126876.htm

docker pull buj7itru.mirror.aliyuncs.com/sameersbn/postgresql:9.5-3

3.2.1. 简介

  • 官网:
  • 7.4.3之前版本,镜像里包含所有组件,7.4.3版本镜像里只包含核心组件:nginx、sshd、ruby
    on rails、sidekiq

# more docker-compose.yml
version: ‘2’
services:
redis:
restart: always
image: sameersbn/redis:latest
command:

阿里云CentOS 6.5 模板上安装 Docker
http://www.linuxidc.com/Linux/2014-11/109107.htm

3.2.4.4. 给gitlab容器配置IP

  • pipework br1 gitlab 192.168.1.1/24@192.168.1.254

 

在gitlab容器启动(docker
run)时可以加上-p参数来将容器里的端口映射到宿主上,但个人比较倾向给容器配置一个独立IP,因此上述命令没有采用-p来做端口映射,但是-e
‘GITLAB_PORT=80′ -e ‘GITLAB_SSH_PORT=22′ -e
‘GITLAB_HOST=gitlab.example.com’依然要指定,否则gitlab无法使用

图片 3

因为我是虚拟机,我把机器关了之后,gitlab没自己起来,所以得手动重启一下

2. GitLab简介

GitLab
的详细介绍
:请点这里
GitLab
的下载地址
:请点这里 

在动手安装了一遍 GitLab 之后,发现了一篇利用 docker-compose
安装的文章,测试了一下,可行,完善了一下和大家分享分享。

6.2. 高可用

  • 官方有篇关于GitLab高可用的文章:

    有1/3都在讲述高可用的利弊以及不同程度的高可用带来的收益及可能引发的更多问题,说的挺有道理的。由于笔者也才刚开始使用GitLab,因此暂不测试多机load balance或failover。
    
  • 2种备份恢复方式

    1. 备份配置、仓库、数据库。
    2. 给文件系统做快照。
    官方认为第二种方法比起第一种更快,因为可以省去人为介入restore的麻烦
    XFS文件系统支持快照
    
    有2篇文章可以拜读下:
    http://www.icicletech.com/blog/gitlab-backup-made-easy 数据库数据备份到本地
    http://doc.gitlab.com/ce/raketasks/backup_restore.html 官方的,和上述其实一样
    
  • 我的备份方案:

    一. 简介:每天固定时间备份数据(仅备份MySQL和GitLab仓库重要文件,其他不备份)。若数据丢失,需要恢复,则将最近备份的数据用来恢复,会将所有数据,包括本地文件(仓库等文件)、数据库一同还原回备份时刻。
    
    二. 具体操作:
    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里。可以自行对该tar包做压缩,例如gzip 时间戳_gitlab_backup.tar。
       若$?=0表示备份成功,然后将生成的文件使用gzip压缩为.tar.gz,然后rsync推到存储上
    通过rsync命令传到一台备份存储上
    2. 恢复:
    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中的所有文件和目录列出来,复制粘贴要恢复的tar包文件名,敲入回车即开始恢复。
       注意:恢复时会将当前数据库中的所有表先删掉再导入备份tar包的里sql文件,因此此步要小心。
    
       若redis、mysql是使用环境变量带入gitlab容器的,备份和恢复命令也类似,将启动gitlab的命令复制过来,修改下--name,添加一个--rm,CMD改为gitlab:backup:create或gitlab:backup:restore即可
    
    三. 注意:
        1. 用户配置的key(即data/.ssh)是保存在数据库里,在gitlab服务启动时候会从数据库里加载并导入到.ssh里,被gitlab-shell管理
        2. 由于ssh目录(保存着服务器sshd服务启动时自己生成的ssh_key)不备份,因此还原时候若这个目录里有文件,则不去重新生成ssh_key,若不存在,则重新生成。若重新生成,用户使用ssh协议进行git push,会报错告知不合法的认证
        3. 备份只会备份3个目录:repositories、db、uploads,然后会额外生成一个backup_information.yml文件
        4. gitlab-satellites和tmp都是临时目录,因此不参与备份
        5. docker run --rm不会影响容器退出状态的输出
        6. 还原时候会将数据库里的表先DROP表再创建,因为sql文件在INSERT之前会drop table if exists
        7. 还原时候,若存在要恢复的目录,则会将原来的目录mv成.old.时间戳
    

更多GitLab相关教程见以下内容

Ubuntu
14.04下安装GitLab指南 
http://www.linuxidc.com/Linux/2015-12/126876.htm

如何在Ubuntu Server 14.04下安装Gitlab中文版 
http://www.linuxidc.com/Linux/2015-12/126875.htm

CentOS源码安装GitLab汉化版 
http://www.linuxidc.com/Linux/2015-10/124648.htm

在 Ubuntu 12.04 上安装 GitLab
http://www.linuxidc.com/Linux/2012-12/75249.htm

GitLab 5.3 升级注意事项
http://www.linuxidc.com/Linux/2013-06/86473.htm

在 CentOS 上部署 GitLab (自托管的Git项目仓库)
http://www.linuxidc.com/Linux/2013-06/85754.htm

在RHEL6/CentOS6/ScientificLinux6上安装GitLab 6.0.2
http://www.linuxidc.com/Linux/2014-03/97831.htm

CentOS 6.5安装GitLab教程及相关问题解决
http://www.linuxidc.com/Linux/2014-05/101526.htm

GitLab
的详细介绍
:请点这里
GitLab
的下载地址
:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-05/131886.htm

图片 4

CentOS源码安装GitLab汉化版 
http://www.linuxidc.com/Linux/2015-10/124648.htm

6、重启  

5.2. 限制git上传的单个文件大小

  • 若gitlab是通过sameersbn/gitlab:7.4.3镜像创建的,那么可以通过环境变量NGINX_MAX_UPLOAD_SIZE进行限制

5.3.
通过API进行一些操作例如创建Project,得到成功的响应,但却没有立即生效,过了几秒才生效

  • 由于GitLab为异步架构,Ruby on
    Rails收到创建Project请求后将该任务推送到Redis中,但是没有等待执行完毕,而是直接返回成功。后台Sidekiq从Redis订阅任务并实时执行,但由于执行需要时间,而API返回很快,因此会造成这种情况发生。目前没有其他解决办法,只能在自己程序逻辑里sleep几秒进行重试

5.4. 页面上”Profile settings->SSH Keys”与”Project Settings里Deploy
Keys”的区别

  • Profile settings->SSH
    Keys:是用户全局的Key,具有对该用户所有项目仓库进行上传下载(push、clone)的权限
  • Project Settings里Deploy
    Keys:针对某个项目,具有下载(clone)的权限,而不具备上传(push)的权限

更多GitLab相关教程见以下内容

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142666.htm

4. GitLab API wrappers

  • 官方推荐:
  • python:pyapi-gitlab

    基本使用:
    pip install pyapi-gitlab
    import gitlab
    git = gitlab.Gitlab("http://gitlab.example.com", token="EHBLkwhr_WYzn-sXNnNs")  # token即在页面上Profile settings->Account里能看到自动生成好的Private token
    git.getusers()
    
  • 顺便推荐个Git本身的python api模块:

 

其他很多git库的实现都太底层了,和linux的git命令完全不一样,一点也不友好。但目前发现这个模块上传下载代码只支持SSH,不支持HTTP,因此我还是更喜欢使用linux
git命令