Docker下搭建gitlab


一、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初學者,未嘗試過

4.1、本文主要介紹docker下安裝:

采用docker鏡像安裝GitLab

docker_gitlab_arch

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 'LDAP_BIND_DN=test@example.com' \ -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=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=
View Code

啟動:docker-copose -f docker-composer.yml up -d

備注:docker-compose安裝

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


 注意:gitlab可以直接刪除重啟再起一個數據還是有的。

出處說明:

文章多摘抄: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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM