服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-09-04 更新于 2026-09-04 简米科技 4,952 字 12 分钟阅读

用云主机搭建代码仓库和CI流水线轻量组合怎么做?云主机CI/CD搭建教程

导读云主机搭建代码仓库和CI流水线,完全可行,而且对中小团队来说,比自建物理服务器或全托管SaaS更划算,核心答案是:用一台2核4G的云主机,装好Docker,跑一个Gitea(或轻量版GitLab),再配一个Drone或Woodpecker,就能拥有属于自己的代码托管和自动构建环境,月成本通常控制在几十到一百元内……

云主机搭建代码仓库和CI流水线,完全可行,而且对中小团队来说,比自建物理服务器或全托管SaaS更划算。核心答案是:用一台2核4G的云主机,装好Docker,跑一个Gitea(或轻量版GitLab),再配一个Drone或Woodpecker,就能拥有属于自己的代码托管和自动构建环境,月成本通常控制在几十到一百元内。

云主机搭建代码仓库和CI流水线:选型与成本

很多团队问,云主机搭建代码仓库和CI流水线,是不是非要高配置?其实不然,代码仓库本身对资源消耗很低,真正吃资源的是CI构建过程,所以选型的关键在于明确你的构建任务有多重。

代码仓库选型:Gitea vs GitLab CE

主流自托管代码仓库就两个方向:Gitea和GitLab CE,Gitea用Go语言编写,单二进制文件,内存占用极小,2G内存的云主机跑Gitea毫无压力,GitLab CE功能更全,自带CI/CD,但依赖重,官方推荐至少4G内存,行业共识认为,如果团队规模在50人以内,且没有重度代码审查需求,Gitea是更轻的选择。

这里有个实用的对比表格:

特性 Gitea GitLab CE
内存占用(空闲) 约200-400MB 约1-2GB
安装复杂度 极低,一个二进制或Docker容器 较高,依赖PostgreSQL、Redis等
自带CI 需要外接(Drone/Woodpecker) 内置,但配置复杂
适合场景 中小团队、个人项目 需要完整DevOps流程的团队

我的建议是,如果你已经在用Gitea,那么CI流水线千万别选GitLab自带的,因为那等于又背了一个重包袱,更顺手的做法是给Gitea配一个轻量级CI工具。

轻量级CI/CD工具推荐:Drone与Woodpecker

Drone是较早流行的云原生CI工具,跟Docker结合紧密,每个构建步骤都是一个容器,Woodpecker则是Gitea社区孵化的项目,原生支持Gitea,配置语法更简单,行业共识认为,这两者都是轻量级CI/CD工具的典型代表,比Jenkins轻太多,启动速度以秒计。

具体选哪个?如果你的构建环境以Docker为主,选Drone很顺滑,如果你想跟Gitea深度绑定,减少额外认证配置,Woodpecker更省心,我个人倾向Woodpecker,因为它的流水线配置是纯YAML,没有Drone那种依赖Docker in Docker的坑。

用云主机搭建代码仓库和CI流水线轻量组合怎么做?云主机CI/CD搭建教程

云主机搭建代码仓库和CI流水线实操:从零到能跑

下面给出一套经过验证的步骤,假设你的云主机是Ubuntu 22.04,已经装好Docker和docker-compose,全程不需要安装Git,因为运行在容器里。

第一步:部署Gitea容器

创建目录 mkdir -p /opt/gitea,然后写一个 docker-compose.yml

services:
  gitea:
    image: gitea/gitea:1.21
    container_name: gitea
    restart: always
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__server__ROOT_URL=http://你的云主机IP:3000
    volumes:
      - /opt/gitea/data:/data
    ports:
      - "3000:3000"

执行 docker-compose up -d,然后访问 http://IP:3000,填写初始配置,注意把ROOT_URL改成你的实际域名或IP,不然SSH克隆会出错。

第二步:部署Woodpecker CI

Woodpecker需要两个服务:server(管理界面)和agent(执行构建),同样用docker-compose文件:

services:
  woodpecker-server:
    image: woodpeckerci/woodpecker-server:2.5
    environment:
      - WOODPECKER_OPEN=true
      - WOODPECKER_GITEA=true
      - WOODPECKER_GITEA_URL=http://gitea:3000
      - WOODPECKER_GITEA_CLIENT_ID=你的ID
      - WOODPECKER_GITEA_CLIENT_SECRET=你的密钥
      - WOODPECKER_HOST=http://你的云主机IP:8000
    volumes:
      - /opt/woodpecker/server:/var/lib/woodpecker
    ports:
      - "8000:8000"
  woodpecker-agent:
    image: woodpeckerci/woodpecker-agent:2.5
    command: agent
    environment:
      - WOODPECKER_SERVER=woodpecker-server:9000
      - WOODPECKER_AGENT_SECRET=你的共享密钥
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

这里的关键是去Gitea后台创建一个OAuth应用,拿到client_id和secret,具体路径:管理员设置 -> 应用 -> 创建新OAuth2应用,回调地址填 http://你的云主机IP:8000/authorize

