从零开始:轻量CentOS服务器+Express+MySQL搭建个人网站全攻略
一、技术选型与架构设计
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/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload
2.2 Node.js环境部署
推荐使用nvm管理多版本Node.js:
# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
# 重新加载shell配置
source ~/.bashrc
# 安装LTS版本Node.js
nvm install --lts
nvm use --lts
# 验证安装
node -v
npm -v
三、MySQL数据库搭建
3.1 安装与配置
# 添加MySQL Yum仓库
sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-6.noarch.rpm
# 安装MySQL服务器
sudo yum install -y mysql-community-server
# 启动服务
sudo systemctl start mysqld
sudo 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-site
npm init -y
npm install express mysql2 ejs body-parser
4.2 基础结构示例
// app.js
const 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 -g
pm2 start app.js --name "personal-site"
pm2 save
pm2 startup # 生成开机自启命令并执行
5.2 Nginx反向代理配置
# /etc/nginx/conf.d/personal-site.conf
server {
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免费证书:
# 安装Certbot
sudo 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 {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
[ -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/files
sudo chmod -R 755 /path/to/static/files
八、扩展建议
- 数据库分表:当数据量超过500万条时考虑垂直/水平分表
- 缓存层:引入Redis缓存热点数据
- CI/CD:使用GitHub Actions实现自动化部署
- 多环境管理:通过.env文件区分开发/测试/生产环境
本方案通过轻量级服务器实现个人网站的全栈部署,在保证性能的同时控制成本。实际部署时建议先在测试环境验证,再逐步迁移到生产环境。对于高流量场景,可考虑添加CDN加速和数据库读写分离架构。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权请联系我们,一经查实立即删除!