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

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


一、环境准备

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

  • 推荐配置:

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

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


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

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

1. 一键创建目录结构

bash 复制代码
sudo mkdir -p /home/teamcity/{datadir,logs,postgres}

创建的目录解释如下:

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

2. 设置目录权限

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

bash 复制代码
sudo chown -R 1000:1000 /home/teamcity

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


三、编写 docker-compose.yml

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

bash 复制代码
nano docker-compose.yml

粘贴以下内容:

yaml 复制代码
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 所在目录执行以下命令:

bash 复制代码
docker compose up -d

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

查看运行状态:

bash 复制代码
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

七、停止与管理服务

停止服务:

bash 复制代码
docker compose down

查看日志:

bash 复制代码
docker compose logs -f teamcity-server

进入容器内部调试:

bash 复制代码
docker exec -it teamcity-server /bin/bash

八、常见问题 FAQ

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

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

bash 复制代码
sudo ufw allow 8111

确认 Docker 是否已成功运行:

bash 复制代码
docker compose ps

2. 数据丢失?

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


九、总结

通过本文你学会了:

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

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

相关推荐
小Lu的开源日常3 小时前
如何使用 GitHub Action 发布 Docker 镜像
docker·开源·github
IvorySQL3 小时前
PostgreSQL的逻辑复制spill溢出案例和启停库逻辑
数据库·postgresql
神秘人X7073 小时前
docker安装
docker·容器·eureka
失因3 小时前
Docker 容器与镜像
java·运维·spring cloud·docker·容器
耳东哇4 小时前
sentinel docker gateway k8s 集群 主从
docker·gateway·sentinel
一个向上的运维者4 小时前
使用 Kubernetes(k8s) 搭建 Redis 3 主 3 从集群教程
redis·容器·kubernetes
2501_920047034 小时前
k8s-pod的资源限制
云原生·容器·kubernetes
K_i1344 小时前
K8s日志架构:Sidecar容器实践指南
云原生·容器·kubernetes
0xCode 小新6 小时前
【C语言内存函数完全指南】:memcpy、memmove、memset、memcmp 的用法、区别与模拟实现(含代码示例)
linux·c语言·人工智能·深度学习·机器学习·容器·内存函数
费益洲7 小时前
Docker 网络详解:(二)虚拟网络环境搭建与测试
docker·容器