一、技术选型与架构设计
1.1 轻量应用服务器优势
轻量应用服务器(LWS)以低资源占用、高性价比著称,特别适合个人开发者或初创项目。CentOS 7/8作为稳定的企业级Linux发行版,提供长期支持(LTS)和完善的软件包管理(yum/dnf)。相较于传统VPS,LWS通常预装基础环境,简化部署流程。
1.2 技术栈组合逻辑
- Express.js:基于Node.js的轻量级Web框架,提供路由、中间件等核心功能,适合快速开发RESTful API
- MySQL:关系型数据库标杆,支持事务处理和复杂查询,与Express通过
mysql2或sequelize驱动连接 - CentOS:提供稳定的运行环境,配合Nginx反向代理实现负载均衡
二、服务器环境准备
2.1 基础环境配置
# 更新系统软件包sudo yum update -y# 安装必要工具sudo yum install -y git wget curl vim# 配置防火墙(放行80/443/3000端口)sudo firewall-cmd --permanent --add-port=80/tcpsudo firewall-cmd --permanent --add-port=443/tcpsudo firewall-cmd --permanent --add-port=3000/tcpsudo firewall-cmd --reload
2.2 Node.js环境部署
推荐使用nvm管理多版本Node.js:
# 安装nvmcurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash# 重新加载shell配置source ~/.bashrc# 安装LTS版本Node.jsnvm install --ltsnvm use --lts# 验证安装node -vnpm -v
三、MySQL数据库搭建
3.1 安装与配置
# 添加MySQL Yum仓库sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpmsudo rpm -ivh mysql80-community-release-el7-6.noarch.rpm# 安装MySQL服务器sudo yum install -y mysql-community-server# 启动服务sudo systemctl start mysqldsudo systemctl enable mysqld# 获取临时密码sudo grep 'temporary password' /var/log/mysqld.log
3.2 安全配置
执行mysql_secure_installation进行安全设置:
- 设置root密码
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 重新加载权限表
3.3 创建应用数据库
CREATE DATABASE personal_site CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';GRANT ALL PRIVILEGES ON personal_site.* TO 'app_user'@'localhost';FLUSH PRIVILEGES;
四、Express应用开发
4.1 项目初始化
mkdir personal-site && cd personal-sitenpm init -ynpm install express mysql2 ejs body-parser
4.2 基础结构示例
// app.jsconst express = require('express');const mysql = require('mysql2/promise');const bodyParser = require('body-parser');const app = express();app.set('view engine', 'ejs');app.use(bodyParser.urlencoded({ extended: true }));// 数据库连接池const pool = mysql.createPool({host: 'localhost',user: 'app_user',password: 'StrongPassword123!',database: 'personal_site',waitForConnections: true,connectionLimit: 10,queueLimit: 0});// 路由示例app.get('/', async (req, res) => {const [rows] = await pool.query('SELECT * FROM posts');res.render('index', { posts: rows });});const PORT = process.env.PORT || 3000;app.listen(PORT, () => {console.log(`Server running on port ${PORT}`);});
五、生产环境部署
5.1 使用PM2进程管理
npm install pm2 -gpm2 start app.js --name "personal-site"pm2 savepm2 startup # 生成开机自启命令并执行
5.2 Nginx反向代理配置
# /etc/nginx/conf.d/personal-site.confserver {listen 80;server_name yourdomain.com;location / {proxy_pass http://127.0.0.1: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;}# 静态文件处理location /static/ {alias /path/to/your/static/files/;expires 30d;}}
5.3 HTTPS证书配置
使用Let’s Encrypt免费证书:
# 安装Certbotsudo yum install -y certbot python3-certbot-nginx# 获取证书sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com# 测试自动续期sudo certbot renew --dry-run
六、性能优化与安全加固
6.1 数据库优化
- 启用查询缓存(MySQL 8.0需通过配置文件)
- 为常用查询字段添加索引
- 定期执行
ANALYZE TABLE更新统计信息
6.2 应用层安全
// 安全中间件示例app.use((req, res, next) => {res.setHeader('X-Frame-Options', 'DENY');res.setHeader('X-Content-Type-Options', 'nosniff');res.setHeader('Content-Security-Policy', "default-src 'self'");next();});
6.3 监控与日志
# 安装htop监控sudo yum install -y htop# 日志轮转配置# /etc/logrotate.d/personal-site/var/log/nginx/personal-site.access.log {dailymissingokrotate 14compressdelaycompressnotifemptycreate 640 nginx admsharedscriptspostrotate[ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`endscript}
七、常见问题解决方案
7.1 端口冲突处理
# 查找占用端口的进程sudo netstat -tulnp | grep :3000# 终止异常进程sudo kill -9 <PID>
7.2 数据库连接失败排查
- 检查MySQL服务状态:
sudo systemctl status mysqld - 验证用户权限:
SELECT host, user FROM mysql.user; - 查看错误日志:
sudo tail -f /var/log/mysqld.log
7.3 静态资源404错误
确保Nginx配置中的alias路径正确,并检查文件权限:
sudo chown -R nginx:nginx /path/to/static/filessudo chmod -R 755 /path/to/static/files
八、扩展建议
- 数据库分表:当数据量超过500万条时考虑垂直/水平分表
- 缓存层:引入Redis缓存热点数据
- CI/CD:使用GitHub Actions实现自动化部署
- 多环境管理:通过
.env文件区分开发/测试/生产环境
本方案通过轻量级服务器实现个人网站的全栈部署,在保证性能的同时控制成本。实际部署时建议先在测试环境验证,再逐步迁移到生产环境。对于高流量场景,可考虑添加CDN加速和数据库读写分离架构。