在CentOS 7上从零部署Ferry工单系统:一个运维新手的踩坑与填坑全记录
2026/4/17 11:37:35 网站建设 项目流程

在CentOS 7上从零部署Ferry工单系统:一个运维新手的踩坑与填坑全记录

第一次在CentOS 7上部署Ferry工单系统时,我本以为按照官方文档就能轻松搞定,结果却遭遇了各种意想不到的问题。从Node.js版本冲突到Redis编译失败,再到NPM包安装卡住,几乎每一步都踩了坑。这篇文章就是记录这些"坑"以及我是如何填平它们的,希望能帮助其他初次接触Ferry部署的朋友少走弯路。

1. 环境准备:那些容易被忽视的基础配置

在开始安装Ferry之前,我们需要确保系统环境已经准备妥当。CentOS 7作为一款稳定的企业级Linux发行版,默认的软件仓库版本往往比较保守,这恰恰是许多问题的根源。

1.1 系统更新与基础工具

首先,更新系统并安装必要的基础工具:

yum update -y yum install -y vim wget git epel-release

注意:epel-release是后续安装高版本软件的关键,很多教程会忽略这一点。

1.2 解决CentOS 7的Python 2依赖问题

CentOS 7默认使用Python 2.7,而某些工具(如node-gyp)需要Python 3。安装Python 3但不替换系统默认版本:

yum install -y python36 alternatives --set python /usr/bin/python3.6

2. 数据库部署:MySQL的那些"坑"

Ferry支持MySQL作为后端数据库,但CentOS 7默认的MariaDB可能不兼容。

2.1 安装MySQL 5.7的正确姿势

官方文档建议使用MySQL 5.7,但直接安装可能会遇到依赖问题:

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm rpm -ivh mysql57-community-release-el7-11.noarch.rpm yum install -y mysql-community-server

安装完成后,启动服务并获取临时密码:

systemctl start mysqld grep 'temporary password' /var/log/mysqld.log

2.2 密码策略与用户权限

MySQL 5.7默认启用严格的密码策略,这会导致很多自动化脚本失败:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Complex@Password123'; SET GLOBAL validate_password_policy=LOW;

为Ferry创建专用用户时,注意字符集设置:

CREATE DATABASE ferry CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'ferry'@'%' IDENTIFIED BY 'Ferry@123'; GRANT ALL PRIVILEGES ON ferry.* TO 'ferry'@'%'; FLUSH PRIVILEGES;

3. Redis部署:GCC版本的噩梦

Ferry使用Redis作为缓存,但CentOS 7默认的GCC 4.8.5无法编译Redis 6.x。

3.1 升级GCC工具链

使用SCL仓库安装GCC 9:

yum install -y centos-release-scl yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++

临时启用GCC 9:

scl enable devtoolset-9 bash

要使GCC 9永久生效:

echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile

3.2 编译安装Redis 6.x

现在可以顺利编译Redis了:

wget http://download.redis.io/releases/redis-6.2.6.tar.gz tar xzf redis-6.2.6.tar.gz cd redis-6.2.6 make && make PREFIX=/usr/local/redis install

配置Redis服务时,特别注意内存设置:

mkdir /etc/redis cp redis.conf /etc/redis/6379.conf sed -i 's/^daemonize no/daemonize yes/' /etc/redis/6379.conf sed -i 's/^# maxmemory <bytes>/maxmemory 256mb/' /etc/redis/6379.conf

4. Node.js环境:版本冲突的陷阱

Ferry前端需要Node.js环境,但版本选择不当会导致各种依赖问题。

4.1 安装正确的Node.js版本

经过测试,Node.js 14.x版本兼容性最好:

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 ln -s /opt/node-v14.18.2-linux-x64/bin/node /usr/local/bin/node ln -s /opt/node-v14.18.2-linux-x64/bin/npm /usr/local/bin/npm

4.2 配置NPM镜像源

使用淘宝镜像可以显著提高安装速度:

