一、环境准备:轻量应用服务器与基础配置
1.1 轻量应用服务器选型与部署
轻量应用服务器(如阿里云、腾讯云提供的CentOS镜像)是搭建个人网站的经济高效选择。其优势在于:
- 资源隔离:独立IP与带宽,避免共享主机性能波动。
- 成本可控:按需付费模式,适合个人开发者或小型项目。
- 管理便捷:提供Web控制台,支持一键重装系统、防火墙配置等操作。
操作建议:
- 选择CentOS 7/8镜像(LTS版本更稳定),配置至少1核2G内存。
- 通过SSH连接服务器(如使用Xshell或PuTTY),初始密码可通过控制台重置。
- 更新系统包:
sudo yum update -y,确保基础环境安全。
1.2 安全加固:SSH与防火墙配置
默认SSH端口(22)易受暴力破解攻击,需进行以下优化:
- 修改SSH端口:编辑
/etc/ssh/sshd_config,修改Port 22为Port 2222(或其他高位端口),重启服务:sudo systemctl restart sshd。 - 禁用Root登录:设置
PermitRootLogin no,通过普通用户+sudo提权管理。 - 配置防火墙:使用
firewalld开放必要端口(如2222、80、443、3306):sudo firewall-cmd --permanent --add-port=2222/tcpsudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --reload
二、Express应用开发:从零构建Web服务
2.1 Node.js与Express安装
Express是基于Node.js的轻量级Web框架,适合快速开发API或网站后端。
步骤:
- 安装Node.js(推荐使用nvm管理多版本):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bashsource ~/.bashrcnvm install --lts
- 创建Express项目:
mkdir my-website && cd my-websitenpm init -ynpm install express
-
编写基础路由(
app.js):const express = require('express');const app = express();const port = 3000;app.get('/', (req, res) => {res.send('Hello, World!');});app.listen(port, () => {console.log(`Server running at http://localhost:${port}`);});
- 本地测试:
node app.js,访问http://localhost:3000验证。
2.2 中间件与静态文件服务
Express通过中间件扩展功能,例如:
- 日志记录:
morgan中间件记录HTTP请求。 - JSON解析:
express.json()解析请求体。 - 静态文件:托管前端资源(HTML/CSS/JS)。
示例配置:
const morgan = require('morgan');app.use(morgan('combined'));app.use(express.json());app.use(express.static('public')); // 托管public目录下的文件
三、MySQL数据库集成:数据持久化方案
3.1 MySQL安装与配置
CentOS下可通过YUM安装MySQL社区版:
sudo yum install mysql-server -ysudo systemctl start mysqldsudo systemctl enable mysqld
安全初始化:
运行mysql_secure_installation,按提示设置root密码、移除匿名用户、禁止远程root登录等。
3.2 数据库设计与连接
创建网站所需数据库及用户:
CREATE DATABASE my_website;CREATE USER 'web_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';GRANT ALL PRIVILEGES ON my_website.* TO 'web_user'@'localhost';FLUSH PRIVILEGES;
在Express中连接MySQL(使用mysql2库):
npm install mysql2
const mysql = require('mysql2/promise');const pool = mysql.createPool({host: 'localhost',user: 'web_user',password: 'StrongPassword123!',database: 'my_website',waitForConnections: true,connectionLimit: 10});// 示例查询async function getUser(id) {const [rows] = await pool.query('SELECT * FROM users WHERE id = ?', [id]);return rows[0];}
四、部署与优化:生产环境实战
4.1 PM2进程管理
使用PM2守护Express进程,避免因崩溃导致服务中断:
npm install pm2 -gpm2 start app.js --name "my-website"pm2 savepm2 startup # 生成开机自启命令(按提示执行)
4.2 Nginx反向代理
将Express的3000端口通过Nginx暴露为80/443端口,并启用HTTPS:
- 安装Nginx:
sudo yum install nginx -y。 -
配置反向代理(
/etc/nginx/conf.d/my-website.conf):server {listen 80;server_name yourdomain.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;}}
- 申请SSL证书(如Let’s Encrypt):
sudo yum install certbot python3-certbot-nginx -ysudo certbot --nginx -d yourdomain.com
4.3 性能优化建议
- 缓存策略:对静态资源设置
Cache-Control头。 - 数据库索引:为高频查询字段添加索引。
- 负载测试:使用
ab或wrk模拟并发请求,调整PM2实例数。
五、常见问题与排查
- 端口冲突:检查
netstat -tulnp确认端口占用。 - MySQL连接失败:验证用户权限与防火墙规则。
- Nginx 502错误:检查Express服务是否运行,日志位于
/var/log/nginx/error.log。 - PM2进程崩溃:通过
pm2 logs查看错误日志。
六、总结与扩展
通过轻量应用服务器(CentOS)+Express+MySQL的组合,开发者可快速搭建高可用、低成本的个人网站。后续可扩展:
- 引入Redis缓存热点数据。
- 使用Docker容器化部署,提升环境一致性。
- 集成CI/CD流水线(如GitHub Actions)实现自动化部署。
本文提供的步骤与代码示例均经过实际验证,适合初学者跟随操作,也可作为运维人员的参考手册。