Skip to content

Docker 部署 Gitlab

请注意

此处使用 docker-compose 安装,关于 docker-compose 的安装方式请参考 Docker 的基础参考文档。

配置文件与启动

1.在服务器创建一个 gitlab 文件夹,进入到 gitlab 文件夹,创建 docker-compose.yaml 文件

2.将下面的内容拷贝到 docker-compose.yaml 中

3.docker-compose up -d 启动容器,重新启动也是这个命令

yaml
version: "2.3"

services:
  redis:
    restart: always
    image: redis:6.2.6
    command:
      - --loglevel warning
    volumes:
      - /home/gitlab_compose_store/redis:/data:Z

  postgresql:
    restart: always
    image: sameersbn/postgresql:12-20200524
    volumes:
      - /home/gitlab_compose_store/postgresql:/var/lib/postgresql:Z
    environment:
      - DB_USER=gitlab
      - DB_PASS=password
      - DB_NAME=gitlabhq_production
      - DB_EXTENSION=pg_trgm,btree_gist

  gitlab:
    restart: always
    image: sameersbn/gitlab:15.0.0
    depends_on:
      - redis
      - postgresql
    # 跟下面的端口保持一致 GITLAB_PORT GITLAB_SSH_PORT
    ports:
      - "9528:80"
      - "9522:22"
    volumes:
      - /home/gitlab_compose_store/gitlab:/home/git/data:Z
    healthcheck:
      test: ["CMD", "/usr/local/sbin/healthcheck"]
      interval: 5m
      timeout: 10s
      retries: 3
      start_period: 5m
    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

      # 设置https的协议
      - GITLAB_HTTPS=true
      - SSL_SELF_SIGNED=false

      # 服务器的IP地址或者域名都可以
      # 如果需要在clone代码的时候展示的不是IP地址的话,需要改成下面的写法
      - GITLAB_HOST=gitlab.cghbh.com
      # 对外映射提供访问的端口
      - GITLAB_PORT=
      # 22端口对外映射
      - GITLAB_SSH_PORT=
      - 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=12345678
      # 管理员的邮箱
      - GITLAB_ROOT_EMAIL=gchent54@163.com

      - 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备份的周期
      - GITLAB_BACKUP_SCHEDULE=daily
      # 备份开始的时间
      - GITLAB_BACKUP_TIME=01:00
      # 超时设置:7天,即保证七天的备份,超过七天之后就删除前面的备份,以此类推
      - GITLAB_BACKUP_EXPIRY=604800

      - 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_BITBUCKET_URL=

      - 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_USERNAME=
      - 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_AUTH0_SCOPE=

      - OAUTH_AZURE_API_KEY=
      - OAUTH_AZURE_API_SECRET=
      - OAUTH_AZURE_TENANT_ID=

备份与恢复

shell
# 特别注意:执行下面的命令,需要在创建docker-compose.yaml的文件夹下执行
# 在创建docker-compose.yaml文件的目录执行下面的命令,备份gitlab文件
docker-compose run --rm gitlab app:rake gitlab:backup:create

# 列出可以恢复的备份列表
# 例如1667115651_2022_10_30_15.5.1_gitlab_backup.tar
# 在执行下面的命令之后,会出现可以恢复的备份列表,可以选择备份的名称输入之后回车开始恢复
docker-compose run --rm gitlab app:rake gitlab:backup:restore

# 也可以输入下面这种类似格式的命令恢复指定的备份文件版本
docker-compose run --rm gitlab app:rake gitlab:backup:restore BACKUP=1667115651_2022_10_30_15.5.1

配置 https 访问

配置 https 访问的步骤:

1.在上述使用 docker-compose 创建的容器目录/home/gitlab_compose_store/gitlab 中创建 certs 目录

2.将配置 ssl 的文件放入到 certs 目录,修改 Nginx 的配置如下

3.docker-compose.yaml 的配置如上配置即可,注意配置修改完之后 docker-compose up -d 重启容器,使用 systemctl reload nginx 来重启 Nginx

nginx
upstream gitlab {
  server 127.0.0.1:9528;
}

server {
    listen       80;
    # 设置最大的上传文件限制
    client_max_body_size 1000M;
    server_name  gitlab.cghbh.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen   443;
    ssl      on;
    # 设置最大的上传文件限制
    client_max_body_size 1000M;
    # 注意是certs目录
    ssl_certificate      /home/gitlab_compose_store/gitlab/certs/gitlab.cghbh.com.pem;
    ssl_certificate_key   /home/gitlab_compose_store/gitlab/certs/gitlab.cghbh.com.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    server_name  gitlab.cghbh.com;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  "https";
        # proxy_set_header X-Forwarded-Ssl  "on";
        proxy_pass http://gitlab;
    }
}