第三步:写第一个流水线文件

在项目的根目录创建 .woodpecker.yml

when:
  - event: push
steps:
  build:
    image: node:18-alpine
    commands:
      - npm install
      - npm run build
  deploy:
    image: alpine:3.18
    commands:
      - apk add rsync
      - rsync -avz --delete dist/ user@部署服务器:/var/www/html/
    secrets: [DEPLOY_KEY]

用云主机搭建代码仓库和CI流水线轻量组合怎么做?云主机CI/CD搭建教程

推送代码到Gitea仓库,Woodpecker会自动触发流水线,这里有个技巧:部署步骤需要SSH密钥,把密钥配置为Woodpecker的secret变量,不要在YAML里写明文。

云服务器配置要求高吗?低配云主机的优化技巧

这是大家问得最多的问题:云服务器配置要求高吗?答案是,对于纯代码仓库和CI流水线,2核4G的入门型云主机绰绰有余,但前提是要做点优化。

限制CI构建的并发度

Woodpecker默认允许并发执行多个流水线,如果团队多人同时推送,4G内存很容易被多个Node或Java构建任务挤爆,在agent的环境变量中设置 WOODPECKER_MAX_WORKFLOWS=1,让每次只跑一个构建,虽然会排队,但保证了稳定性,业内专家指出,很多低配云主机崩溃不是资源不够,而是并发没控制好。

给Docker设置内存限制

在Docker的daemon配置 /etc/docker/daemon.json 里加上:

{
  "max-concurrent-downloads": 3,
  "max-download-attempts": 3
}

再在agent启动时加上 --memory=1g --memory-swap=1g,让构建容器最多使用1G内存,这样就算某个构建脚本有内存泄漏,也不会拖垮整个云主机。

数据备份是重中之重

云主机上跑的代码是团队资产,建议每天做一次卷备份,最简单的方式是写个cron任务,把 /opt/gitea/data/opt/woodpecker/server 压缩后copy到对象存储或另一台机器,具体命令:

tar -zcf /backup/code_$(date +%Y%m%d).tar.gz /opt/gitea/data /opt/woodpecker/server

保留最近7天的备份,用 find /backup -type f -mtime +7 -delete 自动清理。

代码仓库和CI流水线的安全加固与日常维护

自托管服务最怕安全问题,云主机暴露公网,每天都有扫描程序在尝试弱口令和漏洞。

必须做的三项安全措施

  • 开启SSH密钥认证,关闭密码登录,在云主机上修改 /etc/ssh/sshd_config,设置 PasswordAuthentication no
  • Gitea和Woodpecker都启用HTTPS,用Let's Encrypt免费证书,在Gitea的配置文件里添加

    用云主机搭建代码仓库和CI流水线轻量组合怎么做?云主机CI/CD搭建教程

    PROTOCOL=httpsCERT_FILE=/data/cert.pemKEY_FILE=/data/key.pem

  • 限制Gitea的管理员IP,如果只有你一个人管理,只在安全组规则里放行你的办公网IP访问3000和8000端口。

常见故障排查

遇到CI不触发,先检查Gitea的Webhook设置是否正确,Woodpecker注册的时候会自动创建webhook,但如果改了Gitea的域名,webhook地址还是旧的,需要去Gitea仓库的Webhook管理页面手动更新。

构建日志提示权限不足时,多半是容器内的用户ID和宿主机不一致,在Woodpecker的agent配置里添加 WOODPECKER_AGENT_VOLUMES=/var/run/docker.sock:/var/run/docker.sock,并确认宿主机Docker socket权限组包含agent的GID,否则报 permission denied

尾声

用云主机搭建代码仓库和CI流水线,轻量组合的核心就是Gitea加Woodpecker,它们能跑在最低配的云主机上,维护成本低,还拥有完整的推送、构建、部署闭环,如果你已经有了一台闲置的云主机,按上述步骤操作,一个小时内就能跑通第一条流水线,这套方案不求大而全,但胜在轻巧、够用、可控。

关于云主机搭建代码仓库和CI流水线的常见问题

云主机搭建代码仓库和CI流水线,需要多大内存?

2GB内存可以跑通Gitea和Woodpecker,但构建任务多的时候建议4GB,如果条件允许,2核4G是入门标准,可以同时跑8-10个轻量构建任务,低于2G内存的话,建议把并发数限制为1,否则容易卡死。

轻量级CI/CD工具可以取代Jenkins吗?

可以,但要看场景,Jenkins的插件生态丰富,适合大型企业复杂流水线,而轻量级工具如Woodpecker和Drone更适合个人开发者、初创团队和中小型项目,它们配置简单、资源占用低,学习成本小,如果团队没得专门运维人员,用轻量级工具更省心。

云主机搭建代码仓库和CI流水线,怎么控制成本?

选择按量付费的云主机,平时关机只保留磁盘,可以大幅降低成本,利用云厂商的闲置资源,比如很多云厂商提供的低配“开发机”实例,价格比独立主机便宜一半以上,把构建任务集中在非高峰时段执行,也能配合云厂商的折扣策略节约支出。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