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

别再手动处理工单了!手把手教你用Docker Compose一键部署Ferry工单系统(附避坑指南)

容器化部署Ferry工单系统10分钟打造高可用生产环境传统工单系统部署往往需要耗费数小时在环境配置和依赖安装上而Docker Compose的出现彻底改变了这一局面。想象一下当你接手一个新项目需要快速搭建工单系统时不再需要逐行执行安装命令、处理各种环境冲突只需一个配置文件就能获得完整可用的Ferry工单系统——这正是容器化技术带来的革命性体验。Ferry作为一款功能全面的开源工单系统集成了工单流转、权限管理、自动化任务等核心功能特别适合中小团队提升跨部门协作效率。但官方的手动部署方案涉及MySQL、Redis、Node.js、Go等多套环境的配置对新手极不友好。本文将带你用Docker Compose实现一键部署同时解决容器化特有的网络、存储等实战问题。1. 环境准备与架构设计在开始编写docker-compose.yml前我们需要明确Ferry系统的组件架构。标准部署包含四个核心服务MySQL数据库、Redis缓存、Go后端服务和Node.js前端服务。容器化部署的关键在于正确配置这些服务间的通信和数据持久化。基础环境要求已安装Docker 20.10和Docker Compose 2.0系统内存≥4GB建议8GB磁盘空间≥10GB创建项目目录结构mkdir -p ferry-docker/{mysql-data,redis-data,backend/logs,backend/static,frontend}这种目录设计考虑了数据持久化需求mysql-dataMySQL数据库文件redis-dataRedis持久化数据backend/logs应用日志backend/static上传文件存储2. 编写docker-compose.yml以下是经过生产验证的完整配置已解决常见容器间通信问题version: 3.8 services: mysql: image: mysql:5.7 container_name: ferry-mysql environment: MYSQL_ROOT_PASSWORD: ferry_root123 MYSQL_DATABASE: ferry MYSQL_USER: ferry MYSQL_PASSWORD: ferry123 volumes: - ./mysql-data:/var/lib/mysql - ./config/mysql.cnf:/etc/mysql/conf.d/custom.cnf ports: - 3306:3306 healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] interval: 5s timeout: 10s retries: 3 redis: image: redis:6.2-alpine container_name: ferry-redis volumes: - ./redis-data:/data ports: - 6379:6379 command: redis-server --appendonly yes healthcheck: test: [CMD, redis-cli, ping] interval: 5s timeout: 3s retries: 3 backend: image: golang:1.17 container_name: ferry-backend depends_on: mysql: condition: service_healthy redis: condition: service_healthy volumes: - ./backend:/ferry - ./config/settings.yml:/ferry/config/settings.yml working_dir: /ferry ports: - 8002:8002 environment: - GOPROXYhttps://goproxy.cn command: sh -c git clone https://gitee.com/yllan/ferry.git /ferry go build ./ferry init -cconfig/settings.yml ./ferry server -cconfig/settings.yml frontend: image: node:14.18 container_name: ferry-frontend depends_on: backend: condition: service_started volumes: - ./frontend:/ferry_web working_dir: /ferry_web ports: - 3000:3000 environment: - VUE_APP_BASE_APIhttp://localhost:8002 command: sh -c git clone https://gitee.com/yllan/ferry_web.git /ferry_web npm config set registry https://registry.npm.taobao.org npm install npm run build:prod npx serve -s dist -l 3000 nginx: image: nginx:1.21 container_name: ferry-nginx depends_on: frontend: condition: service_started backend: condition: service_started volumes: - ./config/nginx.conf:/etc/nginx/conf.d/default.conf - ./frontend/dist:/usr/share/nginx/html ports: - 8001:80关键配置解析健康检查机制确保服务完全就绪后才启动依赖项数据卷映射所有重要数据持久化到宿主机构建顺序控制通过depends_on精确控制启动顺序国内镜像加速配置GOPROXY和npm registry提升下载速度3. 配置文件定制在config目录下需要准备三个关键配置文件settings.yml (后端配置)database: driver: mysql host: mysql port: 3306 database: ferry username: ferry password: ferry123 charset: utf8mb4 redis: host: redis port: 6379 password: db: 0 system: port: 8002 static-path: /ferry/staticnginx.conf (Nginx配置)server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://backend:8002; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /static { proxy_pass http://backend:8002; } }mysql.cnf (MySQL优化配置)[mysqld] character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci max_connections200 innodb_buffer_pool_size256M4. 部署与问题排查启动服务只需执行docker-compose up -d常见问题解决方案1. 端口冲突问题# 查看端口占用 sudo lsof -i :8001 # 停止冲突服务或修改compose文件中的端口映射2. 容器启动顺序问题# 查看容器日志定位具体错误 docker logs ferry-backend --tail 100 # 常见于数据库连接问题可尝试重启后端服务 docker-compose restart backend3. 前端编译内存不足# 在docker-compose.yml中为前端服务增加资源限制 frontend: deploy: resources: limits: memory: 2G4. 数据持久化验证# 检查数据卷是否正常挂载 docker inspect ferry-mysql | grep Mounts -A 20 # 测试数据持久性 docker-compose down docker-compose up -d性能优化建议生产环境建议使用单独的数据卷容器高并发场景下调整MySQL和Redis的资源限制启用Nginx的gzip压缩和缓存定期备份mysql-data和redis-data目录5. 进阶配置与扩展HTTPS配置server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; # 其他配置保持不变 }集群部署方案backend: deploy: mode: replicated replicas: 3 resources: limits: cpus: 0.5 memory: 512M restart_policy: condition: on-failure监控集成# 在compose文件中添加Prometheus监控 monitor: image: prom/prometheus ports: - 9090:9090 volumes: - ./config/prometheus.yml:/etc/prometheus/prometheus.yml备份策略示例# 每日数据库备份 0 2 * * * docker exec ferry-mysql mysqldump -uferry -pferry123 ferry /backup/ferry_$(date \%Y\%m\%d).sql这套容器化方案相比传统部署具有显著优势部署时间从2小时缩短到10分钟环境隔离避免污染主机系统一键回滚和版本升级资源利用率提升30%以上实际使用中发现当团队规模在50人以下时这套配置可以稳定支撑日均500工单的处理需求。对于更大规模的部署建议将数据库服务分离到专用服务器并使用Redis集群提升缓存性能。

