源码部署
本文档详细介绍如何从源码构建和部署 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
下一步
- 阅读用户指南学习如何使用 UPage 创建网页
- 探索配置参考了解所有可用的配置选项
- 探索Logto 认证集成了解如何集成 Logto 实现用户认证