要在 ECS 服务器上搭建 Gitlab 服务,对 ECS 服务器的要求通常至少是2核2G。如果服务器刚好满足这个配置,则还需设置下虚拟磁盘,将虚拟磁盘也设置成2G。通常一个2核4G的设备搭建 Gitlab 服务,大概可以供10~50个人的团队使用。
一、使用 Docker 安装 Gitlab
1.1 运行 Docker 命令
可参照 官方文档,官方推荐命令如下:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/gitlab/config:/etc/gitlab \
--volume $GITLAB_HOME/gitlab/logs:/var/log/gitlab \
--volume $GITLAB_HOME/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
其中:
--name
: 指定镜像名称;--detach
: 相当于-d
命令,表示在后台运行;--volume
: 将 gitlab 的数据映射到宿主机上;22
端口是克隆仓库时的端口;
实际运行命令如下:
docker run --detach \
--hostname 121.46.115.249 \
--publish 12080:80 --publish 12022:22 \
--name gitlab_test \
--restart always \
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网站,需设置下相关密码。
完成密码设置后,即可登录Gitlab网站。
注:**默认管理员的账号是 root
。
二、通过 Docker Compose 安装 Gitlab
2.1 官方推荐方式
可参照官方推荐的集成文件配置,通过用Docker Compose 安装 Gitlab。
2.2 采用开源方案
在 Github 上有开源作者,开源了一个 docker-gitlab 仓库,在里面创建好了docker-compose
文件,该文件包含邮件服务、升级、创建/恢复备份等等一系列常规功能的配置。
在这个集成配置文件中,只需配置下服务器域名、服务器端口、映射到宿主机上的端口、管理员邮箱、管理员初始密码等功能即可,配置文件如下:
version: '2'
services:
redis:
restart: always
image: sameersbn/redis:4.0.9-2
command:
- --loglevel warning
volumes:
- redis-data:/var/lib/redis:Z
postgresql:
restart: always
image: sameersbn/postgresql:10-2
volumes:
- postgresql-data:/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:12.10.6
depends_on:
- redis
- postgresql
# 端口映射
ports:
- "12080:80"
- "12022:22"
volumes:
- gitlab-data:/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
# 修改成当前服务器IP
- GITLAB_HOST=121.46.115.249
# 配置服务器端口
- GITLAB_PORT=12080
# 配置SSH端口
- GITLAB_SSH_PORT=12022
- 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
# 注意:密码需8位
- GITLAB_ROOT_PASSWORD=88888888
# 配置管理员邮箱
- GITLAB_ROOT_EMAIL=xxxxxx@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
# 备份周期:此处是每天晚上1点钟开始备份
- GITLAB_BACKUP_SCHEDULE=daily
- GITLAB_BACKUP_TIME=01:00
# 备份过期时间(以秒为单位),604800表示7天,即超过7天的备份会删除,只保留最新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_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=
volumes:
redis-data:
postgresql-data:
gitlab-data:
然后运行 docker-compose 命令,将Gitlab服务跑起来:
docker-compose up -d
2.3 创建/恢复备份
2.3.1 自动备份
在 2.2 中的 docker-compose.yml
设置了一个定时任务,如下所示:
# 备份周期:此处是每天晚上1点钟开始备份
- GITLAB_BACKUP_SCHEDULE=daily
- GITLAB_BACKUP_TIME=01:00
# 备份过期时间(以秒为单位),604800表示7天,即超过7天的备份会删除,只保留最新7天的备份
- GITLAB_BACKUP_EXPIRY=604800
该配置会在每天晚上1点钟开始备份,备份的过期时间是7天,即超过7天的备份会自动删除,只保留最新7天的备份。
2.3.2 手动备份
在 docker-compose.yml
所在的目录下运行如下命令:
docker-compose run —rm gitlab app:rake gitlab:backup:create
注:
备份文件的过程中,可能会出现如下提示,表示在备份过程中将一些敏感数据也备份进来了。
Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
2.3.3 恢复备份
先列出当前有哪些可用的备份:
docker-compose run —rm gitlab app:rake gitlab:backup:restore
命令运行成功后,则会出现如下提示:即选定一个备份文件进行恢复。
‣ 1590407940_2020_05_25_12.10.6_gitlab_backup.tar (created at 25 May, 2020 - 17:29:00 IST)
Select a backup to restore:
注意:在输入要恢复的备份文件名称时,需使用恢复文件的全名(包括.tar 结尾),此处则是1590407940_2020_05_25_12.10.6_gitlab_backup.tar
。