跳转到主要内容

通过源码部署

通过宝塔面板 Nodejs 版本管理器部署项目

本节介绍如何通过宝塔面板的 Nodejs 版本管理器部署可用于生产环境的 ImQi1 CMS。如使用其他运维面板,或不使用运维面板,整体安装方式也基本相同。

如果你想使用 CDN 部署,请参照 配置 CDN 文档。

是否使用 CDN 打包,是通过 site.config.ts 内的预定义变量 _cdnUrl 来设置的。设为空值表示不使用 CDN:

TypeScriptconst _cdnUrl = "https://cdn.imqi1.com";  
const _cdnUrl = "";  

若此文档内的内容和代码行为不一致,请以实际代码为准。

低配服务器推荐使用此方法部署,不推荐在服务器中部署,因为 Nuxt 打包服务端会占用大量 CPU,服务器会卡死,甚至影响你的正式业务。

环境准备

本文作者使用的服务器环境为京东云服务器,操作系统为 Ubuntu 22,配置为 2H4G60GB。

安装宝塔面板,可前往 宝塔面板 安装。

访问宝塔面板,确保已安装以下应用:Nodejs 版本管理器、PostgreSQL、Redis、Nginx、Docker。这些应用均可在宝塔面板的“应用”中安装。

在 Nodejs 版本管理器中安装 Nodejs ≥ 22,推荐 v24 LTS。

在 PostgreSQL 管理器中安装 PostgreSQL ≥ 14,我安装的是 18 版本。

同时,为便于运维,建议在 Docker 内安装 pgadmin,也可安装我本人维护和使用的 Prisma Studio 中文版。

打包并上传

首先在本地安装 Bun,可前往 Bun 安装。

安装 Bun 后,在本地克隆此项目,并执行 bun install 和 bunx prisma generate。

Bashgit clone --recurse-submodules https://github.com/imqi1-github/imqi1-cms.git
bun install
bunx prisma generate

将 .env.example 复制为 .env。Redis 的开关和连接参数在 site.config.ts 的 build.redis,本机部署保持默认即可启用页面缓存与搜索缓存:

TypeScript  build: {
    redis: {
      enabled: true,
      host: "127.0.0.1",
      port: 6379,
      db: 0,
    },
  },

修改 site.config.ts 中的预定义变量,将 _cdnUrl 设为空值,并将其他信息修改为站点自身信息,不要使用示例站点的信息。

注:请务必修改 _url 变量(带协议头),该变量会被 siteConfig.site.url 引用。如果填写的值与生产环境域名不一致,站点的防镜像功能会将 URL 重定向到该值。

执行 bun run build 打包项目。

Windows 下构建速度较慢,Linux 或 macOS 通常更快,建议优先在这两个平台上进行开发和构建。

打包完成后,控制台会输出类似这样的信息:

打包后的产物存放在 .output 中,分为 server 和 public 目录。前者是服务端代码,需要通过 nodejs 运行;后者是静态资源,也就是支持页面运行的 CSS 和 JS。

将产物上传至服务器中的某个目录中,比如 /www/wwwroot/imqi1-demo。

创建项目

在项目中找到 scripts/init-db.sql,复制整个文件内的代码。

在 PostgreSQL 中新建一个数据库,用户名、密码建议都设为独立的,不要使用超级用户。

进入 pgadmin,将数据库所有者设置为创建数据库时指定的用户名。(这可能是宝塔面板的行为导致的:即使指定了用户名和密码,数据库所有者仍可能显示为超级管理员 postgres。)

在 pgadmin 中执行上述 SQL 语句。执行时应使用创建数据库时设置的用户;如果使用 postgres 创建数据库,再由其他用户访问数据库,可能会出现权限不足。

手动导入只执行 SQL 本身,不含把库时区设为 UTC 这一步。时区不是 UTC 会让归档分组和按时间排序错位,补一句 ALTER DATABASE <库名> SET timezone = 'UTC' 即可。

可见数据表已成功创建。

建议确认数据表所有者,以避免权限问题。

返回宝塔面板,在 Nodejs 项目中,新建一个,配置如下图所示。

其中 .env 配置信息可从 .env 配置说明 获取完整列表,但是 DB_* 五项必须写,且 NODE_ENV 要设为 production。

配置反向代理

在宝塔面板的域名管理中填写你在 site.config.ts 中填写的域名,去掉 https。

然后在【外网映射】中启用外网映射,即可访问站点。

升级项目

若代码发生变动,例如自行修改源码或获取新的更新包,重新执行上述步骤完成构建即可,其余步骤不变。