从零开始:基于CentOS的轻量服务器+Express+MySQL搭建个人网站指南

一、环境准备:轻量应用服务器与基础配置

1.1 轻量应用服务器选型与部署

轻量应用服务器(如阿里云、腾讯云提供的CentOS镜像)是搭建个人网站的经济高效选择。其优势在于:

  • 资源隔离:独立IP与带宽,避免共享主机性能波动。
  • 成本可控:按需付费模式,适合个人开发者或小型项目。
  • 管理便捷:提供Web控制台,支持一键重装系统、防火墙配置等操作。

操作建议

  1. 选择CentOS 7/8镜像(LTS版本更稳定),配置至少1核2G内存。
  2. 通过SSH连接服务器(如使用Xshell或PuTTY),初始密码可通过控制台重置。
  3. 更新系统包:sudo yum update -y,确保基础环境安全。

1.2 安全加固:SSH与防火墙配置

默认SSH端口(22)易受暴力破解攻击,需进行以下优化:

  • 修改SSH端口:编辑/etc/ssh/sshd_config,修改Port 22Port 2222(或其他高位端口),重启服务:sudo systemctl restart sshd
  • 禁用Root登录:设置PermitRootLogin no,通过普通用户+sudo提权管理。
  • 配置防火墙:使用firewalld开放必要端口(如2222、80、443、3306):
    1. sudo firewall-cmd --permanent --add-port=2222/tcp
    2. sudo firewall-cmd --permanent --add-service=http
    3. sudo firewall-cmd --permanent --add-service=https
    4. sudo firewall-cmd --reload

二、Express应用开发:从零构建Web服务

2.1 Node.js与Express安装

Express是基于Node.js的轻量级Web框架,适合快速开发API或网站后端。

步骤

  1. 安装Node.js(推荐使用nvm管理多版本):
    1. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    2. source ~/.bashrc
    3. nvm install --lts
  2. 创建Express项目:
    1. mkdir my-website && cd my-website
    2. npm init -y
    3. npm install express
  3. 编写基础路由(app.js):

    1. const express = require('express');
    2. const app = express();
    3. const port = 3000;
    4. app.get('/', (req, res) => {
    5. res.send('Hello, World!');
    6. });
    7. app.listen(port, () => {
    8. console.log(`Server running at http://localhost:${port}`);
    9. });
  4. 本地测试:node app.js,访问http://localhost:3000验证。

2.2 中间件与静态文件服务

Express通过中间件扩展功能,例如:

  • 日志记录morgan中间件记录HTTP请求。
  • JSON解析express.json()解析请求体。
  • 静态文件:托管前端资源(HTML/CSS/JS)。

示例配置

  1. const morgan = require('morgan');
  2. app.use(morgan('combined'));
  3. app.use(express.json());
  4. app.use(express.static('public')); // 托管public目录下的文件

三、MySQL数据库集成:数据持久化方案

3.1 MySQL安装与配置

CentOS下可通过YUM安装MySQL社区版:

  1. sudo yum install mysql-server -y
  2. sudo systemctl start mysqld
  3. sudo systemctl enable mysqld

安全初始化
运行mysql_secure_installation,按提示设置root密码、移除匿名用户、禁止远程root登录等。

3.2 数据库设计与连接

创建网站所需数据库及用户:

  1. CREATE DATABASE my_website;
  2. CREATE USER 'web_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
  3. GRANT ALL PRIVILEGES ON my_website.* TO 'web_user'@'localhost';
  4. FLUSH PRIVILEGES;

在Express中连接MySQL(使用mysql2库):

  1. npm install mysql2
  1. const mysql = require('mysql2/promise');
  2. const pool = mysql.createPool({
  3. host: 'localhost',
  4. user: 'web_user',
  5. password: 'StrongPassword123!',
  6. database: 'my_website',
  7. waitForConnections: true,
  8. connectionLimit: 10
  9. });
  10. // 示例查询
  11. async function getUser(id) {
  12. const [rows] = await pool.query('SELECT * FROM users WHERE id = ?', [id]);
  13. return rows[0];
  14. }

四、部署与优化:生产环境实战

4.1 PM2进程管理

使用PM2守护Express进程,避免因崩溃导致服务中断:

  1. npm install pm2 -g
  2. pm2 start app.js --name "my-website"
  3. pm2 save
  4. pm2 startup # 生成开机自启命令(按提示执行)

4.2 Nginx反向代理

将Express的3000端口通过Nginx暴露为80/443端口,并启用HTTPS:

  1. 安装Nginx:sudo yum install nginx -y
  2. 配置反向代理(/etc/nginx/conf.d/my-website.conf):

    1. server {
    2. listen 80;
    3. server_name yourdomain.com;
    4. location / {
    5. proxy_pass http://localhost:3000;
    6. proxy_http_version 1.1;
    7. proxy_set_header Upgrade $http_upgrade;
    8. proxy_set_header Connection 'upgrade';
    9. proxy_set_header Host $host;
    10. proxy_cache_bypass $http_upgrade;
    11. }
    12. }
  3. 申请SSL证书(如Let’s Encrypt):
    1. sudo yum install certbot python3-certbot-nginx -y
    2. sudo certbot --nginx -d yourdomain.com

4.3 性能优化建议

  • 缓存策略:对静态资源设置Cache-Control头。
  • 数据库索引:为高频查询字段添加索引。
  • 负载测试:使用abwrk模拟并发请求,调整PM2实例数。

五、常见问题与排查

  1. 端口冲突:检查netstat -tulnp确认端口占用。
  2. MySQL连接失败:验证用户权限与防火墙规则。
  3. Nginx 502错误:检查Express服务是否运行,日志位于/var/log/nginx/error.log
  4. PM2进程崩溃:通过pm2 logs查看错误日志。

六、总结与扩展

通过轻量应用服务器(CentOS)+Express+MySQL的组合,开发者可快速搭建高可用、低成本的个人网站。后续可扩展:

  • 引入Redis缓存热点数据。
  • 使用Docker容器化部署,提升环境一致性。
  • 集成CI/CD流水线(如GitHub Actions)实现自动化部署。

本文提供的步骤与代码示例均经过实际验证,适合初学者跟随操作,也可作为运维人员的参考手册。