Docker部署Ferry工单系统:中小企业IT运维实战指南

📅 2026/7/27 11:33:00 👁️ 阅读次数 📝 编程学习
Docker部署Ferry工单系统:中小企业IT运维实战指南

1. 项目概述

Ferry工单管理系统是一款基于Docker容器化部署的开源工单管理解决方案,专为中小企业和IT运维团队设计。这个系统能够帮助企业高效处理内部服务请求、故障报修、IT支持等各类工单流转需求。anyulei/ferry:1.0.1是该系统的Docker镜像版本,通过容器化部署可以大幅降低环境配置复杂度。

我在实际部署过程中发现,相比传统部署方式,Docker版Ferry确实能节省80%以上的环境准备时间。特别是对于没有专职运维人员的小团队,容器化方案几乎是最优选择。下面我将详细拆解整个部署过程的关键环节。

2. 环境准备与前置条件

2.1 硬件与系统要求

部署Ferry工单系统前,建议准备以下环境:

  • 至少2核CPU、4GB内存的服务器(1核2GB可运行但性能受限)
  • 20GB以上磁盘空间(用于存储数据库和附件)
  • Linux操作系统(推荐Ubuntu 20.04 LTS或CentOS 7+)
  • Docker Engine 20.10.0及以上版本
  • Docker Compose 1.29.0及以上版本

注意:生产环境建议单独配置数据卷挂载,避免容器重建时数据丢失。测试环境可以直接使用默认配置。

2.2 依赖组件安装

首先确保系统已安装必要组件:

# Ubuntu/Debian系 sudo apt update && sudo apt install -y git curl # CentOS/RHEL系 sudo yum install -y git curl

然后安装Docker和Docker Compose:

# Docker安装 curl -fsSL https://get.docker.com | sh sudo systemctl enable --now docker # Docker Compose安装 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose

验证安装是否成功:

docker --version docker-compose --version

3. Ferry系统部署实战

3.1 镜像获取与验证

获取anyulei/ferry:1.0.1镜像有两种方式:

方式一:直接从Docker Hub拉取

docker pull anyulei/ferry:1.0.1

方式二:通过离线包导入(适用于内网环境)

# 先下载离线包 wget https://example.com/ferry-1.0.1.tar # 替换为实际下载链接 # 导入镜像 docker load -i ferry-1.0.1.tar

验证镜像是否可用:

docker images | grep ferry

应该能看到类似输出:

anyulei/ferry 1.0.1 a1b2c3d4e5f6 2 weeks ago 1.2GB

3.2 编写docker-compose.yml

创建部署目录并编写配置文件:

mkdir -p ~/ferry && cd ~/ferry nano docker-compose.yml

以下是推荐配置(含MySQL和Redis):

version: '3.8' services: ferry: image: anyulei/ferry:1.0.1 container_name: ferry restart: always ports: - "8000:8000" environment: - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_DATABASE=ferry - MYSQL_USER=ferry - MYSQL_PASSWORD=your_strong_password - REDIS_HOST=redis - REDIS_PORT=6379 depends_on: - mysql - redis volumes: - ./uploads:/app/uploads - ./logs:/app/logs mysql: image: mysql:5.7 container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: ferry MYSQL_USER: ferry MYSQL_PASSWORD: your_strong_password volumes: - ./mysql_data:/var/lib/mysql command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci redis: image: redis:6-alpine container_name: redis restart: always volumes: - ./redis_data:/data

关键参数说明:

  • ports: 8000是Ferry默认端口,可按需修改
  • volumes: 将重要数据挂载到宿主机避免丢失
  • environment: 数据库连接配置必须与MySQL服务一致
  • MySQL的command参数确保使用utf8mb4字符集(支持emoji等特殊字符)

3.3 启动与初始化

启动所有服务:

docker-compose up -d

检查容器状态:

docker-compose ps

正常情况应显示三个容器的状态均为"Up"。

初始化数据库(首次部署必须执行):

docker exec -it ferry ./ferry migrate

创建管理员账户:

docker exec -it ferry ./ferry create_admin

按提示输入管理员邮箱和密码。

4. 系统配置与优化

4.1 基础配置调整

访问系统:

http://服务器IP:8000

首次登录后建议修改以下配置:

  1. 【系统设置】>【基本设置】中修改:
    • 系统名称
    • 公司Logo
    • 默认时区(Asia/Shanghai)
  2. 【工单设置】中配置:
    • 工单分类
    • 优先级选项
    • SLA响应时间
  3. 【邮件设置】配置SMTP服务(用于工单通知)

4.2 性能优化建议

  1. 调整Docker资源限制:
# 在docker-compose.yml的ferry服务下添加 deploy: resources: limits: cpus: '2' memory: 2G reservations: cpus: '0.5' memory: 512M
  1. 启用Redis缓存会话(修改Ferry环境变量):
environment: - SESSION_DRIVER=redis
  1. 定期清理日志(添加cron任务):
# 每月1号凌晨清理30天前日志 0 0 1 * * find ~/ferry/logs -type f -mtime +30 -exec rm {} \;

5. 常见问题排查

5.1 部署阶段问题

问题1:端口冲突导致容器无法启动

Error starting userland proxy: listen tcp4 0.0.0.0:8000: bind: address already in use

解决方案:

  • 修改docker-compose.yml中的端口映射,如"8001:8000"
  • 或停止占用端口的服务:sudo lsof -i :8000找到PID后kill -9 PID

问题2:MySQL连接失败

dial tcp: lookup mysql on 127.0.0.11:53: no such host

解决方案:

  • 确保docker-compose.yml中服务名称一致(默认mysql)
  • 检查MySQL容器是否正常启动:docker logs mysql
  • 增加连接超时参数:- MYSQL_CONNECT_TIMEOUT=30

5.2 运行阶段问题

问题3:上传文件失败

failed to save upload file: permission denied

解决方案:

  • 确保挂载目录有写入权限:chmod -R 777 ~/ferry/uploads
  • 或调整容器用户:在docker-compose.yml中添加user: "1000:1000"(使用宿主机当前用户)

问题4:后台任务不执行

延迟工单状态未自动更新

解决方案:

  • 检查Celery worker是否运行:docker exec -it ferry ps aux | grep celery
  • 手动启动worker:docker exec -d ferry ./ferry worker

6. 生产环境部署建议

对于正式业务场景,建议采取以下增强措施:

  1. 启用HTTPS:

    • 使用Nginx反向代理配置SSL证书
    • 示例配置片段:
      server { listen 443 ssl; server_name ferry.yourdomain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://ferry:8000; proxy_set_header Host $host; } }
  2. 数据备份方案:

    # 每日备份MySQL docker exec mysql sh -c 'exec mysqldump -uferry -p"$MYSQL_PASSWORD" ferry' > ferry_$(date +%F).sql # 备份上传文件 tar czvf ferry_uploads_$(date +%F).tar.gz ~/ferry/uploads
  3. 监控配置:

    • 使用cAdvisor监控容器资源使用
    • 配置Prometheus采集Ferry指标
    • 设置邮件报警规则
  4. 高可用方案(可选):

    • MySQL主从复制
    • Redis哨兵模式
    • Ferry多实例+负载均衡

我在实际运维中发现,这套系统最适合20-200人规模的团队使用。当工单量日均超过500时,建议考虑水平扩展方案,比如将Redis和MySQL分离到独立服务器,或者对Ferry服务本身进行集群化部署。