1. 程式人生 > >Docker下搭建gitlab

Docker下搭建gitlab

cool face long timezone 額外 aps 深入 gitlab備份 rect

一、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=
View Code

五、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

Docker下搭建gitlab