要在 ECS 服务器上搭建 Gitlab 服务,对 ECS 服务器的要求通常至少是2核2G。如果服务器刚好满足这个配置,则还需设置下虚拟磁盘,将虚拟磁盘也设置成2G。通常一个2核4G的设备搭建 Gitlab 服务,大概可以供10~50个人的团队使用。

一、使用 Docker 安装 Gitlab

1.1 运行 Docker 命令

可参照 官方文档,官方推荐命令如下:

  1. sudo docker run --detach \
  2. --hostname gitlab.example.com \
  3. --publish 443:443 --publish 80:80 --publish 22:22 \
  4. --name gitlab \
  5. --restart always \
  6. --volume $GITLAB_HOME/gitlab/config:/etc/gitlab \
  7. --volume $GITLAB_HOME/gitlab/logs:/var/log/gitlab \
  8. --volume $GITLAB_HOME/gitlab/data:/var/opt/gitlab \
  9. gitlab/gitlab-ce:latest

其中:

  • --name: 指定镜像名称;
  • --detach: 相当于 -d 命令,表示在后台运行;
  • --volume: 将 gitlab 的数据映射到宿主机上;
  • 22 端口是克隆仓库时的端口;

实际运行命令如下:

  1. docker run --detach \
  2. --hostname 121.46.115.249 \
  3. --publish 12080:80 --publish 12022:22 \
  4. --name gitlab_test \
  5. --restart always \
  6. gitlab/gitlab-ce:latest

1.2 添加防火墙端口

命令运行成功后,可查看 gitlab 是否安装成功。

docker ps | grep gitlab_test

安装成功后,还需通过防火墙放行该端口:

firewall-cmd —add-port=42080/tcp —permanent firewall-cmd —add-port=42022/tcp —permanent firewall-cmd —reload

1.3 设置登录密码

登陆 121.46.115.249:12080 端口,即可访问刚才搭建的Gitlab服务。第一次进入Gitlab网站,需设置下相关密码。
1590196280819.jpg

完成密码设置后,即可登录Gitlab网站。

注:**默认管理员的账号是 root

二、通过 Docker Compose 安装 Gitlab

2.1 官方推荐方式

可参照官方推荐的集成文件配置,通过用Docker Compose 安装 Gitlab。

2.2 采用开源方案

在 Github 上有开源作者,开源了一个 docker-gitlab 仓库,在里面创建好了docker-compose 文件,该文件包含邮件服务、升级、创建/恢复备份等等一系列常规功能的配置。

