跳转到主要内容

快速部署

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

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

注:本节内容仅介绍如何快速在生产模式部署此项目,若要正式使用请参照【部署到生产环境(现在还未撰写)】。

环境要求

作者的服务器环境为:京东云服务器 Ubuntu 22,安装了宝塔面板,2H4G60GB 的配置。截止到本文档撰写时,作者的文章数为 157 篇,评论数量约 1500 条,内存空闲时有 26% 占用,CPU 压力不大。

推荐使用 Nodejs v22+、PostgreSQL 14+、Redis 7+,不需要安装 bun。

这些套件可在宝塔面板内安装,其中 PostgreSQL 仍然推荐通过 Docker 安装。

部署步骤

在本地打包

参照 快速开始 在本地安装了依赖并生成了 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 _url = "http://example.com";
const _cdnUrl = "";  // 先设为空,后面有专门的章节介绍如何配置cdn
const _host = new URL(_url).hostname;  // 不用改,自动解析
const _isProduction = process.env.NODE_ENV === "production";  // 不用改,自动解析

修改 .env,配置 Redis 缓存:

Env# 生产环境 Redis 配置
REDIS_HOST_PROD="127.0.0.1"
REDIS_PORT_PROD="6379"
REDIS_PASSWORD_PROD=""
REDIS_DB_PROD="0"

这部分环境变量会被打包进 Nuxt 中,作为服务端的一部分,所以要在打包时设置。

运行以下命令打包项目:

Bashbun run build

打包完成后的产物位于 .output/public/ 目录下的文件是静态资源,server/ 目录下的文件是服务端代码,将整个目录传到服务器即可。

部署到服务器

.output/ 整个上传到服务器的项目目录,比如 /www/wwwroot/你的站点

数据库沿用快速开始里的方式用 Docker 起一个 PostgreSQL,再把仓库里的 scripts/init-db.sql 导入进去,pgAdmin、DBeaver、psql 都可以。这一步会一次完成建表、写入默认设置和插入示例数据,且可重复执行,完成后默认管理员是 admin / 123456,登录后请立即修改密码。宝塔面板没有 PostgreSQL 管理器,需要图形界面的话在 Docker 里再装一个 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  # 按需修改

添加反向代理和配置域名解析这里不作介绍,请查阅教程或云服务商的文档。

读到这里,你应该已经具备了开发和部署本项目的知识。后面我将详细介绍本项目中每一处的设计,为你的 DIY 提供参考。