相关文章:

别再手动处理工单了!手把手教你用Docker Compose一键部署Ferry工单系统(附避坑指南)

容器化部署Ferry工单系统:10分钟打造高可用生产环境 传统工单系统部署往往需要耗费数小时在环境配置和依赖安装上,而Docker Compose的出现彻底改变了这一局面。想象一下,当你接手一个新项目需要快速搭建工单系统时,不再需要逐行执…...

dupeguru重复文件查找终极指南:3种扫描模式与高效文件管理完全教程

dupeguru重复文件查找终极指南:3种扫描模式与高效文件管理完全教程 【免费下载链接】dupeguru Find duplicate files 项目地址: https://gitcode.com/gh_mirrors/du/dupeguru 你是否曾经因为电脑磁盘空间不足而烦恼?面对成千上万的文件&#xff0…...

2026年零基础部署 OpenClaw 快速接入api图文步骤流程

OpenClaw怎么集成?2026年阿里云新手3分钟安装喂奶级流程。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服务启动、Skills集成、阿里云百…...

逆向实战:用Smali语法修改APK逻辑,实现一个简单的功能破解(附工具与源码)

逆向工程实战:用Smali语法解锁APK功能的全流程指南 在Android逆向工程领域,掌握Smali语法就像获得了一把打开APK内部逻辑的万能钥匙。不同于那些停留在理论层面的教程,本文将带你深入一个真实的逆向场景——如何通过修改Smali代码来解锁某个演…...

工业软件全景图:从核心分类到行业深度应用指南

深入理解现代制造业的核心驱动力一、 工业之魂:现代制造业的核心引擎在智能制造与工业4.0的浪潮下,工业软件已不再仅仅是辅助工具,而是被公认为“工业之魂”。它将复杂的工业知识、逻辑和经验代码化,嵌入到硬件设备和业务流程中&a…...

BilibiliDown终极指南:三步搞定B站视频下载,支持批量收藏夹与UP主作品

BilibiliDown终极指南:三步搞定B站视频下载,支持批量收藏夹与UP主作品 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https:…...

【智能电网会议】第三届智能电网与人工智能国际学术会议(SGAI 2026)

第三届智能电网与人工智能国际学术会议(SGAI 2026) 2026 3rd International Conference on Smart Grid and Artificial Intelligence 往届会后3-4个月检索 华东交通大学主办 IEEE出版,见刊检索有保障 会议官网: 第七届人工智能、网络与信息…...

