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 7Docker 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和Redisversion: 3.8 services: ferry: image: anyulei/ferry:1.0.1 container_name: ferry restart: always ports: - 8000:8000 environment: - MYSQL_HOSTmysql - MYSQL_PORT3306 - MYSQL_DATABASEferry - MYSQL_USERferry - MYSQL_PASSWORDyour_strong_password - REDIS_HOSTredis - REDIS_PORT6379 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-serverutf8mb4 --collation-serverutf8mb4_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_DRIVERredis定期清理日志添加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问题2MySQL连接失败dial tcp: lookup mysql on 127.0.0.11:53: no such host解决方案确保docker-compose.yml中服务名称一致默认mysql检查MySQL容器是否正常启动docker logs mysql增加连接超时参数- MYSQL_CONNECT_TIMEOUT305.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手动启动workerdocker exec -d ferry ./ferry worker6. 生产环境部署建议对于正式业务场景建议采取以下增强措施启用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服务本身进行集群化部署。