尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
生产环境部署指南:用 Docker Compose 搭建高可用 Cockpit + MongoDB 集群
生产环境部署指南用 Docker Compose 搭建高可用 Cockpit MongoDB 集群【免费下载链接】CockpitCockpit Core - Content Platform项目地址: https://gitcode.com/gh_mirrors/cockp/CockpitCockpit 是一款开源的 Headless CMS无头内容管理系统也被称为 Cockpit Core 内容平台它通过 REST 与 GraphQL API 为网站、移动应用和物联网设备提供灵活的内容管理能力。本文将手把手教你使用 Docker Compose 搭建高可用 Cockpit MongoDB 集群从编写编排文件、配置数据库连接到副本集高可用与数据备份恢复一套完整的生产环境部署方案帮助你快速上线一个稳定可靠的内容平台。一、为什么生产环境推荐用 Docker Compose 部署 CockpitCockpit 官方提供了基于 PHP 8.3 Apache 的 Docker 镜像项目根目录的 Dockerfile 已经内置了 GD、Zip、PDO、MongoDB 驱动、Redis 扩展和 Apache mod_rewrite省去了手动编译 PHP 扩展的繁琐过程。用 Docker Compose 编排 Cockpit MongoDB可以一次性解决三个生产环境难题难题Docker Compose 的解法环境不一致镜像固化运行环境本地与服务器行为一致数据库依赖一条命令同时拉起应用与 MongoDBdepends_on保证启动顺序扩展与迁移通过环境变量注入配置扩容节点无需改代码Cockpit 默认使用 SQLitemongolite://存储数据适合开发调试生产环境建议切换到真正的 MongoDB以获得更好的并发性能、索引能力和副本集高可用支持。这一点在 bootstrap.php 的默认配置中可以看到你只需在config/config.php中覆盖database.server即可无缝切换。二、整体架构高可用 Cockpit MongoDB 集群长什么样推荐的生产架构分为三层接入层Nginx 反向代理负责 HTTPS 终结、静态资源缓存与流量转发应用层1 个或多个 Cockpit 容器官方镜像cockpithq/cockpit:core-latest无状态应用可横向扩容数据层MongoDB 副本集Replica Set一主多从实现数据冗余与自动故障转移。Cockpit 通过 lib/MongoHybrid/Client.php 统一抽象了 MongoDB 与 SQLite 两种驱动连接串以mongodb://或mongodbsrv://开头时走真实 MongoDB应用层无需改动任何业务代码。三、快速搭建步骤编写 docker-compose.yml3.1 第一步获取代码并准备目录生产环境建议拉取官方发布版本而非源码仓库如果你需要基于源码二次开发可以克隆git clone https://gitcode.com/gh_mirrors/cockp/Cockpit创建项目目录结构storage目录必须可写安装引导程序 install/index.php 会检查storage/data、storage/cache、storage/uploads等目录的写入权限/opt/cockpit/ ├── docker-compose.yml ├── config/ │ └── config.php └── storage/ # 挂载数据卷3.2 第二步编写 docker-compose.yml这是全文核心一份可直接上生产的高可用编排文件version: 3.8 services: mongo: image: mongo:8 container_name: cockpit-mongo restart: unless-stopped command: [mongod, --replSet, rs0, --bind_ip_all] volumes: - mongo_data:/data/db - mongo_config:/data/configdb healthcheck: test: [CMD, mongosh, --quiet, --eval, db.adminCommand(ping).ok] interval: 10s timeout: 5s retries: 5 networks: - cockpit-net mongo-init: image: mongo:8 container_name: cockpit-mongo-init depends_on: mongo: condition: service_healthy command: mongosh --host mongo:27017 --eval try { rs.initiate({_id:rs0, members:[{_id:0, host:mongo:27017}]}) } catch(e) { print(e) } networks: - cockpit-net cockpit: image: cockpithq/cockpit:core-latest container_name: cockpit-app restart: unless-stopped ports: - 127.0.0.1:8080:80 # 只暴露到本机由 Nginx 转发 environment: - COCKPIT_DATABASE_SERVERmongodb://mongo:27017/?replicaSetrs0 - COCKPIT_DATABASE_NAMEcockpit - COCKPIT_SEC_KEY${COCKPIT_SEC_KEY} # 从 .env 读取绝不写死在文件里 volumes: - ./config:/var/www/html/config - cockpit_storage:/var/www/html/storage depends_on: mongo: condition: service_healthy networks: - cockpit-net volumes: mongo_data: mongo_config: cockpit_storage: networks: cockpit-net: driver: bridge说明mongo-init是一个一次性容器负责把 MongoDB 初始化为副本集rs0这是实现故障自动切换的关键一步。Cockpit 只暴露到127.0.0.1对外统一由反向代理接管。3.3 第三步配置 config.php 与安全密钥Cockpit 会优先加载config/config.php挂载到容器内/var/www/html/config。创建如下配置?php // config/config.php return [ database [ server getenv(COCKPIT_DATABASE_SERVER) ?: mongodb://mongo:27017, database getenv(COCKPIT_DATABASE_NAME) ?: cockpit, ], sec-key getenv(COCKPIT_SEC_KEY) ?: please-change-me, ];安全提醒必须做Cockpit 默认的sec-key是写死在 bootstrap.php 里的公开值生产环境务必通过环境变量覆盖否则存在会话伪造风险。同时在同目录创建.env文件COCKPIT_SEC_KEY$(openssl rand -hex 32)3.4 第四步启动并完成安装docker compose up -d docker compose ps # 确认三个容器都 healthy浏览器访问http://服务器IP/install跟随 install/index.php 的引导完成初始化设置管理员账号即可。安装完成后REST 与 GraphQL API 就可以通过/api/*对外提供服务了。四、高可用关键点副本集、持久化与备份恢复4.1 MongoDB 副本集实现自动故障转移生产环境单体 MongoDB 一旦宕机整个内容平台随之不可用。通过--replSet rs0将 MongoDB 初始化为副本集后主节点故障时从节点会自动选举出新主节点Cockpit 连接串中的?replicaSetrs0让驱动自动感知角色变化实现高可用无缝切换。4.2 数据持久化与备份策略应用数据cockpit_storage卷持久化上传的图片、文件与缓存数据库mongo_data卷持久化全部内容数据备份方案生产环境建议每日执行mongodump并同步到异地存储docker exec cockpit-mongo mongodump --archive/tmp/cockpit-backup.gz --gzip docker cp cockpit-mongo:/tmp/cockpit-backup.gz /backup/cockpit-$(date %F).gz恢复时使用mongorestore --gzip --archive/backup/cockpit-xxx.gz即可。4.3 多副本扩容建议当流量增长时可以把 MongoDB 扩展为一主两从副本集并把 Cockpit 应用容器扩到 23 个实例前面用 Nginx 做负载均衡。由于 Cockpit 应用本身无状态扩容只需docker compose up -d --scale cockpit2再在 Nginx 中配置upstream即可。五、反向代理与 HTTPS快速上线前必做的一步Cockpit 容器默认监听 80 端口Apache我们把它映射到本机 8080再由 Nginx 对外提供 HTTPS。参考配置server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; } }X-Forwarded-Proto头一定要带上否则 HTTPS 场景下 API 返回的 URL 可能错误地使用 http 协议。六、上线检查清单与常见问题排查上线前逐项检查✅sec-key已通过环境变量替换为随机值✅ MongoDB 副本集rs.status()状态为正常PRIMARY/SECONDARY✅storage目录可写安装引导检查项全部通过✅ HTTPS 已启用API 仅通过反向代理对外暴露✅ 已配置每日数据库备份与恢复演练常见问题速查现象原因与解决办法安装页提示目录不可写检查./config、cockpit_storage挂载权限容器内www-data用户 UID 为 1000连接 MongoDB 失败确认depends_on的 healthcheck 生效MongoDB 容器已初始化副本集重启后数据丢失确认使用了命名卷而非匿名卷且docker compose down而非-v更换数据库后老数据消失Cockpit 默认 SQLite 数据在storage/data切换 MongoDB 前先导出旧内容七、总结通过 Docker Compose 搭建高可用 Cockpit MongoDB 集群并不复杂官方镜像解决了 PHP 运行环境问题config/config.php一处配置即可从 SQLite 平滑切换到 MongoDB 副本集再配合 Nginx 反向代理与定时备份就能得到一个开箱即用、可横向扩展的企业级内容平台。希望这份生产环境部署指南能帮你一次上线成功让内容团队专注创作让开发团队专注业务。【免费下载链接】CockpitCockpit Core - Content Platform项目地址: https://gitcode.com/gh_mirrors/cockp/Cockpit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