在这个集成配置文件中,只需配置下服务器域名、服务器端口、映射到宿主机上的端口、管理员邮箱、管理员初始密码等功能即可,配置文件如下:

  1. version: '2'
  2. services:
  3. redis:
  4. restart: always
  5. image: sameersbn/redis:4.0.9-2
  6. command:
  7. - --loglevel warning
  8. volumes:
  9. - redis-data:/var/lib/redis:Z
  10. postgresql:
  11. restart: always
  12. image: sameersbn/postgresql:10-2
  13. volumes:
  14. - postgresql-data:/var/lib/postgresql:Z
  15. environment:
  16. - DB_USER=gitlab
  17. - DB_PASS=password
  18. - DB_NAME=gitlabhq_production
  19. - DB_EXTENSION=pg_trgm
  20. gitlab:
  21. restart: always
  22. image: sameersbn/gitlab:12.10.6
  23. depends_on:
  24. - redis
  25. - postgresql
  26. # 端口映射
  27. ports:
  28. - "12080:80"
  29. - "12022:22"
  30. volumes:
  31. - gitlab-data:/home/git/data:Z
  32. environment:
  33. - DEBUG=false
  34. - DB_ADAPTER=postgresql
  35. - DB_HOST=postgresql
  36. - DB_PORT=5432
  37. - DB_USER=gitlab
  38. - DB_PASS=password
  39. - DB_NAME=gitlabhq_production
  40. - REDIS_HOST=redis
  41. - REDIS_PORT=6379
  42. - TZ=Asia/Kolkata
  43. - GITLAB_TIMEZONE=Kolkata
  44. - GITLAB_HTTPS=false
  45. - SSL_SELF_SIGNED=false
  46. # 修改成当前服务器IP
  47. - GITLAB_HOST=121.46.115.249
  48. # 配置服务器端口
  49. - GITLAB_PORT=12080
  50. # 配置SSH端口
  51. - GITLAB_SSH_PORT=12022
  52. - GITLAB_RELATIVE_URL_ROOT=
  53. # 以下三项可以随便修改
  54. - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
  55. - GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
  56. - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string
  57. # 注意:密码需8位
  58. - GITLAB_ROOT_PASSWORD=88888888
  59. # 配置管理员邮箱
  60. - GITLAB_ROOT_EMAIL=xxxxxx@163.com
  61. - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
  62. - GITLAB_NOTIFY_PUSHER=false
  63. - GITLAB_EMAIL=notifications@example.com
  64. - GITLAB_EMAIL_REPLY_TO=noreply@example.com
  65. - GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com
  66. # 备份周期:此处是每天晚上1点钟开始备份
  67. - GITLAB_BACKUP_SCHEDULE=daily
  68. - GITLAB_BACKUP_TIME=01:00
  69. # 备份过期时间(以秒为单位),604800表示7天,即超过7天的备份会删除,只保留最新7天的备份
  70. - GITLAB_BACKUP_EXPIRY=604800
  71. # 可以配置公共邮箱,或者收费类型的邮件服务
  72. - SMTP_ENABLED=false
  73. - SMTP_DOMAIN=www.example.com
  74. - SMTP_HOST=smtp.gmail.com
  75. - SMTP_PORT=587
  76. - SMTP_USER=mailer@example.com
  77. - SMTP_PASS=password
  78. - SMTP_STARTTLS=true
  79. - SMTP_AUTHENTICATION=login
  80. - IMAP_ENABLED=false
  81. - IMAP_HOST=imap.gmail.com
  82. - IMAP_PORT=993
  83. - IMAP_USER=mailer@example.com
  84. - IMAP_PASS=password
  85. - IMAP_SSL=true
  86. - IMAP_STARTTLS=false
  87. - OAUTH_ENABLED=false
  88. - OAUTH_AUTO_SIGN_IN_WITH_PROVIDER=
  89. - OAUTH_ALLOW_SSO=
  90. - OAUTH_BLOCK_AUTO_CREATED_USERS=true
  91. - OAUTH_AUTO_LINK_LDAP_USER=false
  92. - OAUTH_AUTO_LINK_SAML_USER=false
  93. - OAUTH_EXTERNAL_PROVIDERS=
  94. - OAUTH_CAS3_LABEL=cas3
  95. - OAUTH_CAS3_SERVER=
  96. - OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false
  97. - OAUTH_CAS3_LOGIN_URL=/cas/login
  98. - OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate
  99. - OAUTH_CAS3_LOGOUT_URL=/cas/logout
  100. - OAUTH_GOOGLE_API_KEY=
  101. - OAUTH_GOOGLE_APP_SECRET=
  102. - OAUTH_GOOGLE_RESTRICT_DOMAIN=
  103. - OAUTH_FACEBOOK_API_KEY=
  104. - OAUTH_FACEBOOK_APP_SECRET=
  105. - OAUTH_TWITTER_API_KEY=
  106. - OAUTH_TWITTER_APP_SECRET=
  107. - OAUTH_GITHUB_API_KEY=
  108. - OAUTH_GITHUB_APP_SECRET=
  109. - OAUTH_GITHUB_URL=
  110. - OAUTH_GITHUB_VERIFY_SSL=
  111. - OAUTH_GITLAB_API_KEY=
  112. - OAUTH_GITLAB_APP_SECRET=
  113. - OAUTH_BITBUCKET_API_KEY=
  114. - OAUTH_BITBUCKET_APP_SECRET=
  115. - OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL=
  116. - OAUTH_SAML_IDP_CERT_FINGERPRINT=
  117. - OAUTH_SAML_IDP_SSO_TARGET_URL=
  118. - OAUTH_SAML_ISSUER=
  119. - OAUTH_SAML_LABEL="Our SAML Provider"
  120. - OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient
  121. - OAUTH_SAML_GROUPS_ATTRIBUTE=
  122. - OAUTH_SAML_EXTERNAL_GROUPS=
  123. - OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL=
  124. - OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME=
  125. - OAUTH_SAML_ATTRIBUTE_STATEMENTS_USERNAME=
  126. - OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME=
  127. - OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=
  128. - OAUTH_CROWD_SERVER_URL=
  129. - OAUTH_CROWD_APP_NAME=
  130. - OAUTH_CROWD_APP_PASSWORD=
  131. - OAUTH_AUTH0_CLIENT_ID=
  132. - OAUTH_AUTH0_CLIENT_SECRET=
  133. - OAUTH_AUTH0_DOMAIN=
  134. - OAUTH_AUTH0_SCOPE=
  135. - OAUTH_AZURE_API_KEY=
  136. - OAUTH_AZURE_API_SECRET=
  137. - OAUTH_AZURE_TENANT_ID=
  138. volumes:
  139. redis-data:
  140. postgresql-data:
  141. gitlab-data:

然后运行 docker-compose 命令,将Gitlab服务跑起来:

docker-compose up -d

2.3 创建/恢复备份

2.3.1 自动备份

在 2.2 中的 docker-compose.yml设置了一个定时任务,如下所示:

  1. # 备份周期:此处是每天晚上1点钟开始备份
  2. - GITLAB_BACKUP_SCHEDULE=daily
  3. - GITLAB_BACKUP_TIME=01:00
  4. # 备份过期时间(以秒为单位),604800表示7天,即超过7天的备份会删除,只保留最新7天的备份
  5. - GITLAB_BACKUP_EXPIRY=604800

该配置会在每天晚上1点钟开始备份,备份的过期时间是7天,即超过7天的备份会自动删除,只保留最新7天的备份。

2.3.2 手动备份

docker-compose.yml 所在的目录下运行如下命令:

docker-compose run —rm gitlab app:rake gitlab:backup:create

注:
备份文件的过程中,可能会出现如下提示,表示在备份过程中将一些敏感数据也备份进来了。

  1. Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
  2. and are not included in this backup. You will need these files to restore a backup.
  3. Please back them up manually.

2.3.3 恢复备份

先列出当前有哪些可用的备份:

docker-compose run —rm gitlab app:rake gitlab:backup:restore

命令运行成功后,则会出现如下提示:即选定一个备份文件进行恢复。

  1. 1590407940_2020_05_25_12.10.6_gitlab_backup.tar (created at 25 May, 2020 - 17:29:00 IST)
  2. Select a backup to restore:

注意:在输入要恢复的备份文件名称时,需使用恢复文件的全名(包括.tar 结尾),此处则是1590407940_2020_05_25_12.10.6_gitlab_backup.tar