跳转到主要内容

快速部署

快速在生产模式预览此项目

在阅读完快速开始后,我们已经了解了如何在本地快速预览此项目,本节将介绍如何在生产模式快速部署此项目。

注:本节内容仅介绍如何快速在生产模式部署此项目,若要正式使用请参照 生产部署 章节。

环境要求

作者的服务器环境为:京东云服务器 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  # 按需修改,改了这里反代端口也要修改

反向代理与域名解析的配置不在本节展开,请参阅其他教程或云服务商的文档。

完成上述步骤后,即可掌握本项目的基本开发与部署流程。后续章节将详细介绍项目各部分的设计,为站点定制提供参考。