断网也能用的翻译服务,LibreTranslate 离线部署一揽子实操记录

断网也能用的翻译服务,LibreTranslate 离线部署一揽子实操记录

断网也能用的翻译服务,LibreTranslate 离线部署一揽子实操记录 【免费下载链接】LibreTranslate Free and Open Source Machine Translation API. Self-hosted, offline capable and easy to setup. 项目地址: https://gitcode.com/GitHub_Trending/li/LibreTrans…

📅 2026/9/20 12:19:18
2025 年 3 月青少年软编等考 C 语言六级真题解析

2025 年 3 月青少年软编等考 C 语言六级真题解析

目录 T1. 链表元素分类 思路分析 T2. 出栈序列的合法性 思路分析 T3. 取行李 思路分析 T4. 散列表平均查找时间 思路分析 T1. 链表元素分类 题目链接:SOJ D1395 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [ 0 , K ] …

📅 2026/9/18 1:35:54
ComfyUI-LTXVideo 实战:LTX-2 AI视频生成从零到出片的完整手册

ComfyUI-LTXVideo 实战:LTX-2 AI视频生成从零到出片的完整手册

ComfyUI-LTXVideo 实战:LTX-2 AI视频生成从零到出片的完整手册 【免费下载链接】ComfyUI-LTXVideo LTX-Video Support for ComfyUI 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-LTXVideo 下午三点,你的 ComfyUI 画布里还只有一堆文…

