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

使用 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.lqws.cn/news/189811.html

相关文章:

  • 35.成功解决编写关于“江协科技”编写技巧第二期标志位积累的问题
  • vue3学习(toRefs和toRef,computed计算属性 ,v-model指令,箭头函数)
  • 【leetcode】3. 无重复字符的最长子串
  • 跟我学c++中级篇——理解类型推导和C++不同版本的支持
  • 如何在Lyra中创建一个新的Game Feature Plugin和Experience游戏体验
  • 前端flex、grid布局
  • idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题
  • AC68U刷梅林384/386版本后不能 降级回380,升降级解决办法
  • day35-系统编程之网络编程IV及MQTT协议
  • docker数据管理
  • hot100 -- 8.二叉树系列
  • 父组件prop传向子组件的值,被子组件直接v-model绑定 功能不生效
  • JavaWeb笔记
  • 每日八股文6.6
  • kafka消息积压排查
  • 深入理解指针(二)
  • 我爱学算法之—— 前缀和(中)
  • echarts树状图与vue3
  • 【机械视觉】Halcon—【十一、车牌检测和筛子检测】
  • Oracle 用户名大小写控制
  • CSS6404L 在物联网设备中的应用优势:低功耗高可靠的存储革新与竞品对比
  • PyQt6 GUI应用程序开发实操指南
  • 2025最新VMware17如何通过官网进行下载
  • 中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点
  • 车辆测试数据采集解决方案:同步支持总线协议、模拟传感与远程监控的关键技术
  • 理解JavaScript中map和parseInt的陷阱:一个常见的面试题解析
  • Excel 表格内批量添加前缀与后缀的实用方法
  • 区块链可投会议CCF A--SP 2026 截止11.13 附录用率
  • 在MyBatis中设计SQL返回布尔值(Boolean)有几种常见方法
  • Python数学可视化:3D参数曲面与隐式曲面绘制技术