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 --version3. 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.2GB3.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首次登录后建议修改以下配置:
- 【系统设置】>【基本设置】中修改:
- 系统名称
- 公司Logo
- 默认时区(Asia/Shanghai)
- 【工单设置】中配置:
- 工单分类
- 优先级选项
- SLA响应时间
- 【邮件设置】配置SMTP服务(用于工单通知)
4.2 性能优化建议
- 调整Docker资源限制:
# 在docker-compose.yml的ferry服务下添加 deploy: resources: limits: cpus: '2' memory: 2G reservations: cpus: '0.5' memory: 512M- 启用Redis缓存会话(修改Ferry环境变量):
environment: - SESSION_DRIVER=redis- 定期清理日志(添加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. 生产环境部署建议
对于正式业务场景,建议采取以下增强措施:
启用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; } }
数据备份方案:
# 每日备份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监控配置:
- 使用cAdvisor监控容器资源使用
- 配置Prometheus采集Ferry指标
- 设置邮件报警规则
高可用方案(可选):
- MySQL主从复制
- Redis哨兵模式
- Ferry多实例+负载均衡
我在实际运维中发现,这套系统最适合20-200人规模的团队使用。当工单量日均超过500时,建议考虑水平扩展方案,比如将Redis和MySQL分离到独立服务器,或者对Ferry服务本身进行集群化部署。
