当前位置: 首页 > ops >正文

使用 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. 一键创建目录结构

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

创建的目录解释如下:

路径用途
/home/teamcity/datadirTeamCity 主数据(如项目、用户等)
/home/teamcity/logs日志文件
/home/teamcity/postgresPostgreSQL 数据文件

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:latestcontainer_name: teamcity-serverrestart: unless-stoppeddepends_on:- postgresenvironment:- 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/logsuser: "1000:1000"mem_limit: 6gcpus: 4.0postgres:image: postgres:15container_name: teamcity-postgresrestart: unless-stoppedenvironment:- POSTGRES_DB=teamcity- POSTGRES_USER=teamcity- POSTGRES_PASSWORD=teamcity_passports:- "5432:5432"volumes:- /home/teamcity/postgres:/var/lib/postgresql/datauser: "1000:1000"mem_limit: 2gcpus: 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 系统。

http://www.xdnf.cn/news/12382.html

相关文章:

  • 企业版管理工具无法打开(APP)
  • 如何实现安卓端与苹果端互通的多种方案
  • [BJDCTF2020]Easy MD5 1
  • Python打卡训练营day46——2025.06.06
  • 中国制造名牌剃须刀:优质之选,情礼佳物
  • 业务设计需要做好哪几点?
  • 类型注解实战:用 mypy 构建企业级 Python 项目的关键策略
  • 【Dv3Admin】系统视图菜单字段管理API文件解析
  • PLSQLDeveloper配置OracleInstantClient连接Oracle数据库
  • 永磁同步电机控制算法--模糊PI转速控制器
  • 论文阅读:HySCDG生成式数据处理流程
  • 国产pcie switch 8748+飞腾/龙芯/昇腾高速存储方案设计
  • 编译原理笔记
  • LeetCode--23.合并k个升序链表
  • 计算机二级Python考试的核心知识点总结
  • x32dbg SwissArmyKnife 插件导入map文件不生效
  • Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
  • 家用小车用什么轮胎好?浅谈汽车轮胎品牌
  • Gemini 开发者 API 怎么用?接入指南(附示例)
  • 水库大坝安全监测系统是什么?需要用到哪些设备?
  • LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
  • 高并发feign调用 :Address already in use: no further information executing POST
  • 华为OD机试_2025 B卷_数组去重和排序(Python,100分)(附详细解题思路)
  • 【Elasticsearch】映射:Nested 类型
  • Docker部署Hive大数据组件
  • Vue 渲染 Markdown 文件完全指南
  • 前端项目初始化
  • 浏览器工作原理06 [#]渲染流程(下):HTML、CSS和JavaScript是如何变成页面的
  • 【Python】数据类型
  • 赋能大型语言模型与外部世界交互——函数调用的崛起