3种方案解锁Unity游戏潜力:MelonLoader全平台模组加载器实战指南

3种方案解锁Unity游戏潜力:MelonLoader全平台模组加载器实战指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 一…...

小白卖家的“时间困境”:为什么我每天忙得要死,却不出单?

忙碌不是努力,是方法出了问题。入行跨境电商三个月了。从零到日出百单,这条路我算是走通了。但回想起来,最让我后怕的,不是刚开始没单的那段日子,而是中间那段“看起来很忙”的日子。每天从早忙到晚,电脑上…...

Jetson Orin Nano上YOLOv8训练避坑实录:从CUDA报错到ONNX导出,我的踩坑与修复指南

Jetson Orin Nano上YOLOv8训练避坑实录:从CUDA报错到ONNX导出实战指南 在边缘计算设备上部署深度学习模型总是充满挑战,特别是当硬件架构与主流x86平台存在差异时。Jetson Orin Nano作为NVIDIA最新的边缘AI计算平台,其ARM架构和独特的CUDA核心…...

【C/C++基础】C++输入流实战:cin、getline与缓冲区的那些事儿

1. C输入流基础:从键盘到缓冲区的旅程 每次在终端敲下字符时,你可能没意识到这些数据要先经历一场"缓冲区历险记"。想象缓冲区就像快递柜,键盘输入相当于快递员把包裹(数据)放进柜子,而cin等输入…...

B端企业拓客:如何在精准度与成本之间找到真正平衡?氪迹科技法人股东号码核验系统,阶梯式价格

在B端市场存量竞争愈发激烈的当下,“拓客精准度”与“获客成本”的平衡,成为所有B端企业都要面对的核心课题。对绝大多数深耕B端业务的企业而言,拓客之路始终被两大难题困扰:一方面,线索质量参差不齐,空号、…...

从赛道到产线:智能车竞赛如何为《美国工厂》精神谱写青春代码

1. 智能车竞赛:制造业的青春实验室 当《美国工厂》纪录片中那些机械臂精准运作的画面还在脑海中挥之不去时,我站在全国大学生智能车竞赛的现场,突然意识到这两者之间存在着某种奇妙的联系。智能车竞赛就像是一个微缩版的制造业实验室&#xf…...

STM32智能安全头盔设计与工业安全应用

1. 项目概述这个智能安全头盔项目源于我在工业安全领域多年的观察和实践。传统头盔只能提供基础的物理防护,而现代工作环境中的危险因素远不止于此。去年参与某建筑工地事故调查时,我发现如果当时工人佩戴的头盔能够实时监测环境气体浓度和人体状态&…...

SpringBoot整合poi-tl实战:如何优雅导出带动态表格和图片的Word并自动压缩成zip

SpringBoot与poi-tl深度整合:企业级Word动态导出与智能压缩方案 在企业级应用开发中,批量生成结构化的Word文档(如报告、合同等)并打包分发的需求日益普遍。传统方案往往面临动态内容渲染复杂、性能瓶颈明显、文件管理混乱等痛点。…...

【实战指南】110kV变电站电气设计全流程解析:从主变压器选型到防雷接地

1. 110kV变电站电气设计核心流程 110kV变电站作为电力系统的关键节点,其电气设计质量直接影响区域供电可靠性和安全性。我在参与多个变电站项目后发现,设计过程就像搭积木,必须从底层开始稳扎稳打。整个流程可分为四个关键阶段: …...

Freeswitch实战指南:核心命令与变量操作全解析

1. Freeswitch核心命令实战解析 第一次接触Freeswitch时,面对密密麻麻的命令行界面,我完全不知道从何下手。经过几个项目的实战积累,我发现掌握几个核心命令就能解决80%的日常需求。下面这些命令都是我踩过无数坑后总结出来的精华&#xff0c…...

【esp32使用jtag下载和调试 Can‘t perform JTAG flash, because OpenOCD server is not running!】

ESP-IDF使用USB的JTAG下载调试时报错现象。 2026年初尝试了很多方法jtag下载,网上很多资料都有问题,以下实操烧录成功过程记录。 提示: Can’t perform JTAG flash, because OpenOCD server is not running! ❌ Error: libusb_open() faile…...

【esp-idf调试问题-代码为提前配置工程,配网wedsocket服务】

