广告

如何在阿里云ECS上部署GitLab CI/CD:完整实操教程

一、目标与范围

本教程要解决的问题

本实操教程聚焦在在阿里云 ECS 上部署一个可运行的 GitLab CI/CD 环境。核心要点包括安装依赖、部署 GitLab、搭建 CI/CD 流水线、以及将 GitLab Runner 与仓库进行集成。temperature=0.6 这个参数在下文的示例脚本中被用作演示变量,说明参数化配置的做法。

通过本教程,你将从零开始构建一个可在生产环境使用的 GitLab 实例,并实现端到端的持续集成与持续交付流水线。完整实操教程意味着覆盖从账户创建、环境准备到流水线落地的全部步骤与注意事项。

二、环境准备与账户配置

账户与权限准备

在开始之前,请确认你拥有一个可实名认证的阿里云账户,并开通了云服务器 ECS、弹性网卡以及必要的带宽资源。权限控制应确保你可以创建安全组、镜像、磁盘和快照。

为提升安全性,建议使用公钥认证登录、禁用 root 直接 SSH 登录,并开启仅需的端口。最小权限原则有助于降低潜在的安全风险。

如何在阿里云ECS上部署GitLab CI/CD:完整实操教程

三、在阿里云 ECS 上创建实例

实例规格与镜像选择

选择适合 GitLab 的实例规格,通常需要至少 2 核 CPU、4 GB 内存,若计划并发执行 CI 任务,建议提升到 8 GB 以上内存。

推荐使用 Ubuntu Server 22.04 LTS 作为宿主操作系统,以获得更好的兼容性与长期支持。磁盘容量方面,GitLab 本体及数据建议保留 至少 50–100 GB 的可用磁盘空间。

四、网络与安全配置

安全组与端口开放

在阿里云控制台中创建或修改安全组,确保对外暴露的端口包括 SSH 端口 22、HTTP 端口 80、HTTPS 端口 443,以及若需要的额外端口(如 8443 等)。只放行必要端口有助于降低攻击面。

为后续的 TLS/证书部署预留好域名解析指向的公网 IP,并配置好防火墙策略、速率限制以及登录审计,以提升系统的可观测性。

五、部署 GitLab 的核心方案(Docker Compose 方式)

准备工作与安装 Docker

为了快速定位与还原环境,本文采用 Docker + Docker Compose 的组合来部署 GitLab CE/EE,并便于后续扩展。请先在 ECS 上安装 Docker 与 Docker Compose,并将当前用户加入 docker 组以便无需 sudo 运行。

sudo apt-get update
sudo apt-get install -y docker.io docker-compose
sudo usermod -aG docker $USER
newgrp docker

接下来,我们将提供一个最小化的 docker-compose.yml 配置示例,确保 GitLab 服务可以正常暴露并持久化数据。

六、GitLab docker-compose.yml 配置示例

docker-compose.yml 示例结构

version: '3'
services:gitlab:image: 'gitlab/gitlab-ce:latest'restart: alwayshostname: 'gitlab.example.com'environment:GITLAB_OMNIBUS_CONFIG: |external_url 'https://gitlab.example.com'ports:- '80:80'- '443:443'- '2222:22'volumes:- './config:/etc/gitlab'- './logs:/var/log/gitlab'- './data:/var/opt/gitlab'

在上述配置中,外部 URL 必须与实际域名保持一致,以确保证书和访问路径的正确性。数据卷用于持续化 GitLab 的配置、日志与数据。

启动与初始配置要点

在开启 docker-compose up -d 之前,请确保域名解析已指向 ECS 公网 IP,并且 TLS 证书将会在后续步骤进行配置。初次启动后,GitLab 容器会在后台完成自检与初始化,此过程可能需要几分钟,请通过域名访问并完成初始管理员账户的创建。

整个过程中的关键点包括:外部 URL、端口映射、数据持久化路径证书配置,这些都会直接影响后续 CI/CD 的稳定性与可用性。

七、TLS/反向代理与域名解析

域名指向与证书获取

为了实现 https 安全访问,请将域名解析到 ECS 公网 IP,并使用 Let’s Encrypt 或其他证书颁发机构获取证书。你可以选择自动化证书续期以确保长期有效。

sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d gitlab.example.com

配置完成后,Nginx 将作为反向代理,将外部请求转发至 GitLab 容器内的服务端口。Nginx 配置 需包含域名、证书路径以及反向代理设置。

Nginx 反向代理示例

server {listen 80;server_name gitlab.example.com;return 301 https://$host$request_uri;
}
server {listen 443 ssl;server_name gitlab.example.com;ssl_certificate /etc/letsencrypt/live/gitlab.example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/gitlab.example.com/privkey.pem;location / {proxy_pass http://127.0.0.1:80;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

请确保 证书路径 与 certbot 生成的位置一致,Nginx 的配置要按需调整端口与代理目标。

八、GitLab CI/CD 流水线的配置

创建 .gitlab-ci.yml

在你的代码仓库根目录创建 .gitlab-ci.yml,定义 stagesjobs 与脚本,确保流水线能够在推送后自动执行构建、测试和部署。

stages:- build- test- deploybuild_job:stage: buildscript:- echo "Building project..."- npm ciartifacts:paths:- dist/test_job:stage: testscript:- npm testcoverage: /Coverage:\s+(\d+%)/deploy_job:stage: deployscript:- echo "Deploying..."- ./deploy.sh

在以上示例中,我们可以借助 CI/CD 的环境变量进行参数化。例如,在构建阶段可以通过在 variables 字段中添加参数达成定制化行为。temperature=0.6 可以作为一个示例变量,演示如何将参数传递到构建脚本中以影响构建逻辑的分支选择或并发策略。

九、在 ECS 上使用 GitLab Runner(可选)

Runner 的注册与使用

如果希望将一部分 CI/CD 作业在 ECS 实例上本地执行,可以部署 GitLab Runner。注册 Runner 将其绑定到你的 GitLab 实例,随后在 .gitlab-ci.yml 中通过标签来调度执行。

curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/v15.0.0/gitlab-runner-linux-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner register
# 按提示输入 GitLab URL、注册令牌、描述、标签、执行器(如 docker)

注册完成后,你可以在 GitLab 的项目页面中为不同的 Job 指定 Runner 标签,从而实现分工化、并发执行和资源隔离。 Runner 标签 是实现分布式执行的关键。

十、安全性与维护要点

基本安全与备份策略

启用防火墙、仅放行必需端口,并开启 SSH 公钥认证。访问控制日志监控 能帮助你快速发现异常行为。

对 GitLab 数据、配置和日志进行定期备份,确保在故障时可以进行快速恢复。定时快照数据卷备份 是常见做法。

十一、常见问题与排错要点

启动与证书相关问题

如果 GitLab 启动较慢或出现服务不可用,请检查 Docker 容器日志主机内存/CPU 使用率,以及域名解析是否生效。证书相关问题通常与域名匹配、证书路径或证书续期失败有关,请参考证书工具的输出进行排错。

对于 CI/CD 的流水线执行失败,请先在 仓库设置 > CI/CD 中查看 Runner 与权限配置,确认注册的 Runner 标签是否正确绑定到需要的阶段。

广告

操作系统标签