1. 环境准备打造Ferry工单系统的基石在开始部署Ferry工单系统之前我们需要先搭建好基础运行环境。我选择的是CentOS 7.9作为操作系统这个版本在企业环境中非常常见稳定性也经过长期验证。记得第一次部署时我跳过了系统更新这步结果后面遇到各种依赖问题所以强烈建议先执行yum update -y yum install -y vim wget git这三个工具是后续操作的必备利器vim用于编辑配置文件wget用来下载安装包git则是拉取项目代码。这里有个小技巧如果你在阿里云等国内云服务器上操作可以先把yum源换成国内的镜像速度会快很多。我通常会用阿里云的CentOS镜像源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache2. MySQL数据库部署与优化Ferry系统重度依赖MySQL存储工单数据这里我推荐使用MySQL 5.7版本它在稳定性和性能之间取得了很好的平衡。安装时有个坑需要注意默认安装会生成随机密码需要先修改才能操作数据库。我整理了一个完整的安装流程wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server启动服务后获取临时密码的方式很多人都写错了正确的命令应该是grep temporary password /var/log/mysqld.log | awk {print $NF}修改密码时MySQL 5.7默认要求密码包含大小写字母、数字和特殊字符这个策略可以在初始化后调整。我建议先按强密码规则设置等系统跑起来后再根据安全需求调整策略。创建Ferry专用用户时记得要给足权限CREATE USER ferry% IDENTIFIED BY Ferry123456; GRANT ALL PRIVILEGES ON ferry.* TO ferry%; FLUSH PRIVILEGES;3. Go语言环境配置技巧Ferry后端是用Go编写的安装Go环境时版本选择很关键。经过多次测试Go 1.17.x版本与Ferry的兼容性最好。这里有个国内开发者必备的技巧——设置GOPROXYwget https://studygolang.com/dl/golang/go1.17.5.linux-amd64.tar.gz tar -C /usr/local -xzf go1.17.5.linux-amd64.tar.gz配置环境变量时我习惯把下面这段加到/etc/profile.d/go.sh里这样更便于管理export GOROOT/usr/local/go export GOPATH/opt/gopath export PATH$PATH:$GOROOT/bin:$GOPATH/bin export GOPROXYhttps://goproxy.cn,direct记得source一下让配置生效然后验证安装source /etc/profile go version4. Redis高性能缓存部署Redis作为缓存层能显著提升Ferry的性能。但安装Redis 6.x时需要高版本GCC支持这是最容易出问题的环节。我总结了一套稳定的安装方案yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c devtoolset-9-binutils scl enable devtoolset-9 bash为了让GCC 9.3永久生效需要在/etc/profile末尾添加source /opt/rh/devtoolset-9/enable编译Redis时如果报错先执行make distclean再重试。安装完成后我建议做这些优化配置mkdir -p /etc/redis cp redis.conf /etc/redis/6379.conf sed -i s/daemonize no/daemonize yes/g /etc/redis/6379.conf sed -i s/protected-mode yes/protected-mode no/g /etc/redis/6379.conf5. Node.js环境搭建实战Ferry前端基于Vue.js需要Node.js环境。考虑到稳定性我推荐使用Node 14.x LTS版本。国内安装建议使用淘宝镜像wget https://npm.taobao.org/mirrors/node/v14.18.2/node-v14.18.2-linux-x64.tar.gz tar xf node-v14.18.2-linux-x64.tar.gz -C /opt/配置环境变量时我习惯在/etc/profile.d/node.sh中添加export PATH$PATH:/opt/node-v14.18.2-linux-x64/bin验证安装后一定要设置npm的淘宝镜像源npm config set registry https://registry.npm.taobao.org npm install -g cnpm --registryhttps://registry.npm.taobao.org6. Ferry后端部署全流程拉取代码时我建议使用国内镜像速度更快git clone https://gitee.com/yllan/ferry.git /opt/ferry编译前需要特别注意Go的交叉编译参数。我在实际项目中发现这个配置最稳定cd /opt/ferry env GOOSlinux GOARCHamd64 CGO_ENABLED0 go build -ldflags-s -w -o ferry配置文件settings.yml有几个关键参数需要调整数据库连接信息Redis配置邮件服务器设置文件上传路径初始化数据库时建议先创建好数据库并设置字符集CREATE DATABASE ferry CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;启动服务时使用nohup保持后台运行nohup ./ferry server -cconfig/settings.yml ferry.log 21 7. Ferry前端部署与问题排查前端部署最容易遇到依赖问题我的经验是先用cnpm安装git clone https://gitee.com/yllan/ferry_web.git /opt/ferry_web cd /opt/ferry_web cnpm install编译过程中常见问题及解决方案node-sass报错需要重建node-sassfile-loader版本问题锁定到4.2.0版本webpack兼容性问题使用4.5.0版本编译生产环境代码前记得修改.env.production中的API地址VUE_APP_BASE_API http://your-domain.com:8001最终编译命令cnpm run build:prod8. Nginx配置与性能优化安装Nginx建议使用官方源cat /etc/yum.repos.d/nginx.repo EOF [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key EOF yum install -y nginxFerry的Nginx配置有几个关键点前端静态文件路径API反向代理设置WebSocket支持配置静态资源缓存策略这是我优化过的配置示例server { listen 8001; server_name your-domain.com; location / { root /opt/ferry/ferry_web/web; try_files $uri $uri/ /index.html; expires 30d; } location /api { proxy_pass http://127.0.0.1:8002; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } }最后别忘了防火墙设置firewall-cmd --permanent --add-port8001/tcp firewall-cmd --reload