一、GitLab简介
GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。Github是公共的git仓库,而Gitlab适合于搭建企业内部私有git仓库
- 官网:
https://about.gitlab.com/ https://github.com/gitlabhq/gitlabhq
- 截止本文创建时间,GitLab最新版本为v7.4.3
二、组件
7.4.3之前版本,镜像里包含所有组件,7.4.3版本镜像里只包含核心组件:nginx、sshd、ruby on rails、sidekiq,sameersbn/gitlab是基于ubuntu镜像的
前端:Nginx,用于页面及Git tool走http或https协议
后端:Gitlab服务,采用Ruby on Rails框架,通过unicorn实现后台服务及多进程
SSHD:开启sshd服务,用于用户上传ssh key进行版本克隆及上传。注:用户上传的ssh key是保存到git账户中
数据库:目前仅支持MySQL和PostgreSQL
Redis:用于存储用户session和任务,任务包括新建仓库、发送邮件等等
Sidekiq:Rails框架自带的,订阅redis中的任务并执行
三、架构
四、GitLab安装部署
包含一切的RPM包: https://about.gitlab.com/downloads/ (官方推荐)
个人不推荐,因为RPM包容量太大,200多M,适合于Linux初学者,未尝试过
- 手动安装: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md (深入了解)
可以最大程度了解GitLab的组件之间架构,但对于入门并不适合
- 第三方docker镜像: https://github.com/sameersbn/docker-gitlab (笔者推荐)
镜像可以快速实现部署并使用,适合于熟悉Docker的人使用,入门很快。而且使用Docker镜像就使用户不用过多了解内部细节,通过启动容器带上环境变量参数即可实现GitLab参数的配置
4.1、本文主要介绍docker下安装:
采用docker镜像安装GitLab
4.2、下载镜像
- docker pull sameersbn/gitlab:7.4.3 # 下载gitlab镜像
- docker pull sameersbn/mysql:latest # 下载gitlab所用到的mysql镜像
- docker pull sameersbn/redis:latest # 下载gitlab所用到的redis镜像
4.2.1、启动redis
- 命令:
docker run --name=gitlab_redis -tid sameersbn/redis:latest
4.2.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
4.2.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.example.com‘ -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 ‘[email protected]‘ -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.example.com‘ -e ‘SMTP_ENABLED=true‘ -e ‘SMTP_DOMAIN=example.com‘ -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
这一步骤会耗时几分钟,因为这一步会做一些初始化操作,例如导入数据表结构等。可以通过docker logs gitlab来查看安装过程。同理,mysql、redis容器也可以通过docker logs gitlab_mysql和docker logs gitlab_redis来查看启动信息。
4.3、总docker-composer.yml文件
version: ‘2‘ services: redis: restart: always image: sameersbn/redis:latest command: - --loglevel warning volumes: - /srv/docker/gitlab/redis:/var/lib/redis:Z postgresql: restart: always image: sameersbn/postgresql:9.5-1 volumes: - /srv/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.11.5 depends_on: - redis - postgresql ports: - "10080:80" - "10022:22" volumes: - /srv/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=192.168.103.29 - 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=[email protected] - GITLAB_EMAIL_REPLY_TO=[email protected] - GITLAB_INCOMING_EMAIL_ADDRESS=[email protected] - 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=[email protected] - SMTP_PASS=password - SMTP_STARTTLS=true - SMTP_AUTHENTICATION=login - IMAP_ENABLED=false - IMAP_HOST=imap.gmail.com - IMAP_PORT=993 - IMAP_USER=[email protected] - 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=
五、GitLab维护
由于gitlab容器在启动时已将宿主/opt/gitlab/data、/opt/gitlab/log目录挂载到容器里,因此可以在宿主上进入这2个目录中查看,另外可以通过docker logs查看
总体docker-compose中数据在/srv/docker/gitlab/gitlab/backups下
备份只会备份3个目录:repositories、db、uploads,然后会额外生成一个backup_information.yml文件
sameersbn/gitlab是基于ubuntu镜像的
迁移实现方式:
可以使用gitlab备份与恢复的命令,实现数据的迁移
备份:
bundle exec rake gitlab:backup:create RAILS_ENV=production
该备份命令会备份本地gitlab的所有项目的仓库以及mysql数据。
恢复:
bundle exec rake gitlab:backup:restore RAILS_ENV=production BACKUP=543143575
该恢复命令会导入备份中的mysql数据和项目仓库目录,并可以根据需要,从mysql库中的数据中重构~/.ssh/authorized_keys身份验证文件
注意:必须到容器里面 到git用户下,到/home/git/gitlab/下执行,不是data目录,不然会没有项目
要把getlab的地址改成本地的地址,端口改成对外的端口10080和10022,不然没办法push。
第一个yes 第二个no
出处说明:
文章多摘抄:http://www.linuxidc.com/Linux/2016-05/131886.htm
下载地址;wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
出处;
https://github.com/sameersbn/docker-gitlab#postgresql
http://www.tuicool.com/articles/bYbi2mJ
出;http://www.mamicode.com/info-detail-1149868.html