← 返回

腾讯云宝塔面板部署Node.js博客全记录:从踩坑到上线

时间:2026年3月30日
技术栈:Node.js + Express + SQLite + Nginx + 宝塔面板


一、项目背景

最近完成了一个Apple风格的个人博客系统,采用Node.js + Express开发,SQLite作为数据库。项目特点包括轻量级设计,无需额外安装MySQL,支持Markdown文章编辑,完整的用户系统和评论功能,以及响应式Apple风格UI。

开发完成后,需要部署到腾讯云服务器,供外部访问。本文记录完整的部署过程和踩坑经验。


二、服务器环境准备

2.1 选购腾讯云服务器

配置建议选择2核4G内存的机型,个人博客足够使用。系统推荐CentOS 7.9,与宝塔兼容性最佳。带宽选择3到5Mbps,初期够用。系统盘50GB SSD即可。

安全组配置是关键步骤,需要开放以下端口:22端口用于SSH远程连接,来源0.0.0.0/0;80端口用于HTTP访问;443端口用于HTTPS访问;8888端口用于宝塔面板,后期可限制IP;3000端口用于Node.js调试。

2.2 安装宝塔面板

通过SSH连接服务器后执行安装命令。CentOS系统使用以下命令:

yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec

安装完成后会显示面板地址和初始密码,务必保存。


三、环境配置

3.1 安装必要软件

进入宝塔面板,点击软件商店,安装Nginx 1.24作为Web服务器,安装Node.js版本管理器,然后安装Node.js 18.x LTS版本。

3.2 安装PM2进程管理器

执行以下命令安装PM2:

npm install -g pm2

PM2用于守护Node.js应用,确保崩溃后自动重启。


四、项目部署

4.1 上传项目文件

推荐使用本地压缩ZIP上传的方式。首先在本地将项目文件夹压缩为ZIP,确保包含所有文件。然后在宝塔面板中进入文件管理,上传至 /www/wwwroot/blog 目录,解压后目录结构如下:

/www/wwwroot/blog/
├── lib/
├── public/          # 静态资源(CSS/JS/图片)
├── views/           # EJS模板
├── data/            # SQLite数据库目录(需创建)
├── server.js        # 入口文件
├── package.json     # 依赖配置
└── .env             # 环境变量

4.2 安装依赖

进入项目目录执行安装命令:

cd /www/wwwroot/blog
npm install

踩坑记录:如果安装缓慢,可以切换淘宝镜像加速:

npm config set registry https://registry.npmmirror.com

4.3 创建数据目录并设置权限

这是关键步骤,SQLite需要写入权限。执行以下命令:

mkdir -p /www/wwwroot/blog/data
chmod 755 /www/wwwroot/blog/data
chown www:www /www/wwwroot/blog/data

确保父目录也有执行权限:

chmod o+x /www /www/wwwroot /www/wwwroot/blog

踩坑记录:如果权限设置不正确,会出现 SQLITE_CANTOPEN: unable to open database file 错误。


五、Nginx反向代理配置

5.1 创建站点

在宝塔面板中进入网站管理,点击添加站点。域名填写服务器IP或你的域名,根目录设置为 /www/wwwroot/blog,PHP版本选择纯静态。

5.2 修改Nginx配置

配置文件路径为 /www/server/panel/vhost/nginx/49.232.145.120.conf,内容如下:

server {
    listen 80;
    server_name 49.232.145.120;
    
    root /www/wwwroot/blog/public;  # 静态文件根目录
    
    access_log /www/wwwlogs/blog_access.log;
    error_log /www/wwwlogs/blog_error.log;
    
    # 静态文件处理(关键!)
    location /css/ {
        alias /www/wwwroot/blog/public/css/;
        expires 30d;
    }
    
    location /js/ {
        alias /www/wwwroot/blog/public/js/;
        expires 30d;
    }
    
    location /images/ {
        alias /www/wwwroot/blog/public/images/;
        expires 30d;
    }
    
    # 反向代理到Node.js
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
    #error_page 404/404.html;  # 宝塔标识,保留
}

踩坑记录:静态文件路径必须正确指向 public 目录,否则CSS/JS加载失败,页面只有纯文字。


六、启动应用

6.1 使用PM2启动

进入项目目录执行以下命令:

cd /www/wwwroot/blog
pm2 start server.js --name "blog"
pm2 save
pm2 startup  # 设置开机自启

6.2 验证运行状态

查看应用状态:

pm2 status

查看实时日志:

pm2 logs blog

检查端口监听:

netstat -tlnp | grep 3000

七、常见问题排查

问题1:502 Bad Gateway

原因分析:Node.js应用未启动或端口不通。

解决方案:

pm2 restart blog

检查防火墙是否开放3000端口。

问题2:SQLite数据库无法打开

原因分析:data目录权限不足。

解决方案:

chown -R www:www /www/wwwroot/blog/data
chmod 755 /www/wwwroot/blog/data

问题3:CSS/JS加载404

原因分析:Nginx静态文件路径配置错误。

解决方案:确保 root 指向 public 目录,且目录内有文件。

问题4:MODULE_NOT_FOUND

原因分析:node_modules不完整。

解决方案:

rm -rf node_modules package-lock.json
npm install

八、SSL证书配置(HTTPS)

如果有域名,可以申请Let's Encrypt免费证书。首先在宝塔面板中进入网站设置,选择SSL,然后选择Let's Encrypt。验证方式可以选择DNS验证或文件验证。申请成功后,修改Nginx配置。

九、部署总结

环境准备阶段的关键操作是开放安全组端口,易错点是忘记开放3000调试端口。文件上传阶段使用ZIP压缩上传解压,易错点是遗漏public目录静态文件。依赖安装阶段执行npm install,易错点是网络慢导致安装不完整。权限设置阶段需要设置data目录755权限和www用户,易错点是SQLite无法写入。Nginx配置阶段需要正确配置静态路径和反向代理,易错点是CSS/JS加载失败。进程管理阶段使用PM2守护,易错点是应用崩溃后无法自动重启。


十、后续优化建议

数据库备份方面,建议定期备份 /www/wwwroot/blog/data/blog.db 文件。日志监控方面,配置PM2日志切割,防止磁盘占满。安全加固方面,修改默认管理员密码,限制宝塔面板访问IP。性能优化方面,启用Nginx缓存,配置CDN加速静态资源。

评论

登录注册 后参与讨论。

  • 江秋九
    2026-03-31 10:38

    淡淡问候语☕️浓浓牵挂情🤝彼此常关怀🌻日日心舒畅❤️❤️愿我们每日都平安康健!喜乐绵长!