使用 Docker Compose 从零部署 TeamCity + PostgreSQL(详细新手教程)

发布于:2025-06-07 ⋅ 阅读:(17) ⋅ 点赞:(0)

JetBrains TeamCity 是一款专业的持续集成(CI)服务器工具,支持各种编程语言和构建流程。本文将一步一步带你用 Docker 和 Docker Compose 快速部署 TeamCity,搭配 PostgreSQL 数据库,并确保 所有操作新手可跟着做


一、环境准备

  • 一台已安装 Docker 和 Docker Compose 的 Linux 服务器(建议 Ubuntu)

  • 推荐配置:

    • 至少 4 核 CPU
    • 至少 8 GB 内存
    • 至少 10 GB 剩余磁盘空间

如果你尚未安装 Docker,可以参考在服务器上安装 Docker


二、创建所需文件夹(数据持久化)

TeamCity 和 PostgreSQL 都需要挂载本地数据目录,避免容器删除后数据丢失。

1. 一键创建目录结构

sudo mkdir -p /home/teamcity/{datadir,logs,postgres}

创建的目录解释如下:

路径 用途
/home/teamcity/datadir TeamCity 主数据(如项目、用户等)
/home/teamcity/logs 日志文件
/home/teamcity/postgres PostgreSQL 数据文件

2. 设置目录权限

确保容器有权限访问这些目录:

sudo chown -R 1000:1000 /home/teamcity

说明:这里 1000:1000 是容器中的默认用户 UID 和 GID,如果你用其他方式运行容器(如 root 用户),可省略。


三、编写 docker-compose.yml

在任意工作目录下(如 /home/teamcity/),创建文件:

nano docker-compose.yml

粘贴以下内容:

services:
  teamcity-server:
    image: jetbrains/teamcity-server:latest
    container_name: teamcity-server
    restart: unless-stopped
    depends_on:
      - postgres
    environment:
      - TEAMCITY_SERVER_MEM_OPTS=-Xmx3g -XX:ReservedCodeCacheSize=640m
      - TEAMCITY_CONTEXT=/
    ports:
      - "8111:8111"
    volumes:
      - /home/teamcity/datadir:/data/teamcity_server/datadir
      - /home/teamcity/logs:/opt/teamcity/logs
    user: "1000:1000"
    mem_limit: 6g
    cpus: 4.0

  postgres:
    image: postgres:15
    container_name: teamcity-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_DB=teamcity
      - POSTGRES_USER=teamcity
      - POSTGRES_PASSWORD=teamcity_pass
    ports:
      - "5432:5432"
    volumes:
      - /home/teamcity/postgres:/var/lib/postgresql/data
    user: "1000:1000"
    mem_limit: 2g
    cpus: 2.0

说明:

  • teamcity-server 是 CI 服务器主进程,监听端口 8111。
  • postgres 是 TeamCity 使用的数据库。
  • 所有数据、配置、日志都绑定本地目录,防止容器删除后数据丢失。
  • 容器资源做了合理限制,防止占用太多内存或 CPU。

四、启动服务

docker-compose.yml 所在目录执行以下命令:

docker compose up -d

等待镜像下载并启动,首次运行可能需要几分钟。

查看运行状态:

docker compose ps

如果看到两个容器都是 Up 状态,说明已成功运行。


五、访问 TeamCity 并完成初始化

打开浏览器,访问:

http://<你的服务器IP>:8111

首次访问将进入初始化界面:

  1. 等待 TeamCity 自动初始化配置。

  2. 选择 PostgreSQL 作为数据库,并填写以下信息:

    • Host: teamcity-postgres
    • Port: 5432
    • DB: teamcity
    • User: teamcity
    • Password: teamcity_pass
  3. 提交并完成后续初始化步骤。

💡 提示:容器之间通过服务名通信,因此数据库地址填 teamcity-postgres 而不是 localhost


六、配置构建代理(Agent)

TeamCity Server 部署完成后,还需要至少一个 Agent 来执行构建任务

👉 请继续阅读:《TeamCity Agent 配置完整教程(配合 Docker Compose 快速部署)》,了解如何配置构建代理。

这将帮助你:

  • 启用默认 agent 或添加多个 agent
  • 解决“没有空闲可用代理”的错误
  • 授权并管理 agent

七、停止与管理服务

停止服务:

docker compose down

查看日志:

docker compose logs -f teamcity-server

进入容器内部调试:

docker exec -it teamcity-server /bin/bash

八、常见问题 FAQ

1. 浏览器提示“连接被拒绝”?

检查防火墙是否放行 8111 端口:

sudo ufw allow 8111

确认 Docker 是否已成功运行:

docker compose ps

2. 数据丢失?

请检查挂载目录是否创建并有权限,尤其是 /home/teamcity/postgres/home/teamcity/datadir 是否有 1000:1000 权限。


九、总结

通过本文你学会了:

  • 如何准备 TeamCity 和 PostgreSQL 持久化目录
  • 如何使用 Docker Compose 编排 CI 服务
  • 如何启动并初始化 TeamCity 服务
  • 如何设置资源限制与权限
  • 如何继续配置构建代理(Agent)

配合下一篇教程一起使用,你将拥有完整的 CI/CD 系统。


网站公告

今日签到

点亮在社区的每一天
去签到