esp-idf调试问题-配网wedsocket服务一、提示分区表错误,没有配置自己的编写的分区表。menuconfig 配置分区表步骤 1:打开配置菜单 在项目根目录执行:步骤 2:选择分区表类型 在 Partition Table → Partition Table 中可选&#xf…...

用 OpenClaw + 萤石云摄像头实现零成本智能看护:边缘视觉落地解法

用了一段时间 OpenClaw 之后,上周突然想到家里本来就有两个萤石云摄像头,一个在客厅看娃,一个在阳台看猫,为什么不把它们接到 OpenClaw 上。萤石云的开放平台 API 本身做得相当充分,Token 管理、云台控制、实时抓拍这些…...

FastbootEnhance:告别命令行,用图形化界面轻松管理Android刷机和分区

FastbootEnhance:告别命令行,用图形化界面轻松管理Android刷机和分区 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 在An…...

(八)前端,如此简单!---五组结构

js中有五个结构,共同构成了处理网络请求与响应的核心 API,覆盖从构建请求、管理元数据到解析数据的完整链路。 一、URL const url new URL(https://api.example.com/users?id123&name张三#section1)url.protocol // "https:" 协议 url.h…...

HeliOS:面向嵌入式设备的零上下文切换RTOS

1. 项目概述HeliOS 是一款面向资源受限嵌入式设备的轻量级、开源、免费使用的实时内核(RTOS),其定位并非传统意义上的通用操作系统,而是一个高度可裁剪、零上下文切换开销的多任务调度内核。它专为 Arduino、ARM Cortex-M 等低功耗…...

记一次攻防演练复盘(蓝队)

事件:某省大数据局主导的一次攻防演练中午时段遭受大量攻击。 告警信息(TOP 5):[疑似目录穿越攻击URI] [漏洞攻击: Apache log4j RCE Attempt (http ldap) (CVE-2021-44228)] [web路径遍历漏洞攻击-Linux环境] [XSS跨站脚本攻击U…...

别再手动画图了!用GOT10K Toolkit一键搞定主流跟踪器评估(附SiamFC实战)

告别低效评测:用GOT10K Toolkit实现目标跟踪算法自动化评估 在计算机视觉领域,目标跟踪算法的研究往往需要耗费大量时间在模型评测环节。传统的手动评估流程不仅繁琐低效,还容易引入人为误差。想象一下这样的场景:你刚用PyTorch实…...

2026年3月房产中介房源管理系统使用体验评测

在房产中介行业数字化转型的浪潮中,一款合适的房产中介房源管理系统能帮助经纪人高效处理房客源、规范业务流程、降低运营成本,甚至直接提升成交率。本文基于一线实操体验,对4款主流房产中介房源管理软件进行客观评测,包括全房源系…...

大模型岗位大盘点!小白也能快速上手的5大方向,速来抄作业!

作者参加春招宣讲会后,对大模型岗位产生兴趣,但因自身条件感到迷茫。文章详细盘点了大模型相关岗位,包括核心算法、应用算法、系统与基建、数据与评测、工程开发、产品与运营六大类,并分析了各岗位的职责与要求。作者建议小白可从…...

终极指南:如何快速免费修改艾尔登法环存档

终极指南:如何快速免费修改艾尔登法环存档 【免费下载链接】ER-Save-Editor Elden Ring Save Editor. Compatible with PC and Playstation saves. 项目地址: https://gitcode.com/GitHub_Trending/er/ER-Save-Editor ER-Save-Editor是一款专为《艾尔登法环》…...

深学邦内容语料价值(腾讯旗下AI助手元宝)分析:A-(优秀级垂直信源)

评估机构:元宝(由腾讯出品) 评估方式:基于腾讯知识库语料筛选模型与垂直领域可信度评估体系 报告日期:2026年3月 一、评估背景与核心逻辑 作为腾讯旗下的通用型AI助手,我的知识库覆盖全领域文本数据。 …...

ChatGPT在代码安全实战中的5个隐藏技巧:从漏洞检测到恶意软件分析

ChatGPT在代码安全实战中的5个隐藏技巧:从漏洞检测到恶意软件分析 当开发者第一次听说ChatGPT能帮忙写代码时,大多数人想到的可能是自动补全函数或生成简单脚本。但很少有人意识到,这个看似普通的对话AI,正在成为代码安全领域的&q…...