快速部署
快速在生产模式预览此项目
在阅读完快速开始后,我们已经了解了如何在本地快速预览此项目,本节将介绍如何在生产模式快速部署此项目。
注:本节内容仅介绍如何快速在生产模式部署此项目,若要正式使用请参照 生产部署 章节。
环境要求
作者的服务器环境为:京东云服务器 Ubuntu 22,安装了宝塔面板,配置为 2H4G60GB。截至本文档撰写时,作者的文章数为 157 篇,评论数量约 1500 条,空闲状态下内存占用率为 26%,CPU 负载较低。
推荐使用 Nodejs ≥ 22、PostgreSQL ≥ 14、Redis ≥ 7。服务器中代码靠 Nodejs 运行,不需要安装 bun。
这些组件可在宝塔面板内安装。其中,PostgreSQL 推荐通过 PostgreSQL 管理器安装。
同时为了方便管理数据库,推荐在服务器内安装一个 PostgreSQL 管理器。这里以 pgadmin 为例,推荐通过 Docker 安装。同时,由于现有的 PostgreSQL 数据库管理器都很臃肿,我们可能仅需要一个能够执行增删改查的管理器,所以在这里我也推荐使用我开发和维护的 Prisma Studio 中文版。后面的文档中涉及到 PostgreSQL 管理之处都会分别提到这两个数据库管理器。
安装并配置好 Prisma Studio 的文档请参照 Prisma Studio 章节。
部署步骤
在本地打包
参照 快速开始 在本地完成依赖安装并生成 Prisma Client 后,修改 site.config.ts 中的预定义变量,重点是将 _cdnUrl 设为空。
TypeScriptconst _name = "站点名称";
const _desc = "测试描述(通用描述)";
const _displayName = "测试描述(展示在首页)";
const _nickname = "测试";
const _ownerName = "Test";
const _avatarPath = "/imgs/avatar.webp"; // 请替换为你自己的头像,放在 public/imgs/ 内
const _logoPath = "/imgs/imqi1.svg"; // 站点图标,同样放在 public/imgs/ 内
const _url = "http://example.com"; // 替换为你要预览的完整地址,否则防镜像会重定向到你写的地址
const _cdnUrl = ""; // 先设为空,后面有专门的章节介绍如何配置cdn
const _host = new URL(_url).hostname; // 不用改,自动解析
const _email = "mailto:you@example.com"; // 站长对外链接,用在首页图标条和关于页按钮
const _website = "https://your-site.com";
const _github = "https://github.com/your-github";Redis 的开关和连接参数在 site.config.ts 的 build.redis,保持默认即可启用:
TypeScript build: {
redis: {
enabled: true,
host: "127.0.0.1",
port: 6379,
db: 0,
},
},该配置仅在生产构建时写入产物,因此必须在构建前完成设置。
运行以下命令打包项目:
Bashbun run build
打包完成后的产物位于 .output/,public/ 目录下的文件是静态资源,server/ 目录下的文件是服务端代码,将整个目录传到服务器即可。
部署到服务器
将整个 .output/ 目录上传到服务器的项目目录,例如 /www/wwwroot/你的站点。
在宝塔面板中安装 PostgreSQL 和 pgadmin 后,将仓库中的 scripts/init-db.sql 导入数据库。该步骤会一次完成建表、写入默认设置和插入示例数据,并且可以重复执行。完成后,默认管理员凭据为 admin / 123456,登录后请立即修改密码。
之所以不做一个安装数据库的界面是因为我想让依赖尽量小,不想塞进对运行无关的功能。数据库初始化有其他方式,可能比引导式安装更麻烦,但也仅此一次。
通过 PgSQL 管理器安装的 PostgreSQL 数据库和 Docker 所在的网络不通,解决方法是改配置。在配置中加一行
listen_addresses = '*',然后 Host 填写docker network inspect baota_net | grep -oP '"Gateway":\s*"\K[^"]+'的结果,这是容器网关所在的 IP,如172.19.0.1;然后再在网络配置中加一行host all all 172.19.0.0/16 scram-sha-256,第四个值填你上一个 IP 所在的网段,最后重启 PostgreSQL。具体步骤请参照 常见问题 中的生产环境 PostgreSQL 和 pgadmin 无法连接解决。
在宝塔的「Node 项目管理器」中添加项目,类型选择“传统项目”,启动命令填写 node .output/server/index.mjs,并将环境变量中的 DB_* 替换为服务器上数据库的连接信息,将 NODE_ENV 设置为 production。
EnvDB_HOST=127.0.0.1
DB_PORT=5432
DB_USER=your_user
DB_PASSWORD=your_password
DB_NAME=your_db_name
NODE_ENV=production
PORT=3000 # 按需修改,改了这里反代端口也要修改
反向代理与域名解析的配置不在本节展开,请参阅其他教程或云服务商的文档。
完成上述步骤后,即可掌握本项目的基本开发与部署流程。后续章节将详细介绍项目各部分的设计,为站点定制提供参考。