使用 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.pswp.cn/bicheng/83959.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83959.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83959.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微軟推出SQL Server 2025技術預覽版,深化人工智能應用集成

在Build 2025 大會上&#xff0c;微軟向開發者社區開放了SQL Server 2025的測試版本。該版本的技術改進主要涵蓋人工智能功能集成、系統性能優化與開發工具鏈升級三個維度&#xff0c;展示了數據庫管理系統在智能化演進方向上的重要進展。 智能數據處理功能更新 新版本的技術亮…

企業管理中,商業智能BI主要做哪些事情?

開門見山的告訴大家&#xff0c;在企業管理中商業智能BI 主要就做三件事&#xff1a;拉通數據、整合數據、數據可視化展現。 技術角度的商業智能BI 從技術的角度來講&#xff0c;商業智能BI是一套完整的由數據倉庫、查詢報表、數據分析等組成的數據類技術解決方案。它有一個非…

openharmony5.0.0中kernel子系統編譯構建流程概覽(rk3568)

概述 在梳理openharmony對linux內核做了哪些更改時&#xff0c;簡單梳理了下kernel部分的編譯構建流程&#xff0c;并根據源碼做了簡單論證。分享出來&#xff0c;希望對大家有所幫助。 系統版本:openharmony5.0.0 開發板:dayu200 編譯環境:ubuntu22 執行流程 在kernel\l…

考研系列—操作系統:沖刺筆記(4-5章)

目錄 第四章 文件管理 1.真題總結文件管理方式 (1)目錄文件的FCB就是“目錄名-目錄地址” (2)普通文件的FCB (3)區分索引文件、順序文件、索引分配 (4)文件的物理結構 ①連續分配方式 ②鏈接分配 ③索引分配-使用索引表(一個文件對應一張索引表!!!) 計算考點:超級…

配置URDF模型,調整模型中部件的形狀/尺寸,以及在ROS2的Rviz2中進行可視化。

配置URDF模型&#xff0c;調整模型中部件的形狀/尺寸&#xff0c;以及在ROS2的Rviz2中進行可視化。 提問 在 ROS2 的rviz2 里面&#xff0c;urdf模型哪些部分選擇可視化&#xff0c;哪些部分暫時不呈現在界面上&#xff0c;怎么在rviz2中操作&#xff1f; 回答 在 ROS2 的 …

基于SpringBoot+Vue2的租房售房二手房小程序

角色&#xff1a; 管理員、房東、租客/買家 技術&#xff1a; springbootvue2mysqlmybatispagehelper 核心功能&#xff1a; 租房售房小程序是一個專注于房屋租賃和銷售的綜合性平臺&#xff0c;基于SpringBootVue2MySQLMyBatisPageHelper技術棧開發&#xff0c;為用戶提供…

掌握子網劃分:優化IP分配與管理

子網劃分是通過調整子網掩碼&#xff0c;將單一IP網絡劃分為多個邏輯子網的過程&#xff0c;其核心原理是借用主機位作為子網位以優化地址分配和管理。具體方法與原理如下&#xff1a; 一、子網劃分基本原理 核心目的&#xff1a; 減少IP浪費&#xff1a;避免大塊地址閑置&…

[原創](現代Delphi 12指南):[macOS 64bit App開發]: TTask創建多線程, 更簡單, 更快捷.

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…

終極數據結構詳解:從理論到實踐

終極數據結構詳解&#xff1a;從理論到實踐 我將從 底層原理、時間復雜度、空間優化、實際應用 和 代碼實現 五個維度&#xff0c;徹底解析數據結構。內容涵蓋&#xff1a; 線性結構&#xff08;數組、鏈表、棧、隊列&#xff09;非線性結構&#xff08;樹、圖&#xff09;高…

gvim比較兩個文件不同并合并差異

使用 gvim 比較兩個文件的不同&#xff1a; 方式一&#xff0c;使用 gvim 同時打開兩個待比較的文件。 比較通用方式是采用 gvim -d 選項&#xff0c;具體命令&#xff0c;如下&#xff1a; gvim -d <file1> <file2>方式二&#xff0c;先用 gvim 打開一個文件&am…

15個基于場景的 DevOps 面試問題及答案