npm config set registry https://registry.npm.taobao.org npm install -g cnpm --registry=https://registry.npm.taobao.org

5. Ferry后端部署:那些文档没告诉你的细节

Ferry后端使用Go语言编写,编译过程看似简单,实则暗藏玄机。

5.1 Go环境配置

安装Go 1.17(与Ferry兼容性最好):

wget https://studygolang.com/dl/golang/go1.17.5.linux-amd64.tar.gz tar -C /usr/local -xzf go1.17.5.linux-amd64.tar.gz

环境变量配置需要特别注意GOPATH:

echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile echo 'export GOPATH=/opt/gopath' >> /etc/profile source /etc/profile

5.2 编译Ferry后端

克隆仓库并编译时,可能会遇到网络问题:

git clone https://gitee.com/yllan/ferry.git cd ferry env GOPROXY=https://goproxy.cn GOOS=linux GOARCH=amd64 go build

配置文件settings.yml中几个容易出错的参数:

database: host: "127.0.0.1" port: 3306 database: "ferry" username: "ferry" password: "Ferry@123" charset: "utf8mb4"

6. Ferry前端部署:NPM依赖的地狱

前端部署可能是整个过程中最令人头疼的部分,各种依赖冲突层出不穷。

6.1 解决node-sass问题

node-sass是常见的问题源头,特别是在国内网络环境下:

git clone https://gitee.com/yllan/ferry_web.git cd ferry_web cnpm install --unsafe-perm

如果遇到node-sass错误,手动下载二进制文件:

wget https://npm.taobao.org/mirrors/node-sass/v4.14.1/linux-x64-83_binding.node mkdir -p node_modules/node-sass/vendor/linux-x64-83 mv linux-x64-83_binding.node node_modules/node-sass/vendor/linux-x64-83/binding.node cnpm rebuild node-sass

6.2 处理webpack版本冲突

Ferry前端使用的webpack版本较旧,需要特别注意:

cnpm install --save webpack@^4.5.0 cnpm install --save file-loader@^4.2.0

编译时可能会缺少一些辅助包:

cnpm install --save @babel/helper-validator-option cnpm install --save core-js regenerator-runtime svg-baker-runtime

7. Nginx配置:最后的拦路虎

将所有组件整合起来需要通过Nginx进行反向代理。

7.1 安装Nginx

使用官方仓库安装稳定版:

cat > /etc/yum.repos.d/nginx.repo <<EOF [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=0 enabled=1 EOF yum install -y nginx

7.2 配置Ferry站点

以下是一个经过验证可用的配置示例:

server { listen 8001; server_name your_domain_or_ip; location / { root /opt/ferry_web/web; index index.html; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://127.0.0.1:8002; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static { proxy_pass http://127.0.0.1:8002; proxy_set_header Host $host; } }

7.3 防火墙设置

开放必要端口:

firewall-cmd --permanent --add-port=8001/tcp firewall-cmd --permanent --add-port=8002/tcp firewall-cmd --reload

8. 常见问题排查指南

即使按照上述步骤操作,仍可能遇到各种问题。这里总结几个常见问题的解决方法。

8.1 前端编译时报内存不足

在资源有限的服务器上,可能需要增加Node.js内存限制:

export NODE_OPTIONS=--max_old_space_size=4096 cnpm run build:prod

8.2 后端启动后无法连接数据库

检查MySQL用户权限和密码策略:

SHOW GRANTS FOR 'ferry'@'%'; SELECT @@validate_password_policy;

8.3 Redis连接超时

确保Redis配置文件中绑定了正确的接口:

sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/' /etc/redis/6379.conf systemctl restart redis_6379

部署Ferry工单系统的过程就像一场冒险,每个环境都可能遇到不同的问题。关键是要理解每个组件的依赖关系,遇到问题时不要慌张,仔细阅读错误信息,逐步排查。我在三次重装系统后才最终成功部署,希望这篇文章能帮你节省这些时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询