如何通过SFTP运行含Node.js、Express、MySQL的网站?
部署Node.js/Express/MySQL站点的后续操作
首先明确:SFTP仅用于文件传输,没法直接执行命令,你得通过SSH连接(不是SFTP)来运行node index.js这类指令。等管理员帮你搞定npm install的权限问题后,按下面的步骤操作:
1. 确认服务器环境依赖
- 检查服务器Node.js版本:执行
node -v和npm -v,确保版本和你开发环境兼容,避免版本差异出问题。 - 确认MySQL服务状态:执行
systemctl status mysql(Debian/Ubuntu)或systemctl status mysqld(CentOS/RHEL),没运行的话就启动:sudo systemctl start mysql,再设置开机自启:sudo systemctl enable mysql。
2. 配置数据库连接
- 修改项目里的数据库配置文件(比如
config.js),把开发环境的参数换成服务器的MySQL信息:- 主机填
localhost(如果MySQL和Node服务在同一服务器) - 用服务器上专门创建的MySQL账户(别用root账户跑生产环境)
- 提前在服务器MySQL里建好对应数据库:登录MySQL后执行
CREATE DATABASE your_db_name;
- 主机填
- 测试连接:可以写个简单的测试脚本跑一下,或者启动服务后看日志确认连接正常。
3. 持久化启动Node.js服务
直接用node index.js启动的话,SSH会话一关服务就停了,得用进程管理工具让服务一直跑:
- 用pm2(最常用方案):
- 全局安装pm2:
npm install -g pm2(还是有权限问题就找管理员帮忙) - 启动服务:
pm2 start index.js --name "你的应用名" - 设置开机自启:
pm2 startup,跟着提示执行生成的命令 - 查看状态:
pm2 status,看日志:pm2 logs 你的应用名
- 全局安装pm2:
- 用systemd(规范生产环境方案):
创建/etc/systemd/system/你的应用名.service文件,内容示例:
然后执行:[Unit] Description=你的Express应用 After=network.target [Service] User=你的服务器用户名 WorkingDirectory=/你的项目路径 ExecStart=/usr/bin/node index.js Restart=always Environment=NODE_ENV=production [Install] WantedBy=multi-user.targetsudo systemctl daemon-reload sudo systemctl start 你的应用名 sudo systemctl enable 你的应用名
4. 配置端口与访问规则
- 开放端口:Express默认跑3000端口,服务器防火墙要开这个端口:
sudo ufw allow 3000(Debian/Ubuntu)或sudo firewall-cmd --add-port=3000/tcp --permanent && sudo firewall-cmd --reload(CentOS/RHEL)。 - 反向代理(用域名访问的话):如果要通过80/443端口(HTTP/HTTPS)访问,得配Nginx或Apache做反向代理。以Nginx为例:
创建配置文件/etc/nginx/sites-available/你的域名.conf:
启用配置:server { listen 80; server_name 你的域名.com; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }sudo ln -s /etc/nginx/sites-available/你的域名.conf /etc/nginx/sites-enabled/,测试配置:sudo nginx -t,重启Nginx:sudo systemctl restart nginx。
5. 生产环境优化
- 设置生产环境变量:启动服务前加
NODE_ENV=production,比如NODE_ENV=production pm2 start index.js,或者在systemd配置里加(上面示例已包含),这会让Express进入生产模式,优化性能并减少冗余日志。 - 清理冗余文件:别把
node_modules、.git、开发环境配置文件传到服务器,用.gitignore或者WinSCP手动排除,省空间还避免泄露敏感信息。 - 定期备份数据库:用
cron设置定时任务,定期备份MySQL数据库,防止数据丢失。
内容的提问来源于stack exchange,提问作者Kevin Foendoe
相关产品推荐
相关产品推荐

