首页
/ Concourse CI 的 Docker Compose 部署指南

Concourse CI 的 Docker Compose 部署指南

2025-07-07 03:36:49作者:农烁颖Land

概述

Concourse 是一个现代化的持续集成和持续交付系统,采用声明式管道配置方式。本文将通过技术专家的视角,详细解析 Concourse 官方仓库中的 docker-compose.yml 文件,帮助开发者理解如何通过 Docker Compose 快速部署 Concourse 环境。

网络配置

该配置首先定义了一个支持 IPv6 的网络环境:

networks:
  default:
    enable_ipv6: true
    ipam:
      driver: default
      config:
        - subnet: fdf1:f4a2:d53::/64
          gateway: fdf1:f4a2:d53::ffff

这种配置确保了 Concourse 组件间的通信既支持 IPv4 也支持 IPv6,为现代网络环境提供了更好的兼容性。

服务组件

Concourse 系统由三个主要服务组成:数据库(PostgreSQL)、Web 服务和 Worker 节点。

1. 数据库服务 (db)

db:
  image: postgres:${POSTGRES_TAG:-latest}
  shm_size: 1gb
  ports: [6543:5432]
  environment:
    POSTGRES_DB: concourse
    POSTGRES_USER: dev
    POSTGRES_PASSWORD: dev
    POSTGRES_HOST_AUTH_METHOD: ${AUTH_METHOD:-trust}
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U dev -d concourse"]
    interval: 3s
    timeout: 3s
    retries: 5

关键点解析:

  • 使用 PostgreSQL 作为后端数据库
  • 配置了 1GB 的共享内存(shm_size)以优化性能
  • 通过健康检查确保服务可用性
  • 默认使用信任认证方式(trust),可通过环境变量覆盖

2. Web 服务 (web)

web:
  build: .
  image: concourse/concourse:local
  command: web
  depends_on:
    db:
      condition: service_healthy
  ports: [8080:8080]
  networks:
    - default
  volumes:
  - .:/src
  - "./hack/keys:/concourse-keys"
  environment:
    CONCOURSE_SESSION_SIGNING_KEY: /concourse-keys/session_signing_key
    CONCOURSE_TSA_AUTHORIZED_KEYS: /concourse-keys/authorized_worker_keys
    CONCOURSE_TSA_HOST_KEY: /concourse-keys/tsa_host_key
    # 其他环境变量...

Web 服务是 Concourse 的控制中心,提供 API 和用户界面。关键配置包括:

  • 依赖数据库服务,且仅在数据库健康时启动
  • 挂载本地目录和密钥文件
  • 配置了多个安全相关的密钥路径
  • 启用了多项高级功能如跨步骤(ACROSS_STEP)和资源因果关系追踪

3. Worker 服务 (worker)

worker:
  build: .
  image: concourse/concourse:local
  command: worker
  privileged: true
  cgroup: host
  networks:
    - default
  sysctls:
    - net.ipv6.conf.all.disable_ipv6=0
  depends_on: [web]
  ports:
  - 7777:7777
  - 7788:7788
  volumes: ["./hack/keys:/concourse-keys"]
  stop_signal: SIGUSR2
  environment:
    CONCOURSE_RUNTIME: containerd
    # 其他环境变量...

Worker 节点负责执行实际的任务,关键特性包括:

  • 需要特权模式(privileged)以支持容器化任务
  • 使用主机 cgroup 命名空间
  • 配置了 Containerd 作为运行时
  • 启用了 DNS 代理功能以兼容 Docker Compose 的 DNS
  • 使用特定的停止信号(SIGUSR2)确保优雅关闭

安全配置

该配置包含了 Concourse 的安全相关设置:

  • 会话签名密钥(CONCOURSE_SESSION_SIGNING_KEY)
  • TSA 主机密钥(CONCOURSE_TSA_HOST_KEY)
  • 授权的工作节点密钥(CONCOURSE_TSA_AUTHORIZED_KEYS)
  • 工作节点私钥(CONCOURSE_TSA_WORKER_PRIVATE_KEY)

这些密钥文件通过卷(volumes)挂载到容器中,确保了安全隔离。

开发友好特性

配置中特别考虑了开发环境的需求:

  • 预配置了两个本地用户(test 和 guest)
  • 将 test 用户设为 main 团队的成员
  • 启用了调试级别的日志(CONCOURSE_LOG_LEVEL: debug)
  • 挂载了源代码目录便于开发调试

高级功能启用

该配置默认启用了多个 Concourse 的高级功能:

  • 管道实例(CONCOURSE_ENABLE_PIPELINE_INSTANCES)
  • 跨步骤(CONCOURSE_ENABLE_ACROSS_STEP)
  • 缓存流式卷(CONCOURSE_ENABLE_CACHE_STREAMED_VOLUMES)
  • 资源因果关系(CONCOURSE_ENABLE_RESOURCE_CAUSALITY)

这些功能为复杂的 CI/CD 流程提供了更强大的支持。

部署建议

  1. 确保 Docker 和 Docker Compose 已正确安装
  2. 创建必要的密钥文件并放置在 hack/keys 目录下
  3. 根据需要调整环境变量
  4. 运行 docker-compose up 启动服务
  5. 访问 http://localhost:8080 使用预配置的 test/test 账号登录

总结

这份 docker-compose.yml 文件提供了一个完整的 Concourse CI 开发环境配置,包含了数据库、Web 服务和 Worker 节点的完整设置。通过理解这个配置文件,开发者可以快速搭建 Concourse 环境,并根据实际需求进行调整和扩展。配置中考虑到了安全性、网络兼容性和开发便利性,是学习和开发 Concourse 的理想起点。