跳到主要内容

源码部署

本文档详细介绍如何从源码构建和部署 UPage。如果您希望自定义 UPage 或者参与开发,这是最合适的部署方式。

前置条件

在开始之前,请确保您的系统满足以下要求:

  • Node.js 18.18.0 或更高版本
  • pnpm 9.4.0 或更高版本
  • Git

下载并构建代码

克隆代码库

首先,克隆 UPage 的代码库:

git clone https://github.com/halo-dev/upage.git
cd upage

安装依赖

使用 pnpm 安装项目依赖:

pnpm install

配置环境变量

拷贝 .env.example 文件,创建 .env 文件:

cp .env.example .env

配置必要的环境变量:

# 基础配置
PORT=3000
NODE_ENV=production
OPERATING_ENV=production
LOG_LEVEL=info
USAGE_LOG_FILE=true
MAX_UPLOAD_SIZE_MB=5
STORAGE_DIR=./storage

# AI 提供商配置
LLM_PROVIDER=OpenAI
PROVIDER_BASE_URL=your-openai-api-base-url
PROVIDER_API_KEY=your-openai-api-key
LLM_DEFAULT_MODEL=your-default-model
LLM_MINOR_MODEL=your-minor-model

您可以根据需要配置不同的 AI 提供商,详细配置请参考配置参考

生成 Prisma 客户端

pnpm setup

开发模式使用

如果您想在开发模式下运行 UPage,可以使用以下命令:

pnpm dev

开发服务器启动后,您可以通过浏览器访问:

http://localhost:5173

这将启动开发服务器,支持热重载,方便您进行开发和调试。

生产模式使用

构建 UPage 项目:

pnpm build

启动服务

启动 UPage 服务:

pnpm preview

服务启动后,您可以通过浏览器访问:

http://localhost:3000

使用 PM2 管理服务(可选)

在生产环境中,可以使用 PM2 来管理 Node.js 应用程序:

全局安装 PM2

npm install -g pm2

创建 PM2 配置文件

创建 ecosystem.config.js 文件:

module.exports = {
apps: [{
name: 'upage',
script: './server.mjs',
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'production',
OPERATING_ENV: 'production',
PORT: 3000,
LLM_PROVIDER: 'OpenAI',
PROVIDER_BASE_URL: 'your-openai-api-base-url',
PROVIDER_API_KEY: 'your-openai-api-key',
LLM_DEFAULT_MODEL: 'your-default-model',
LLM_MINOR_MODEL: 'your-minor-model',
}
}]
};

启动服务

pm2 start ecosystem.config.js

查看日志

pm2 logs upage

监控服务

pm2 monit

升级 UPage

当有新版本发布时,您可以按照以下步骤升级 UPage:

# 拉取最新代码
git pull origin main

# 安装依赖
pnpm install

# 构建项目
pnpm build

# 开发环境使用
pnpm dev

# 生产环境使用
pnpm preview

# 或者如果使用 PM2
pm2 restart upage

故障排除

依赖安装失败

如果依赖安装失败,可以尝试清除 pnpm 缓存:

pnpm store prune
pnpm install

构建失败

如果构建失败,可以尝试清除构建缓存:

pnpm clean
pnpm build

数据库错误

如果遇到数据库相关错误,可以尝试重新初始化数据库

pnpm prisma migrate reset
危险

请注意,这将清空所有数据并重置数据库,切勿在生产环境中使用。

日志查看

检查日志文件以获取更多错误信息:

cat logs/combined-*.log
cat logs/error-*.log

下一步