通过源码部署
通过宝塔面板 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。

然后在【外网映射】中启用外网映射,即可访问站点。
升级项目
若代码发生变动,例如自行修改源码或获取新的更新包,重新执行上述步骤完成构建即可,其余步骤不变。