要在 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: alwaysimage: sameersbn/redis:4.0.9-2command:- --loglevel warningvolumes:- redis-data:/var/lib/redis:Zpostgresql:restart: alwaysimage: sameersbn/postgresql:10-2volumes:- postgresql-data:/var/lib/postgresql:Zenvironment:- DB_USER=gitlab- DB_PASS=password- DB_NAME=gitlabhq_production- DB_EXTENSION=pg_trgmgitlab:restart: alwaysimage: sameersbn/gitlab:12.10.6depends_on:- redis- postgresql# 端口映射ports:- "12080:80"- "12022:22"volumes:- gitlab-data:/home/git/data:Zenvironment:- 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 dataand 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。