第一部分:持續集成和部署 (CI/CD) 場景 1:構建中斷 “您的 CI 流水線突然出現‘找不到依賴項’的錯誤。您會如何處理這個問題?” 回答:首先,我會檢查是否有新的依賴項被添加到需求文件中,但這些依賴項并未包含在需求文件中。我還會驗證構建服務器是否可以訪問互聯網來下…

Linux隨記(十八)

一、k8s的node節點磁盤 /data已使用率超過 85% , 出現disk pressure &#xff0c;驅逐pod現象 evicted &#xff0c; the node had condition:[DiskPressure] #修改/var/lib/kubelet/config.yaml ]# cat /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1…

利用Python 進行自動化操作: Pyautogui 庫

目錄 1. 前言 2. 安裝 PyAutoGUI 3. 常見函數介紹 3.1 鼠標操作 3.2 鍵盤操作 3.3 截圖與圖像識別 4. 簡單案例 5. 總結 1. 前言 我們常常需要與各種軟件和系統交互&#xff0c;而人工操作往往耗時且容易出錯。這時&#xff0c;PyAutoGUI 就可以幫我們解放雙手&#…

如何在Windows本機安裝Python并確保與Python.NET兼容

?作者簡介&#xff1a;2022年博客新星 第八。熱愛國學的Java后端開發者&#xff0c;修心和技術同步精進。 &#x1f34e;個人主頁&#xff1a;Java Fans的博客 &#x1f34a;個人信條&#xff1a;不遷怒&#xff0c;不貳過。小知識&#xff0c;大智慧。 &#x1f49e;當前專欄…

oracle數據恢復—oracle數據庫執行truncate命令后的怎么恢復數據?

oracle數據庫誤執行truncate命令導致數據丟失是一種常見情況。通常情況下&#xff0c;oracle數據庫誤操作刪除數據只需要通過備份恢復數據即可。也會碰到一些特殊情況&#xff0c;例如數據庫備份無法使用或者還原報錯等。下面和大家分享一例oracle數據庫誤執行truncate命令導致…

計算機二級Python考試的核心知識點總結

以下是計算機二級Python考試的核心知識點總結&#xff0c;結合高頻考點和易錯點分類整理&#xff1a; 1. **數據類型與運算** ? 不可變類型&#xff1a;int, float, str, tuple&#xff08;重點區分list與tuple&#xff09; ? 運算符優先級&#xff1a;** > * /…

Vue 組件庫發布實戰(含 TypeScript 支持)

整理不易&#xff0c;如果本文對你有幫助&#xff0c;歡迎點個【贊 &#x1f44d;】【收藏 ?】【關注 &#x1f9e1;】 &#x1f4e6;Vue 組件庫發布實戰&#xff08;含 TypeScript 支持&#xff09; 在上一篇中我們完成了一個基礎 Vue 3 組件的 npm 發布流程。本文將升級內容…

新版雙紫擒龍、紫紫紅黃、動能二號源碼指標源碼公式講解

雙紫擒龍量化指標公式源碼&#xff0c;雙紫擒龍紫紫紅黃2025升級版的量化指標龍頭模型............ 實戰舉例&#xff0c;量化擒龍------副圖源碼&#xff0c;如下&#xff1a; DIF:EMA(CLOSE,12)-EMA(CLOSE,26); DEA:EMA(DIF,9); ABC2:REF(CLOSE,1); ABC3:IF((CLOSE-ABC2…

c++中鎖類型對比與實戰

C++中的鎖類型對比與實戰:std::lock_guard、std::unique_lock、std::shared_lock 在多線程編程中,合理地使用鎖是保證數據一致性和線程安全的關鍵。C++標準庫提供了多種鎖類型,每種都有其適用場景和性能特性。本文將深入分析 std::lock_guard、std::unique_lock、std::shar…

iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆棧溢出

在vue項目中使用iview 框架部分組件時&#xff0c;直接引入使用報Maximum call stack size exceeded image.png 堆棧溢出 解決方案 更換組件名稱就可以了 image.png 或 image.png 就可以了 猜測是因為和vue自己提供的組件名稱一致了&#xff0c;重名問題導致的&#xff0c;具體…