📅 2026/9/18 13:16:00
MORE NEWS

更多资讯

📰

基于Python Django的DES算法企业用户数据安全软件实现与避坑

简介:这套基于Python语言、Django框架与HTML前端、以DES算法保障企业用户数据安全的Web应用源码包,面向信息安全方向学习者、Django开发者以及需要轻量级数据加密方案的企业内部系统。项目完整展示了从后端逻辑、前端页面到MySQL数据库表设计的开发全流程…

📰

实战:GPT-6 + Gemma 4 端云混合 AI 调用架构设计——TaoToken 统一 Key 接入与路由验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

树莓派CM4与CM5选型指南:SKU矩阵、底板设计与兼容性分析

1. 从一堆型号里理出头绪:为什么CM4和CM5值得单独拎出来说树莓派这条产品线走到今天,型号已经多到让新人头皮发麻。从最早的Model B、Model A,到后来的Zero系列、3B、3B、4B,再到现在的5和Compute Module家族,官网产品…

📰

商用热水工程IoT监控系统选型部署与运维实战

去年秋天我接了个酒店热水工程,锅炉半夜熄火,水箱温度一路从65℃跌到38℃,客人在前台排了快半小时队等热水。第二天早上值班师傅对着巡检记录本上填好的"正常"两个字,沉默了很久。从那一刻我意识到,商用热水…

📰

免费跨境电商ERP真的存在吗?说点实话

免费跨境电商ERP真的存在吗?说点实话 2026 年 9 月更新 跨境电商工具指南 这是几乎所有跨境新手都会问的第一个问题:有没有免费的跨境电商ERP?作为长期泡在这个行业里的人,这篇不绕弯子,直接说结论和背后的实际情况。…

📰

【AI Daily】AI日报 2026-06-19:多智能体策略引擎与记忆系统落地拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