Merge pull request #1 from LIlGG/docs/add-upage-docs
docs: add upage usage instructions document
This commit is contained in:
@@ -40,10 +40,10 @@ PROVIDER_BASE_URL=
|
||||
# {"region": "us-east-1", "accessKeyId": "yourAccessKeyId", "secretAccessKey": "yourSecretAccessKey", "sessionToken": "yourSessionToken"}
|
||||
PROVIDER_API_KEY=
|
||||
|
||||
# MODEL used for page generation (should correspond to LLM_DEFAULT_PROVIDER)
|
||||
# MODEL used for page generation (should correspond to LLM_PROVIDER)
|
||||
LLM_DEFAULT_MODEL=
|
||||
|
||||
# MODEL used for auxiliary page generation, such as summarization and pre-analysis. (should correspond to LLM_DEFAULT_PROVIDER)
|
||||
# MODEL used for auxiliary page generation, such as summarization and pre-analysis. (should correspond to LLM_PROVIDER)
|
||||
LLM_MINOR_MODEL=
|
||||
|
||||
# Get your Serper API Key https://serper.dev/
|
||||
|
||||
@@ -46,7 +46,7 @@ runs:
|
||||
type=semver,pattern={{ version }}
|
||||
type=sha,enabled=${{ github.event_name == 'push' }}
|
||||
flavor: |
|
||||
latest=false
|
||||
latest=${{ github.event_name == 'release' }}
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Set up Docker Buildx
|
||||
|
||||
2
.github/workflows/ci.yaml
vendored
2
.github/workflows/ci.yaml
vendored
@@ -3,7 +3,7 @@ name: CI/CD
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
|
||||
41
.github/workflows/docs.yaml
vendored
41
.github/workflows/docs.yaml
vendored
@@ -5,31 +5,40 @@ on:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'docs/**' # This will only trigger the workflow when files in docs directory change
|
||||
- 'docs/**'
|
||||
permissions:
|
||||
contents: write
|
||||
jobs:
|
||||
build_docs:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./docs
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Configure Git Credentials
|
||||
run: |
|
||||
git config user.name github-actions[bot]
|
||||
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.x
|
||||
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
key: mkdocs-material-${{ env.cache_id }}
|
||||
path: .cache
|
||||
restore-keys: |
|
||||
mkdocs-material-
|
||||
|
||||
- run: pip install mkdocs-material
|
||||
- run: mkdocs gh-deploy --force
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: '9.4.0'
|
||||
run_install: false
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20.15.1'
|
||||
cache: pnpm
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install --filter upage-docs...
|
||||
|
||||
- name: Build docs website
|
||||
run: pnpm run docs:build
|
||||
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
publish_dir: ./docs/build
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -52,5 +52,4 @@ mock
|
||||
|
||||
# storage
|
||||
/public/uploads
|
||||
|
||||
/data/
|
||||
|
||||
@@ -32,10 +32,14 @@ RUN pnpm prune --prod --ignore-scripts
|
||||
FROM node:20.18.0-alpine AS runtime
|
||||
WORKDIR /app
|
||||
|
||||
ENV OPERATING_ENV=production
|
||||
ENV NODE_ENV=production
|
||||
ENV LOGTO_ENABLE=false
|
||||
ENV PORT=3000
|
||||
ENV HOST=0.0.0.0
|
||||
ENV USAGE_LOG_FILE=true
|
||||
ENV MAX_UPLOAD_SIZE_MB=5
|
||||
ENV LOG_LEVEL=debug
|
||||
|
||||
# Use pnpm
|
||||
RUN corepack enable && corepack prepare pnpm@9.4.0 --activate
|
||||
|
||||
34
README.md
34
README.md
@@ -5,11 +5,21 @@
|
||||
<a href="https://github.com/halo-dev/upage/releases"><img alt="GitHub release" src="https://img.shields.io/github/release/halo-dev/upage.svg?style=flat-square&include_prereleases" /></a>
|
||||
<a href="https://github.com/halo-dev/upage/commits"><img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/halo-dev/upage.svg?style=flat-square" /></a>
|
||||
<a href="https://github.com/halo-dev/upage/actions"><img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/halo-dev/upage/halo.yaml?branch=main&style=flat-square" /></a>
|
||||
<a href="https://halo-dev.github.io/upage/"><img alt="Documentation" src="https://img.shields.io/badge/docs-latest-blue?style=flat-square" /></a>
|
||||
</p>
|
||||
|
||||
------------------------------
|
||||
|
||||
UPage 是一款基于大模型的可视化网页构建平台,支持多种 AI 提供商集成,基于自然语言快速实现定制化网页。
|
||||
UPage 是一款基于大模型的可视化网页构建平台,支持多种 AI 提供商集成,基于自然语言快速实现定制化网页。UPage 优势在于:
|
||||
|
||||
- **基于 LLM 的页面生成**:通过自然语言描述生成完整的网页
|
||||
- **多种 LLM 提供商支持**:兼容 OpenAI、Anthropic Claude、Google Gemini 等多种 LLM 模型
|
||||
- **可视化编辑器**:简洁直观的可视化编辑器界面,实时预览
|
||||
- **多页面生成**:支持同时生成多个页面
|
||||
- **代码导出**:生成标准的 HTML/CSS/JS 代码,方便集成到现有项目
|
||||
- **响应式设计**:自动适应不同屏幕尺寸
|
||||
- **部署集成**:支持一键部署到常见托管平台
|
||||
|
||||
|
||||
------------------------------
|
||||
|
||||
@@ -34,7 +44,7 @@ docker run -d \
|
||||
-v ./data:/app/data \
|
||||
-v ./logs:/app/logs \
|
||||
-v ./storage:/app/storage \
|
||||
ghcr.io/halo-dev/upage
|
||||
halohub/upage:latest
|
||||
```
|
||||
|
||||
其中参数说明如下:
|
||||
@@ -48,3 +58,23 @@ docker run -d \
|
||||
- `-v ./storage:/app/storage`:挂载存储目录
|
||||
|
||||
访问 `http://localhost:3000` 即可访问 UPage 的界面。
|
||||
|
||||
## 飞致云旗下的其他明星项目
|
||||
|
||||
- [Halo](https://github.com/halo-dev/halo) - 强大易用的开源建站工具
|
||||
- [JumpServer](https://github.com/jumpserver/jumpserver) - 广受欢迎的开源堡垒机
|
||||
- [DataEase](https://github.com/dataease/dataease) - 人人可用的开源 BI 工具
|
||||
- [MaxKB](https://github.com/maxkb/maxkb) - 强大易用的企业级智能体平台
|
||||
- [1Panel](https://github.com/1Panel-dev/1Panel) - 现代化、开源的 Linux 服务器运维管理面板
|
||||
- [Cordys CRM](https://github.com/cordys/cordys-crm) - 新一代的开源 AI CRM 系统
|
||||
- [MeterSphere](https://github.com/metersphere/metersphere) - 新一代的开源持续测试工具
|
||||
|
||||
## 许可证
|
||||
|
||||
本仓库遵循 [FIT2CLOUD Open Source License](https://github.com/halo-dev/upage/blob/main/LICENSE.txt) 开源协议,该许可证本质上是 GPLv3,但有一些额外的限制。
|
||||
|
||||
你可以基于 UPage 的源代码进行二次开发,但是需要遵守以下规定:
|
||||
|
||||
不能替换和修改 UPage 的 Logo 和版权信息;
|
||||
二次开发后的衍生作品必须遵守 GPL V3 的开源义务。
|
||||
如需商业授权,请联系 support@fit2cloud.com 。
|
||||
|
||||
@@ -58,9 +58,10 @@ export default class TogetherProvider extends BaseProvider {
|
||||
getModelInstance(options: { model: string; providerSettings?: Record<string, IProviderSetting> }): LanguageModel {
|
||||
const { model, providerSettings } = options;
|
||||
|
||||
const { baseUrl, apiKey } = this.getProviderBaseUrlAndKey(providerSettings?.[this.name]);
|
||||
const { baseUrl: fetchBaseUrl, apiKey } = this.getProviderBaseUrlAndKey(providerSettings?.[this.name]);
|
||||
const baseUrl = fetchBaseUrl || 'https://api.together.xyz/v1';
|
||||
|
||||
if (!baseUrl || !apiKey) {
|
||||
if (!apiKey) {
|
||||
throw new Error(`Missing configuration for ${this.name} provider`);
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ export const gitInfoLoader: LoaderFunction = async ({
|
||||
|
||||
if (action === 'getUser' || action === 'getRepos' || action === 'getOrgs' || action === 'getActivity') {
|
||||
// Use server-side token instead of client-side token
|
||||
const serverGithubToken = process.env.GITHUB_ACCESS_TOKEN || context.env?.GITHUB_ACCESS_TOKEN;
|
||||
const serverGithubToken = context.env?.GITHUB_ACCESS_TOKEN;
|
||||
const cookieToken = request.headers
|
||||
.get('Cookie')
|
||||
?.split(';')
|
||||
|
||||
@@ -10,7 +10,7 @@ services:
|
||||
- NODE_ENV=${NODE_ENV:-production}
|
||||
- LOG_LEVEL=${LOG_LEVEL:-debug}
|
||||
- DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX:-32768}
|
||||
- LLM_PROVIDER=${LLM_DEFAULT_PROVIDER}
|
||||
- LLM_PROVIDER=${LLM_PROVIDER}
|
||||
- PROVIDER_BASE_URL=${PROVIDER_BASE_URL}
|
||||
- PROVIDER_API_KEY=${PROVIDER_API_KEY}
|
||||
- LLM_DEFAULT_MODEL=${LLM_DEFAULT_MODEL}
|
||||
|
||||
@@ -10,7 +10,7 @@ services:
|
||||
- NODE_ENV=${NODE_ENV:-production}
|
||||
- LOG_LEVEL=${LOG_LEVEL:-debug}
|
||||
- DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX:-32768}
|
||||
- LLM_PROVIDER=${LLM_DEFAULT_PROVIDER}
|
||||
- LLM_PROVIDER=${LLM_PROVIDER}
|
||||
- PROVIDER_BASE_URL=${PROVIDER_BASE_URL}
|
||||
- PROVIDER_API_KEY=${PROVIDER_API_KEY}
|
||||
- LLM_DEFAULT_MODEL=${LLM_DEFAULT_MODEL}
|
||||
|
||||
20
docs/.gitignore
vendored
Normal file
20
docs/.gitignore
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
# Dependencies
|
||||
/node_modules
|
||||
|
||||
# Production
|
||||
/build
|
||||
|
||||
# Generated files
|
||||
.docusaurus
|
||||
.cache-loader
|
||||
|
||||
# Misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
64
docs/README.md
Normal file
64
docs/README.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# UPage 文档
|
||||
|
||||
这是 UPage 的官方文档网站,基于 [Docusaurus 3](https://docusaurus.io/) 构建。
|
||||
|
||||
## 本地开发
|
||||
|
||||
```bash
|
||||
# 安装依赖
|
||||
pnpm install
|
||||
|
||||
# 启动本地开发服务器
|
||||
pnpm start
|
||||
```
|
||||
|
||||
此命令会启动本地开发服务器并打开浏览器窗口。大多数更改都会实时反映,无需重新启动服务器。
|
||||
|
||||
## 构建
|
||||
|
||||
```bash
|
||||
# 构建静态网站
|
||||
pnpm run build
|
||||
```
|
||||
|
||||
此命令会在 `build` 目录中生成静态内容,可以使用任何静态内容托管服务进行部署。
|
||||
|
||||
## 部署
|
||||
|
||||
使用 GitHub Actions 自动部署到 GitHub Pages。每当 `docs` 目录中的文件发生变更并推送到 `main` 分支时,会自动触发部署流程。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
docs/
|
||||
├── content/ # 文档 Markdown 文件
|
||||
│ ├── index.md # 首页
|
||||
│ ├── quick-start.md # 快速开始
|
||||
│ ├── deployment/ # 部署指南
|
||||
│ ├── user-guide/ # 用户指南
|
||||
│ └── ...
|
||||
├── src/ # 源代码
|
||||
│ ├── css/ # CSS 文件
|
||||
│ └── pages/ # 自定义页面
|
||||
├── static/ # 静态文件
|
||||
│ └── img/ # 图片
|
||||
├── docusaurus.config.js # Docusaurus 配置
|
||||
├── sidebars.js # 侧边栏配置
|
||||
└── package.json # 项目依赖
|
||||
```
|
||||
|
||||
## 添加新文档
|
||||
|
||||
1. 在 `docs` 目录中创建新的 Markdown 文件
|
||||
2. 添加前置元数据:
|
||||
|
||||
```md
|
||||
---
|
||||
id: document-id
|
||||
title: 文档标题
|
||||
---
|
||||
|
||||
# 文档内容
|
||||
```
|
||||
|
||||
3. 更新 `sidebars.js` 文件,将新文档添加到侧边栏中
|
||||
22
docs/content/404.md
Normal file
22
docs/content/404.md
Normal file
@@ -0,0 +1,22 @@
|
||||
---
|
||||
id: 404-page
|
||||
title: 页面未找到
|
||||
---
|
||||
|
||||
# 页面未找到
|
||||
|
||||
很抱歉,您访问的页面不存在。
|
||||
|
||||
## 可能的原因
|
||||
|
||||
- 链接已过期或被移除
|
||||
- URL 输入错误
|
||||
- 页面正在建设中
|
||||
|
||||
## 您可以尝试
|
||||
|
||||
- [返回首页](/)
|
||||
- 使用顶部的搜索功能查找相关内容
|
||||
- 查看[文档目录](/)浏览所有可用文档
|
||||
|
||||
如果您认为这是一个错误,请[提交问题](https://github.com/halo-dev/upage/issues)告诉我们。
|
||||
378
docs/content/configuration.md
Normal file
378
docs/content/configuration.md
Normal file
@@ -0,0 +1,378 @@
|
||||
---
|
||||
id: configuration
|
||||
title: 配置参考
|
||||
---
|
||||
|
||||
# 配置参考
|
||||
|
||||
本文档提供了 UPage 的完整配置参考,包括基础配置、AI 提供商配置、认证配置,帮助您根据自己的需求定制和优化 UPage。
|
||||
|
||||
UPage 使用环境变量进行配置。您可以通过以下方式设置环境变量:
|
||||
|
||||
- 在 Docker 运行命令中使用 `-e` 参数
|
||||
- 在 Docker Compose 文件中使用 `environment` 部分
|
||||
- 在源码部署中创建 `.env` 文件
|
||||
|
||||
## 基础配置
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `PORT` | 服务监听端口 | `3000` | 否 |
|
||||
| `NODE_ENV` | Node.js 环境 | `production` | 否 |
|
||||
| `OPERATING_ENV` | 运行环境 | `production` | 否 |
|
||||
| `LOG_LEVEL` | 日志级别(debug, info, warn, error) | `info` | 否 |
|
||||
| `USAGE_LOG_FILE` | 是否开启文件日志 | `true` | 否 |
|
||||
| `MAX_UPLOAD_SIZE_MB` | 附件上传的最大大小 (MB) | `5` | 否 |
|
||||
| `STORAGE_DIR` | 资源文件存储位置 | `/app/storage` | 否 |
|
||||
|
||||
## AI 提供商配置
|
||||
|
||||
UPage 支持多种 AI 提供商,您需要配置一个 AI 提供商才能使用页面生成功能。
|
||||
|
||||
:::tip 配置参数颜色说明
|
||||
为了帮助您区分不同提供商所需的配置参数,我们使用了不同的颜色标记:
|
||||
- <span className="base-url-highlight">API 基础 URL</span>: 用蓝色标记,通常是服务的访问地址
|
||||
- <span className="api-key-highlight">API 密钥</span>: 用红色标记,通常是敏感信息,需要从提供商处获取
|
||||
:::
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | LLM 提供商,按照下述配置项配置一个 | - | 是 |
|
||||
| <span className="base-url-highlight">`PROVIDER_BASE_URL`</span> | LLM 提供商的 API 基础 URL,部分提供商需要设置此项,例如 OpenAILike, Ollama, LMStudio | - | 否,部分提供商不需要设置此项 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | LLM 提供商的 API 密钥,大部分提供商需要设置此项 | - | 否,部分提供商不需要设置此项 |
|
||||
| `LLM_DEFAULT_MODEL` | 生成页面所使用的模型 | - | 是 |
|
||||
| `LLM_MINOR_MODEL` | 辅助页面生成所使用的模型 | - | 是 |
|
||||
|
||||
以下是常见的 AI 提供商配置:
|
||||
|
||||
### Amazon Bedrock
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | Amazon Bedrock 提供商名称 | AmazonBedrock | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | Amazon Bedrock 配置 | - | 是(如果使用 Amazon Bedrock) |
|
||||
|
||||
:::info
|
||||
在 Amazon Bedrock 提供商中,`PROVIDER_API_KEY` 应为 JSON 格式。例如:
|
||||
```json
|
||||
{
|
||||
// Bedrock 可用的 AWS 区域
|
||||
"region": "us-east-1",
|
||||
// 你的 AWS 访问密钥 ID
|
||||
"accessKeyId": "your-access-key-id",
|
||||
// 你的 AWS 访问密钥令牌
|
||||
"secretAccessKey": "your-secret-access-key",
|
||||
// AWS 会话令牌(可选),如果使用 IAM 角色或临时凭据,则为临时会话令牌
|
||||
"sessionToken": "your-session-token"
|
||||
}
|
||||
```
|
||||
前往 [Amazon Bedrock](https://console.aws.amazon.com/iam/home) 中获取配置。
|
||||
:::
|
||||
|
||||
### Anthropic Claude
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | Anthropic 提供商 | Anthropic | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | Anthropic API 密钥 | - | 是(如果使用 Anthropic) |
|
||||
|
||||
:::info
|
||||
前往 [Anthropic](https://console.anthropic.com/settings/keys) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### Cohere
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | Cohere 提供商名称 | Cohere | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | Cohere API 密钥 | - | 是(如果使用 Cohere) |
|
||||
|
||||
:::info
|
||||
前往 [Cohere](https://dashboard.cohere.com/api-keys) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### DeepSeek
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | DeepSeek 提供商名称 | Deepseek | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | DeepSeek API 密钥 | - | 是(如果使用 DeepSeek) |
|
||||
|
||||
:::info
|
||||
前往 [DeepSeek](https://platform.deepseek.com/api_keys) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### Github
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | Github 提供商名称 | Github | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | Github API 密钥 | - | 是(如果使用 Github) |
|
||||
|
||||
:::info
|
||||
前往 [Github](https://github.com/settings/personal-access-tokens) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### Google
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | Google 提供商名称 | Google | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | Google 生成式 AI API 密钥 | - | 是(如果使用 Google) |
|
||||
|
||||
:::info
|
||||
前往 [Google](https://console.cloud.google.com/apis/credentials) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### Groq
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | Groq 提供商名称 | Groq | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | Groq API 密钥 | - | 是(如果使用 Groq) |
|
||||
|
||||
:::info
|
||||
前往 [Groq](https://console.groq.com/keys) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### HuggingFace
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | HuggingFace 提供商名称 | HuggingFace | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | HuggingFace API 密钥 | - | 是(如果使用 HuggingFace) |
|
||||
|
||||
:::info
|
||||
前往 [HuggingFace](https://huggingface.co/settings/tokens) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### Hyperbolic
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | Hyperbolic 提供商名称 | Hyperbolic | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | Hyperbolic API 密钥 | - | 是(如果使用 Hyperbolic) |
|
||||
|
||||
:::info
|
||||
前往 [Hyperbolic](https://hyperbolic.ai/dashboard/api-keys) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### LMStudio
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | LMStudio 提供商名称 | LMStudio | 是 |
|
||||
| <span className="base-url-highlight">`PROVIDER_BASE_URL`</span> | LMStudio API URL | `http://127.0.0.1:1234` | 是(如果使用 LMStudio) |
|
||||
|
||||
:::warning
|
||||
由于可能存在的 IPV6 的问题,所以不要使用 http://localhost:1234 而应该使用类似于 http://127.0.0.1:1234 的地址
|
||||
:::
|
||||
|
||||
### Mistral
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | Mistral 提供商名称 | Mistral | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | Mistral API 密钥 | - | 是(如果使用 Mistral) |
|
||||
|
||||
:::info
|
||||
前往 [Mistral](https://console.mistral.ai/api-keys/) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### Ollama
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | Ollama 提供商名称 | Ollama | 是 |
|
||||
| <span className="base-url-highlight">`PROVIDER_BASE_URL`</span> | Ollama API URL | `http://127.0.0.1:11434` | 是(如果使用 Ollama) |
|
||||
|
||||
:::warning
|
||||
由于可能存在的 IPV6 的问题,所以不要使用 http://localhost:11434 而应该使用类似于 http://127.0.0.1:11434 的地址
|
||||
:::
|
||||
|
||||
### OpenRouter
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | OpenRouter 提供商名称 | OpenRouter | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | OpenRouter API 密钥 | - | 是(如果使用 OpenRouter) |
|
||||
|
||||
:::info
|
||||
前往 [OpenRouter](https://openrouter.ai/settings/keys) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### 兼容 OpenAI 接口的服务
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | OpenAILike 提供商名称 | OpenAILike | 是 |
|
||||
| <span className="base-url-highlight">`PROVIDER_BASE_URL`</span> | API 基础 URL | - | 是(如果使用 OpenAILike) |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | API 密钥 | - | 是(如果使用 OpenAILike) |
|
||||
|
||||
### OpenAI
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | OpenAI 提供商名称 | OpenAI | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | OpenAI API 密钥 | - | 是(如果使用 OpenAI) |
|
||||
|
||||
:::info
|
||||
前往 [OpenAI](https://help.openai.com/en/articles/4936850-where-do-i-find-my-openai-api-key) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### Perplexity
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | Perplexity 提供商名称 | Perplexity | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | Perplexity API 密钥 | - | 是(如果使用 Perplexity) |
|
||||
|
||||
:::info
|
||||
前往 [Perplexity](https://www.perplexity.ai/settings/api) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### Together
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | Together 提供商名称 | Together | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | Together API 密钥 | - | 是(如果使用 Together) |
|
||||
|
||||
:::info
|
||||
前往 [Together](https://api.together.xyz/settings/api-keys) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### xAI
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | xAI 提供商名称 | xAI | 是 |
|
||||
| <span className="api-key-highlight">`PROVIDER_API_KEY`</span> | xAI API 密钥 | - | 是(如果使用 xAI) |
|
||||
|
||||
:::info
|
||||
前往 [xAI](https://x.ai/api) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
## AI 工具配置
|
||||
|
||||
UPage 支持集成部分 AI 工具调用,用于为 UPage 提供服务,您可以根据需要配置。
|
||||
|
||||
### Serper(网络搜索工具)
|
||||
|
||||
UPage 集成了 [Serper](https://serper.dev) 的搜索服务,您可以通过配置 `SERPER_API_KEY` 来使用 Serper 的搜索服务。
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `SERPER_API_KEY` | Serper API 密钥 | - | 是(如果使用 Serper) |
|
||||
|
||||
:::info
|
||||
前往 [Serper](https://serper.dev/api-keys) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
### Weather(天气工具)
|
||||
|
||||
UPage 集成了 [Weather](https://weatherapi.com) 的天气服务,您可以通过配置 `WEATHER_API_KEY` 来使用 Weather 的天气服务。
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `WEATHER_API_KEY` | Weather API 密钥 | - | 是(如果使用 Weather) |
|
||||
|
||||
:::info
|
||||
前往 [Weather](https://www.weatherapi.com/my/) 获取 API 密钥。
|
||||
:::
|
||||
|
||||
## 认证配置
|
||||
|
||||
### Logto 认证
|
||||
|
||||
UPage 默认仅支持单一的匿名用户访问,您可以通过集成 Logto 后配置 `LOGTO_ENABLE` 来启用 Logto 认证,支持多用户登录。
|
||||
|
||||
| 环境变量 | 描述 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LOGTO_ENABLE` | 是否启用 Logto 认证 | `false` | 是 |
|
||||
| `LOGTO_ENDPOINT` | Logto 服务的 URL | - | 是(如果使用 Logto) |
|
||||
| `LOGTO_APP_ID` | Logto 应用程序 ID | - | 是(如果使用 Logto) |
|
||||
| `LOGTO_APP_SECRET` | Logto 应用程序密钥 | - | 是(如果使用 Logto) |
|
||||
| `LOGTO_COOKIE_SECRET` | 用于加密 cookie 的密钥 | - | 是(如果使用 Logto) |
|
||||
| `LOGTO_BASE_URL` | UPage 地址 | - | 是(如果使用 Logto) |
|
||||
|
||||
:::info
|
||||
Logto 集成请参阅 [Logto 认证集成](./deployment/logto)文档。
|
||||
:::
|
||||
|
||||
## 配置示例
|
||||
|
||||
以下内容以使用 Docker Compose 作为示例,用于展示 UPage 的完整配置。
|
||||
|
||||
```yaml
|
||||
version: "3.9"
|
||||
services:
|
||||
upage:
|
||||
image: halo-dev/upage:latest
|
||||
container_name: upage
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
# 基础配置
|
||||
- PORT=3000
|
||||
- NODE_ENV=production
|
||||
- OPERATING_ENV=production
|
||||
- LOG_LEVEL=info
|
||||
- USAGE_LOG_FILE=true
|
||||
- MAX_UPLOAD_SIZE_MB=10
|
||||
- STORAGE_DIR=/app/storage
|
||||
|
||||
# 使用 DeepSeek 提供商配置
|
||||
- LLM_PROVIDER=DeepSeek
|
||||
- PROVIDER_API_KEY=your-deepseek-api-key
|
||||
- LLM_DEFAULT_MODEL=deepseek-chat
|
||||
- LLM_MINOR_MODEL=deepseek-chat
|
||||
|
||||
# AI 工具配置
|
||||
- SERPER_API_KEY=your-serper-api-key
|
||||
- WEATHER_API_KEY=your-weather-api-key
|
||||
|
||||
# Logto 认证配置
|
||||
- LOGTO_ENABLE=true
|
||||
- LOGTO_ENDPOINT=http://logto:3001
|
||||
- LOGTO_APP_ID=your-app-id
|
||||
- LOGTO_APP_SECRET=your-app-secret
|
||||
- LOGTO_COOKIE_SECRET=your-cookie-secret
|
||||
- LOGTO_BASE_URL=http://localhost:3000
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
- ./logs:/app/logs
|
||||
- ./storage:/app/storage
|
||||
```
|
||||
|
||||
如果你要切换使用其他 AI 提供商,则只需要修改 `LLM_PROVIDER` 和相应的 API 密钥、Model 即可,例如:
|
||||
|
||||
```yaml
|
||||
version: "3.9"
|
||||
services:
|
||||
upage:
|
||||
image: halo-dev/upage:latest
|
||||
container_name: upage
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
# 使用 OpenAI 兼容接口的提供商配置
|
||||
- LLM_PROVIDER=OpenAILike
|
||||
- PROVIDER_BASE_URL=your-openai-api-base-url
|
||||
- PROVIDER_API_KEY=your-openai-api-key
|
||||
- LLM_DEFAULT_MODEL=gpt-4.1
|
||||
- LLM_MINOR_MODEL=gpt-4.1-mini
|
||||
|
||||
# ...其他配置
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
- ./logs:/app/logs
|
||||
- ./storage:/app/storage
|
||||
```
|
||||
|
||||
## 下一步
|
||||
|
||||
- 阅读[用户指南](./user-guide/basics)学习如何使用 UPage 创建网页
|
||||
- 阅读[贡献指南](./contributing)了解如何贡献 UPage
|
||||
47
docs/content/contributing/code-of-conduct.md
Normal file
47
docs/content/contributing/code-of-conduct.md
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
id: code-of-conduct
|
||||
title: 行为准则
|
||||
---
|
||||
|
||||
# 行为准则
|
||||
|
||||
UPage 项目致力于为所有贡献者和参与者提供一个友好、安全和包容的环境。我们希望每个人都能够在没有骚扰和歧视的情况下参与项目。
|
||||
|
||||
## 我们的标准
|
||||
|
||||
参与 UPage 项目的所有贡献者都应遵循以下行为准则:
|
||||
|
||||
- **尊重所有参与者**,无论其背景、经验或观点
|
||||
- **接受建设性的批评和反馈**,并以专业和尊重的方式回应
|
||||
- **专注于对社区最有利的事情**,考虑项目和用户的长期利益
|
||||
- **展现同理心和善意**,理解他人的观点和立场
|
||||
|
||||
## 不可接受的行为
|
||||
|
||||
以下行为被视为不可接受:
|
||||
|
||||
- 使用性暗示的语言或图像
|
||||
- 人身攻击、侮辱或贬低性评论
|
||||
- 公开或私下的骚扰
|
||||
- 未经明确许可发布他人的私人信息
|
||||
- 任何其他可能被合理认为不适当或冒犯的行为
|
||||
|
||||
## 责任
|
||||
|
||||
项目维护者有责任明确行为标准,并对任何不可接受行为采取适当和公正的纠正措施。
|
||||
|
||||
项目维护者有权和责任删除、编辑或拒绝与本行为准则不符的评论、提交、代码、问题和其他贡献,并在适当时暂时或永久禁止任何贡献者参与项目。
|
||||
|
||||
## 范围
|
||||
|
||||
本行为准则适用于所有项目空间,包括但不限于 GitHub 仓库、问题跟踪器、讨论区、社交媒体和公共活动。它也适用于个人在代表项目或其社区时的行为。
|
||||
|
||||
## 反馈
|
||||
|
||||
如果您遇到滥用、骚扰或其他不可接受的行为,请通过 [GitHub Issues](https://github.com/halo-dev/upage/issues) 或直接联系项目维护者报告。
|
||||
|
||||
所有投诉将被审查和调查,并将导致被认为必要和适当的回应。项目维护者有义务对报告事件的人保密。
|
||||
|
||||
## 参考
|
||||
|
||||
本行为准则改编自 [Contributor Covenant](https://www.contributor-covenant.org),版本 2.0,可在 [https://www.contributor-covenant.org/version/2/0/code_of_conduct.html](https://www.contributor-covenant.org/version/2/0/code_of_conduct.html) 查阅。
|
||||
156
docs/content/contributing/code-standards.md
Normal file
156
docs/content/contributing/code-standards.md
Normal file
@@ -0,0 +1,156 @@
|
||||
---
|
||||
id: code-standards
|
||||
title: 代码规范
|
||||
---
|
||||
|
||||
# 代码规范
|
||||
|
||||
UPage 项目遵循严格的代码规范和最佳实践,以确保代码质量和一致性。本文档概述了这些规范,所有贡献者在提交代码前应确保遵循这些规范。
|
||||
|
||||
## JavaScript/TypeScript 规范
|
||||
|
||||
UPage 使用 [Biome](https://biomejs.dev/) 进行代码格式化和 linting。Biome 是一个快速的代码格式化工具和 linter,可以帮助我们保持代码风格的一致性。
|
||||
|
||||
### 代码检查
|
||||
|
||||
在提交代码前,请确保您的代码符合项目的代码规范:
|
||||
|
||||
```bash
|
||||
pnpm check
|
||||
```
|
||||
|
||||
### 自动修复
|
||||
|
||||
您也可以使用以下命令自动修复格式问题:
|
||||
|
||||
```bash
|
||||
pnpm check --write
|
||||
```
|
||||
|
||||
### 主要规范
|
||||
|
||||
- **缩进**: 使用 2 个空格
|
||||
- **分号**: 必须使用分号
|
||||
- **引号**: 使用单引号
|
||||
- **命名约定**:
|
||||
- 变量和函数使用 camelCase
|
||||
- 类和接口使用 PascalCase
|
||||
- 常量使用 UPPER_SNAKE_CASE
|
||||
- **类型注解**: 尽可能使用类型注解提高代码可读性和类型安全性
|
||||
- **注释**: 对复杂逻辑和公共 API 添加适当的注释
|
||||
|
||||
## Git 提交规范
|
||||
|
||||
我们使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范来格式化 Git 提交信息。提交信息应遵循以下格式:
|
||||
|
||||
```
|
||||
<type>(<scope>): <description>
|
||||
|
||||
[optional body]
|
||||
|
||||
[optional footer(s)]
|
||||
```
|
||||
|
||||
### 类型 (Type)
|
||||
|
||||
提交类型必须是以下之一:
|
||||
|
||||
- `feat`: 新功能
|
||||
- `fix`: 修复 bug
|
||||
- `docs`: 文档更新
|
||||
- `style`: 代码风格更改(不影响代码功能)
|
||||
- `refactor`: 代码重构(既不是新功能,也不是修复 bug)
|
||||
- `perf`: 性能优化
|
||||
- `test`: 添加或修改测试
|
||||
- `chore`: 构建过程或辅助工具的变动
|
||||
- `ci`: CI 配置文件和脚本的更改
|
||||
- `revert`: 回滚之前的提交
|
||||
|
||||
### 范围 (Scope)
|
||||
|
||||
范围是可选的,用于指定更改的范围(例如组件或文件名)。
|
||||
|
||||
### 描述 (Description)
|
||||
|
||||
描述是对更改的简短摘要:
|
||||
|
||||
- 使用现在时态("change",而不是"changed"或"changes")
|
||||
- 不要首字母大写
|
||||
- 不要以句号结尾
|
||||
|
||||
### 示例
|
||||
|
||||
```
|
||||
feat(editor): 添加拖拽调整组件大小功能
|
||||
|
||||
添加了一个新的拖拽句柄,允许用户直接调整组件的大小。
|
||||
同时优化了调整过程中的性能。
|
||||
|
||||
Closes #123
|
||||
```
|
||||
|
||||
```
|
||||
fix: 修复用户认证失败问题
|
||||
|
||||
修复了当用户凭证包含特殊字符时认证失败的问题。
|
||||
|
||||
Fixes #456
|
||||
```
|
||||
|
||||
## CSS/SCSS 规范
|
||||
|
||||
UPage 使用 SCSS 和 CSS Modules 来组织样式代码。
|
||||
|
||||
### 命名约定
|
||||
|
||||
- 使用 kebab-case 命名 CSS 类和 ID
|
||||
- 使用有意义的名称,避免过于简短或抽象的名称
|
||||
- 使用 BEM(Block Element Modifier)命名方法论
|
||||
|
||||
### 组织结构
|
||||
|
||||
- 将全局样式放在 `app/styles` 目录下
|
||||
- 将组件特定样式放在组件同级目录下的 `.scss` 或 `.module.scss` 文件中
|
||||
|
||||
## 可访问性标准
|
||||
|
||||
UPage 致力于创建可访问的 Web 应用程序。所有贡献的代码应遵循 [WCAG 2.1 AA](https://www.w3.org/WAI/WCAG21/quickref/) 标准。
|
||||
|
||||
- 确保适当的颜色对比度
|
||||
- 提供替代文本和 ARIA 标签
|
||||
- 确保键盘导航功能
|
||||
- 支持屏幕阅读器
|
||||
|
||||
## 测试规范
|
||||
|
||||
所有新功能和 bug 修复应包含适当的测试:
|
||||
|
||||
- **单元测试**: 测试单个函数和组件
|
||||
- **集成测试**: 测试多个组件或功能的交互
|
||||
- **端到端测试**: 测试完整的用户流程
|
||||
|
||||
测试应该:
|
||||
|
||||
- 覆盖正常和边缘情况
|
||||
- 清晰描述测试的目的
|
||||
- 保持独立性,不依赖于其他测试的状态
|
||||
|
||||
## 性能考虑
|
||||
|
||||
贡献的代码应考虑性能影响:
|
||||
|
||||
- 避免不必要的重新渲染
|
||||
- 优化大型列表和表格
|
||||
- 懒加载大型资源
|
||||
- 减少网络请求
|
||||
- 优化打包大小
|
||||
|
||||
## 安全最佳实践
|
||||
|
||||
所有代码应遵循安全最佳实践:
|
||||
|
||||
- 防止 XSS 攻击
|
||||
- 避免 SQL 注入
|
||||
- 正确处理用户输入
|
||||
- 保护敏感数据
|
||||
- 实施适当的访问控制
|
||||
161
docs/content/contributing/development-setup.md
Normal file
161
docs/content/contributing/development-setup.md
Normal file
@@ -0,0 +1,161 @@
|
||||
---
|
||||
id: development-setup
|
||||
title: 开发环境设置
|
||||
---
|
||||
|
||||
# 开发环境设置
|
||||
|
||||
本指南将帮助您设置 UPage 的本地开发环境,以便您可以开始贡献代码。
|
||||
|
||||
## 前置条件
|
||||
|
||||
开始开发 UPage 前,请确保您的系统满足以下要求:
|
||||
|
||||
- **Node.js**: 18.18.0 或更高版本
|
||||
- **pnpm**: 9.4.0 或更高版本
|
||||
- **Git**: 最新版本
|
||||
|
||||
### 安装 Node.js
|
||||
|
||||
您可以从 [Node.js 官网](https://nodejs.org/) 下载并安装 Node.js,或使用版本管理工具如 [nvm](https://github.com/nvm-sh/nvm):
|
||||
|
||||
```bash
|
||||
# 使用 nvm 安装 Node.js
|
||||
nvm install 18.18.0
|
||||
nvm use 18.18.0
|
||||
```
|
||||
|
||||
### 安装 pnpm
|
||||
|
||||
安装 pnpm 的最简单方法是通过 npm:
|
||||
|
||||
```bash
|
||||
npm install -g pnpm@9.4.0
|
||||
```
|
||||
|
||||
或者按照 [pnpm 官方文档](https://pnpm.io/installation) 的说明进行安装。
|
||||
|
||||
## 克隆仓库
|
||||
|
||||
首先,[fork UPage 仓库](https://github.com/halo-dev/upage/fork)到您的 GitHub 账户,然后将其克隆到本地:
|
||||
|
||||
```bash
|
||||
# 克隆您 fork 的仓库
|
||||
git clone https://github.com/YOUR-USERNAME/upage.git
|
||||
|
||||
# 进入项目目录
|
||||
cd upage
|
||||
|
||||
# 添加上游仓库
|
||||
git remote add upstream https://github.com/halo-dev/upage.git
|
||||
```
|
||||
|
||||
## 安装依赖
|
||||
|
||||
使用 pnpm 安装项目依赖:
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
```
|
||||
|
||||
## 生成 Prisma 客户端
|
||||
|
||||
UPage 使用 Prisma 作为数据库 ORM,因此需要生成 Prisma 客户端。
|
||||
|
||||
```bash
|
||||
pnpm setup
|
||||
```
|
||||
|
||||
## 配置环境变量
|
||||
|
||||
拷贝 `.env.example` 文件,创建 `.env` 文件:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
按照[配置参考](../configuration)的说明修改 `.env` 文件进行配置。
|
||||
|
||||
## 启用 Logto 认证(可选)
|
||||
|
||||
UPage 默认仅支持单一用户匿名访问,如果您想要开发用户认证功能,可以按照[Logto 认证集成](../deployment/logto)的说明配置 Logto 认证。
|
||||
|
||||
## 启动开发服务器
|
||||
|
||||
启动开发服务器,这将允许您在本地预览和测试您的更改:
|
||||
|
||||
```bash
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
此命令会启动开发服务器,您可以通过 `http://localhost:5173` 访问。
|
||||
|
||||
## 构建项目
|
||||
|
||||
要构建生产版本的项目,运行:
|
||||
|
||||
```bash
|
||||
pnpm build
|
||||
```
|
||||
|
||||
构建完成后,您可以通过以下命令预览生产版本:
|
||||
|
||||
```bash
|
||||
pnpm preview
|
||||
```
|
||||
|
||||
预生产版本项目运行在 `http://localhost:3000`。
|
||||
|
||||
## 运行测试
|
||||
|
||||
运行项目的测试套件:
|
||||
|
||||
```bash
|
||||
pnpm test
|
||||
```
|
||||
|
||||
## 文档开发
|
||||
|
||||
如果您想要修改或预览文档,可以使用以下命令:
|
||||
|
||||
```bash
|
||||
# 启动文档开发服务器
|
||||
pnpm docs:start
|
||||
|
||||
# 构建文档
|
||||
pnpm docs:build
|
||||
```
|
||||
|
||||
文档开发服务器默认在 `http://localhost:3000` 运行。
|
||||
|
||||
## 常见问题解决
|
||||
|
||||
### 依赖安装失败
|
||||
|
||||
如果您在安装依赖时遇到问题,可以尝试以下解决方案:
|
||||
|
||||
```bash
|
||||
# 清除 pnpm 缓存
|
||||
pnpm store prune
|
||||
|
||||
# 重新安装依赖
|
||||
pnpm install --force
|
||||
```
|
||||
|
||||
### 开发服务器启动失败
|
||||
|
||||
如果开发服务器无法启动,请检查:
|
||||
|
||||
1. 端口 5173 是否被其他应用占用
|
||||
2. Node.js 版本是否符合要求
|
||||
3. 是否所有依赖都已正确安装
|
||||
|
||||
您可以尝试使用不同的端口启动:
|
||||
|
||||
```bash
|
||||
pnpm dev --port 5174
|
||||
```
|
||||
|
||||
### 其他问题
|
||||
|
||||
如果您遇到其他问题,请查看项目的 [常见问题](../faq.md) 或在 [GitHub Issues](https://github.com/halo-dev/upage/issues) 中搜索相关问题。如果没有找到解决方案,请创建新的 issue。
|
||||
28
docs/content/contributing/index.md
Normal file
28
docs/content/contributing/index.md
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
id: contributing
|
||||
title: 贡献指南
|
||||
slug: /contributing
|
||||
---
|
||||
|
||||
# 贡献指南
|
||||
|
||||
感谢您对 UPage 项目的关注!我们非常欢迎各种形式的贡献,无论是功能开发、bug 修复、文档改进还是使用反馈。本指南将帮助您了解如何参与 UPage 的开发和贡献。
|
||||
|
||||
## 目录
|
||||
|
||||
- [行为准则](./code-of-conduct.md) - 参与 UPage 项目的行为准则
|
||||
- [贡献方式](./ways-to-contribute.md) - 如何为 UPage 项目做出贡献
|
||||
- [开发环境设置](./development-setup.md) - 如何设置本地开发环境
|
||||
- [代码规范](./code-standards.md) - 代码风格和提交规范
|
||||
- [工作流程](./workflow.md) - 分支策略、PR流程和版本发布
|
||||
|
||||
## 社区
|
||||
|
||||
加入 UPage 社区,与其他贡献者交流:
|
||||
|
||||
- [GitHub Discussions](https://github.com/halo-dev/upage/discussions)
|
||||
- [GitHub Issues](https://github.com/halo-dev/upage/issues)
|
||||
|
||||
## 许可证
|
||||
|
||||
UPage 采用 [基于 GPLv3 的补充协议许可证](https://github.com/halo-dev/upage/blob/main/LICENSE.txt)。通过贡献代码,您同意您的贡献将在相同的许可证下发布。
|
||||
91
docs/content/contributing/ways-to-contribute.md
Normal file
91
docs/content/contributing/ways-to-contribute.md
Normal file
@@ -0,0 +1,91 @@
|
||||
---
|
||||
id: ways-to-contribute
|
||||
title: 贡献方式
|
||||
---
|
||||
|
||||
# 贡献方式
|
||||
|
||||
您可以通过多种方式为 UPage 做出贡献,无论您是开发者、设计师、文档撰写者还是用户,都能找到适合您的贡献方式。
|
||||
|
||||
## 报告问题
|
||||
|
||||
如果您发现了 bug 或有功能建议,请在 [GitHub Issues](https://github.com/halo-dev/upage/issues) 中提出。提交问题时,请尽可能提供以下信息:
|
||||
|
||||
- 清晰的问题描述
|
||||
- 复现步骤
|
||||
- 预期行为与实际行为
|
||||
- 截图(如适用)
|
||||
- 环境信息(浏览器、操作系统、UPage 版本等)
|
||||
|
||||
## 提交代码
|
||||
|
||||
如果您想直接贡献代码,请遵循以下步骤:
|
||||
|
||||
1. [Fork](https://github.com/halo-dev/upage/fork) 项目仓库
|
||||
2. 创建您的功能分支 (`git checkout -b feature/amazing-feature`)
|
||||
3. 提交您的更改 (`git commit -m 'Add some amazing feature'`)
|
||||
4. 推送到分支 (`git push origin feature/amazing-feature`)
|
||||
5. 创建 Pull Request
|
||||
|
||||
### 代码贡献指南
|
||||
|
||||
- 确保您的代码符合项目的[代码规范](./code-standards.md)
|
||||
- 为新功能编写测试
|
||||
- 更新相关文档
|
||||
- 确保所有测试通过
|
||||
- 遵循[工作流程](./workflow.md)中的分支策略和 PR 流程
|
||||
|
||||
## 改进文档
|
||||
|
||||
文档对于任何项目都至关重要。您可以通过以下方式改进 UPage 的文档:
|
||||
|
||||
- 修复文档中的错误或不准确之处
|
||||
- 添加缺失的信息或示例
|
||||
- 改进文档的结构和可读性
|
||||
- 翻译文档到其他语言
|
||||
|
||||
### 文档贡献步骤
|
||||
|
||||
1. 在 `docs/content` 目录中找到相关的 Markdown 文件
|
||||
2. 进行必要的更改
|
||||
3. 在本地预览更改:`pnpm docs:start`
|
||||
4. 提交 Pull Request
|
||||
|
||||
## 设计贡献
|
||||
|
||||
如果您是设计师,您可以通过以下方式贡献:
|
||||
|
||||
- 改进用户界面设计
|
||||
- 创建图标和插图
|
||||
- 设计宣传材料
|
||||
- 提供用户体验建议
|
||||
|
||||
## 测试和反馈
|
||||
|
||||
即使您不是开发者,您也可以通过以下方式做出重要贡献:
|
||||
|
||||
- 测试新功能和版本
|
||||
- 提供详细的反馈
|
||||
- 报告使用过程中遇到的问题
|
||||
- 提出改进建议
|
||||
|
||||
## 分享和推广
|
||||
|
||||
您也可以通过以下方式支持 UPage:
|
||||
|
||||
- 在社交媒体上分享项目
|
||||
- 撰写关于 UPage 的博客文章或教程
|
||||
- 在相关论坛和社区中推荐 UPage
|
||||
- 为项目加星标(Star)
|
||||
|
||||
## 社区支持
|
||||
|
||||
帮助其他用户解决问题也是一种重要的贡献方式:
|
||||
|
||||
- 回答 [GitHub Discussions](https://github.com/halo-dev/upage/discussions) 中的问题
|
||||
- 帮助新用户入门
|
||||
- 分享您的使用经验和最佳实践
|
||||
|
||||
## 感谢您的贡献
|
||||
|
||||
无论您以何种方式支持和参与 UPage 项目,我们都由衷地感谢您的每一份贡献。正是因为有诸多像您这样的社区成员的支持和参与,UPage 才能不断成长和进步。每一个问题报告、每一行代码、每一份文档改进以及每一次分享都是宝贵的。
|
||||
143
docs/content/contributing/workflow.md
Normal file
143
docs/content/contributing/workflow.md
Normal file
@@ -0,0 +1,143 @@
|
||||
---
|
||||
id: workflow
|
||||
title: 工作流程
|
||||
---
|
||||
|
||||
# 工作流程
|
||||
|
||||
本文档描述了 UPage 项目的开发工作流程,包括分支策略、Pull Request 流程和版本发布流程。
|
||||
|
||||
## 分支策略
|
||||
|
||||
UPage 项目使用以下分支策略:
|
||||
|
||||
### 主要分支
|
||||
|
||||
- **`main`**: 主分支,包含最新的开发代码,用于集成功能和修复,同时也对应最新的发布版本
|
||||
|
||||
### 功能分支
|
||||
|
||||
开发新功能时,应从 `main` 分支创建功能分支:
|
||||
|
||||
- **`feature/*`**: 功能分支,用于开发新功能
|
||||
- 例如:`feature/drag-and-drop`、`feature/user-authentication`
|
||||
|
||||
### 修复分支
|
||||
|
||||
修复 bug 时,应从 `main` 分支创建修复分支:
|
||||
|
||||
- **`fix/*`**: 修复分支,用于修复 bug
|
||||
- 例如:`fix/login-error`、`fix/memory-leak`
|
||||
|
||||
### 发布分支
|
||||
|
||||
准备新版本发布时,从 `main` 分支创建发布分支:
|
||||
|
||||
- **`release/*`**: 发布分支,用于准备新版本发布
|
||||
- 例如:`release/v1.0.0`、`release/v1.1.0`
|
||||
|
||||
### 热修复分支
|
||||
|
||||
对已发布版本的紧急修复,从 `main` 分支创建热修复分支:
|
||||
|
||||
- **`hotfix/*`**: 热修复分支,用于对已发布版本的紧急修复
|
||||
- 例如:`hotfix/v1.0.1`、`hotfix/v1.1.2`
|
||||
|
||||
## 工作流程图
|
||||
|
||||
```
|
||||
main ─────┬───────────────┬─────────────────────────────────
|
||||
│ │ ↑ ↑
|
||||
↓ ↓ │ │
|
||||
feature feature/A feature/B │ │
|
||||
│ │
|
||||
fix fix/bug-1 fix/bug-2
|
||||
│ │ │
|
||||
│ │ │
|
||||
release └─────────────────────────────────┴───────────┘
|
||||
release/v1.0.0
|
||||
```
|
||||
|
||||
## Pull Request 流程
|
||||
|
||||
### 准备 Pull Request
|
||||
|
||||
1. 确保您的代码符合项目的[代码规范](./code-standards.md)
|
||||
2. 更新相关文档(如适用)
|
||||
3. 添加或更新测试(如适用)
|
||||
4. 确保所有测试通过
|
||||
5. 将您的分支与目标分支(通常是 `main`)同步
|
||||
|
||||
### 创建 Pull Request
|
||||
|
||||
1. 在 GitHub 上创建一个新的 Pull Request
|
||||
2. 选择正确的目标分支(通常是 `main`)
|
||||
3. 填写 Pull Request 模板,提供以下信息:
|
||||
- 清晰的标题,简要描述更改
|
||||
- 详细的描述,解释更改的目的和实现方式
|
||||
- 相关的 issue 链接(如适用)
|
||||
- 截图或视频(如适用)
|
||||
- 任何需要审核者特别注意的事项
|
||||
|
||||
### Pull Request 审核
|
||||
|
||||
1. 至少需要一个项目维护者的批准才能合并 PR
|
||||
2. 审核者可能会要求进行更改
|
||||
3. 根据反馈进行必要的更改
|
||||
4. 确保 CI 检查通过
|
||||
|
||||
### 合并 Pull Request
|
||||
|
||||
1. 一旦 PR 获得批准并且所有检查通过,它将被合并
|
||||
2. 通常使用 "Squash and merge" 策略,将所有提交合并为一个
|
||||
3. 合并后,相关的分支可以被删除
|
||||
|
||||
## 版本发布流程
|
||||
|
||||
UPage 遵循 [语义化版本控制](https://semver.org/) 规范。版本号格式为 `X.Y.Z`:
|
||||
|
||||
- **X**: 主版本号,当进行不兼容的 API 更改时递增
|
||||
- **Y**: 次版本号,当添加向后兼容的功能时递增
|
||||
- **Z**: 修订号,当进行向后兼容的 bug 修复时递增
|
||||
|
||||
### 发布准备
|
||||
|
||||
1. 从 `main` 分支创建发布分支,例如 `release/v1.0.0`
|
||||
2. 在发布分支上进行最终测试和修复
|
||||
3. 更新版本号和更新日志
|
||||
4. 创建 Pull Request 将发布分支合并回 `main`
|
||||
|
||||
### 发布步骤
|
||||
|
||||
1. 合并发布分支到 `main`
|
||||
2. 在 `main` 分支上创建版本标签,例如 `v1.0.0`
|
||||
3. 发布 GitHub Release,包含详细的更新日志
|
||||
|
||||
### 热修复发布
|
||||
|
||||
1. 从 `main` 分支创建热修复分支,例如 `hotfix/v1.0.1`
|
||||
2. 实现必要的修复
|
||||
3. 更新版本号和更新日志
|
||||
4. 创建 Pull Request 将热修复分支合并到 `main`
|
||||
5. 必要时创建 cherry-pick PR 将热修复分支合并到对应的发布分支
|
||||
|
||||
## 持续集成和部署
|
||||
|
||||
UPage 使用 GitHub Actions 进行持续集成和部署:
|
||||
|
||||
### CI 工作流程
|
||||
|
||||
- 每个 PR 会触发构建和测试
|
||||
- 代码质量检查(linting、类型检查)
|
||||
- 单元测试和集成测试
|
||||
- 构建检查
|
||||
|
||||
### CD 工作流程
|
||||
|
||||
- 合并到 `main` 分支会触发开发构建和部署
|
||||
- 自动生成和发布 Docker 镜像
|
||||
- 更新文档网站
|
||||
|
||||
## 问题跟踪
|
||||
|
||||
UPage 使用 GitHub [Issues](https://github.com/halo-dev/upage/issues) 进行问题跟踪,使用标签对问题进行分类(bug、feature、documentation 等)
|
||||
144
docs/content/deployment/docker-compose.md
Normal file
144
docs/content/deployment/docker-compose.md
Normal file
@@ -0,0 +1,144 @@
|
||||
---
|
||||
id: docker-compose
|
||||
title: Docker Compose 部署
|
||||
---
|
||||
|
||||
# Docker Compose 部署
|
||||
|
||||
本文档详细介绍如何使用 Docker Compose 部署 UPage,这是一种更便捷的方式来管理 UPage 的部署。
|
||||
|
||||
## 前置条件
|
||||
在开始之前,请确保您的系统满足以下要求:
|
||||
- Docker 已安装(推荐 Docker 20.10.0 或更高版本)
|
||||
- Docker Compose 已安装(推荐 Docker Compose 1.29.0 或更高版本)
|
||||
- 至少 2GB 可用内存
|
||||
- 至少 2GB 可用磁盘空间
|
||||
- 互联网连接(用于拉取 Docker 镜像和访问大模型 API)
|
||||
|
||||
### 安装 Docker 和 Docker Compose
|
||||
|
||||
如果您的系统未安装 Docker,请参考[Docker 官方文档](https://docs.docker.com/engine/install/)进行安装。
|
||||
如果您的系统未安装 Docker Compose,请参考[Docker Compose 官方文档](https://docs.docker.com/compose/install/)进行安装。
|
||||
|
||||
## 使用 Docker Compose 部署
|
||||
|
||||
### 准备目录
|
||||
|
||||
创建必要的目录用于持久化数据,例如 `~/upage`:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/upage/data
|
||||
mkdir -p ~/upage/logs
|
||||
mkdir -p ~/upage/storage
|
||||
cd ~/upage
|
||||
```
|
||||
:::tip
|
||||
UPage 所有数据与日志均存储在此目录中,请妥善保管。
|
||||
:::
|
||||
|
||||
### 创建配置文件
|
||||
创建 `docker-compose.yml` 文件:
|
||||
|
||||
```yaml
|
||||
version: "3.9"
|
||||
services:
|
||||
upage:
|
||||
image: upage-ai:production
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "${PORT:-3000}:3000"
|
||||
environment:
|
||||
- LLM_PROVIDER=${LLM_PROVIDER}
|
||||
- PROVIDER_BASE_URL=${PROVIDER_BASE_URL}
|
||||
- PROVIDER_API_KEY=${PROVIDER_API_KEY}
|
||||
- LLM_DEFAULT_MODEL=${LLM_DEFAULT_MODEL}
|
||||
- LLM_MINOR_MODEL=${LLM_MINOR_MODEL}
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
- ./logs:/app/logs
|
||||
- ./storage:/app/storage
|
||||
|
||||
volumes:
|
||||
upage-db:
|
||||
```
|
||||
|
||||
### 启动服务
|
||||
|
||||
在 `docker-compose.yml` 文件所在目录执行:
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 服务管理
|
||||
|
||||
使用 Docker Compose 管理服务的常用命令:
|
||||
|
||||
```bash
|
||||
# 启动服务
|
||||
docker-compose up -d
|
||||
|
||||
# 停止服务
|
||||
docker-compose down
|
||||
|
||||
# 重启服务
|
||||
docker-compose restart
|
||||
|
||||
# 查看服务日志
|
||||
docker-compose logs
|
||||
|
||||
# 查看服务状态
|
||||
docker-compose ps
|
||||
```
|
||||
|
||||
## 环境变量配置
|
||||
|
||||
UPage 支持通过环境变量进行配置。以下是一些比较重要的环境变量:
|
||||
|
||||
:::tip
|
||||
完整的配置请参考[配置参考](../configuration)。
|
||||
:::
|
||||
|
||||
### 基础配置
|
||||
|
||||
| 环境变量 | 描述 | 默认值 |
|
||||
| --- | --- | --- |
|
||||
| `PORT` | 服务监听端口 | `3000` |
|
||||
| `NODE_ENV` | Node.js 环境 | `production` |
|
||||
| `OPERATING_ENV` | 运行环境 | `production` |
|
||||
| `LOG_LEVEL` | 日志级别 | `debug` |
|
||||
| `USAGE_LOG_FILE` | 是否开启文件日志 | `true` |
|
||||
| `MAX_UPLOAD_SIZE_MB` | 附件上传的最大大小 (MB) | `5` |
|
||||
| `STORAGE_DIR` | 资源文件存储位置 | `/app/storage` |
|
||||
|
||||
### 模型提供商配置
|
||||
根据您选择的 AI 提供商,您还需要配置相应的 API 密钥和基础 URL,例如:
|
||||
|
||||
| 环境变量 | 描述 | 必填 | 示例 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | 默认 LLM 提供商 | 是 | `OpenAILike` |
|
||||
| `PROVIDER_BASE_URL` | OpenAI 兼容 API 基础 URL | 是 | `https://your-api-base-url` |
|
||||
| `PROVIDER_API_KEY` | OpenAI 兼容 API 密钥 | 是 | `your-openai-like-api-key` |
|
||||
|
||||
### 大模型配置
|
||||
|
||||
| 环境变量 | 描述 | 必填 | 示例 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_DEFAULT_MODEL` | 生成页面所使用的主要模型 | 是 | `gpt-4-turbo` |
|
||||
| `LLM_MINOR_MODEL` | 辅助页面生成所使用的次级模型 | 是 | `gpt-3.5-turbo` |
|
||||
|
||||
## 升级 UPage
|
||||
|
||||
当有新版本发布时,您可以按照以下步骤升级 UPage:
|
||||
|
||||
```bash
|
||||
docker-compose pull
|
||||
docker-compose down
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 下一步
|
||||
|
||||
- 阅读[用户指南](../user-guide/basics)学习如何使用 UPage 创建网页
|
||||
- 探索[配置参考](../configuration)了解所有可用的配置选项
|
||||
- 探索[Logto 认证集成](./logto)了解如何集成 Logto 实现用户认证
|
||||
160
docs/content/deployment/docker.md
Normal file
160
docs/content/deployment/docker.md
Normal file
@@ -0,0 +1,160 @@
|
||||
---
|
||||
id: docker
|
||||
title: Docker 部署
|
||||
---
|
||||
|
||||
# Docker 部署
|
||||
|
||||
本文档详细介绍如何使用 Docker 部署 UPage。
|
||||
|
||||
## 前置条件
|
||||
在开始之前,请确保您的系统满足以下要求:
|
||||
- Docker 已安装(推荐 Docker 20.10.0 或更高版本)
|
||||
- 至少 2GB 可用内存
|
||||
- 至少 2GB 可用磁盘空间
|
||||
- 互联网连接(用于拉取 Docker 镜像和访问大模型 API)
|
||||
|
||||
### 安装 Docker
|
||||
|
||||
如果您的系统未安装 Docker,请参考[Docker 官方文档](https://docs.docker.com/engine/install/)进行安装。
|
||||
|
||||
## 使用 Docker 部署
|
||||
|
||||
### 拉取镜像
|
||||
|
||||
首先,拉取 UPage 的最新 Docker 镜像:
|
||||
|
||||
```bash
|
||||
docker pull halohub/upage:latest
|
||||
```
|
||||
|
||||
您也可以使用特定版本的镜像,例如:
|
||||
|
||||
```bash
|
||||
docker pull halohub/upage:1.0.0
|
||||
```
|
||||
|
||||
### 准备目录
|
||||
|
||||
创建必要的目录用于持久化数据,例如 `~/upage`:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/upage/data
|
||||
mkdir -p ~/upage/logs
|
||||
mkdir -p ~/upage/storage
|
||||
```
|
||||
:::tip
|
||||
UPage 所有数据与日志均存储在此目录中,请妥善保管。
|
||||
:::
|
||||
|
||||
### 启动容器
|
||||
|
||||
使用以下命令启动 UPage 容器:
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name upage \
|
||||
--restart unless-stopped \
|
||||
-p 3000:3000 \
|
||||
-e LLM_PROVIDER=OpenAILike \
|
||||
-e PROVIDER_BASE_URL=your-openai-like-api-base-url \
|
||||
-e PROVIDER_API_KEY=your-openai-like-api-key \
|
||||
-e LLM_DEFAULT_MODEL=your-default-model \
|
||||
-e LLM_MINOR_MODEL=your-minor-model \
|
||||
-v ~/upage/data:/app/data \
|
||||
-v ~/upage/logs:/app/logs \
|
||||
-v ~/upage/storage:/app/storage \
|
||||
halohub/upage:latest
|
||||
```
|
||||
|
||||
### 容器管理
|
||||
|
||||
常用的容器管理命令:
|
||||
|
||||
```bash
|
||||
# 停止容器
|
||||
docker stop upage
|
||||
|
||||
# 启动容器
|
||||
docker start upage
|
||||
|
||||
# 重启容器
|
||||
docker restart upage
|
||||
|
||||
# 查看容器日志
|
||||
docker logs upage
|
||||
|
||||
# 查看容器状态
|
||||
docker ps -a | grep upage
|
||||
```
|
||||
|
||||
## 环境变量配置
|
||||
|
||||
UPage 支持通过环境变量进行配置。以下是一些比较重要的环境变量,均可以使用 `-e` 参数在启动容器时设置:
|
||||
|
||||
:::tip
|
||||
完整的配置请参考[配置参考](../configuration)。
|
||||
:::
|
||||
|
||||
### 基础配置
|
||||
|
||||
| 环境变量 | 描述 | 默认值 |
|
||||
| --- | --- | --- |
|
||||
| `PORT` | 服务监听端口 | `3000` |
|
||||
| `NODE_ENV` | Node.js 环境 | `production` |
|
||||
| `OPERATING_ENV` | 运行环境 | `production` |
|
||||
| `LOG_LEVEL` | 日志级别 | `debug` |
|
||||
| `USAGE_LOG_FILE` | 是否开启文件日志 | `true` |
|
||||
| `MAX_UPLOAD_SIZE_MB` | 附件上传的最大大小 (MB) | `5` |
|
||||
| `STORAGE_DIR` | 资源文件存储位置 | `/app/storage` |
|
||||
|
||||
### 模型提供商配置
|
||||
根据您选择的 AI 提供商,您还需要配置相应的 API 密钥和基础 URL,例如:
|
||||
|
||||
| 环境变量 | 描述 | 必填 | 示例 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_PROVIDER` | 默认 LLM 提供商 | 是 | `OpenAILike` |
|
||||
| `PROVIDER_BASE_URL` | OpenAI 兼容 API 基础 URL | 是 | `https://your-api-base-url` |
|
||||
| `PROVIDER_API_KEY` | OpenAI 兼容 API 密钥 | 是 | `your-openai-like-api-key` |
|
||||
|
||||
### 大模型配置
|
||||
|
||||
| 环境变量 | 描述 | 必填 | 示例 |
|
||||
| --- | --- | --- | --- |
|
||||
| `LLM_DEFAULT_MODEL` | 生成页面所使用的主要模型 | 是 | `gpt-4-turbo` |
|
||||
| `LLM_MINOR_MODEL` | 辅助页面生成所使用的次级模型 | 是 | `gpt-3.5-turbo` |
|
||||
|
||||
## 升级 UPage
|
||||
|
||||
当有新版本发布时,您可以按照以下步骤升级 UPage:
|
||||
|
||||
```bash
|
||||
# 拉取最新镜像
|
||||
docker pull halohub/upage:latest
|
||||
|
||||
# 停止并删除旧容器
|
||||
docker stop upage
|
||||
docker rm upage
|
||||
|
||||
# 使用新镜像启动容器(使用与之前相同的环境变量和挂载)
|
||||
docker run -d \
|
||||
--name upage \
|
||||
--restart unless-stopped \
|
||||
-p 3000:3000 \
|
||||
-e LLM_PROVIDER=OpenAILike \
|
||||
-e PROVIDER_BASE_URL=your-openai-like-api-base-url \
|
||||
-e PROVIDER_API_KEY=your-openai-like-api-key \
|
||||
-e LLM_DEFAULT_MODEL=your-default-model \
|
||||
-e LLM_MINOR_MODEL=your-minor-model \
|
||||
-v ~/upage/data:/app/data \
|
||||
-v ~/upage/logs:/app/logs \
|
||||
-v ~/upage/storage:/app/storage \
|
||||
halohub/upage:latest
|
||||
```
|
||||
|
||||
## 下一步
|
||||
|
||||
- 阅读[用户指南](../user-guide/basics)学习如何使用 UPage 创建网页
|
||||
- 探索[配置参考](../configuration)了解所有可用的配置选项
|
||||
- 探索[Logto 认证集成](./logto)了解如何集成 Logto 实现用户认证
|
||||
|
||||
152
docs/content/deployment/logto.md
Normal file
152
docs/content/deployment/logto.md
Normal file
@@ -0,0 +1,152 @@
|
||||
---
|
||||
id: logto
|
||||
title: Logto 认证集成
|
||||
---
|
||||
|
||||
# Logto 认证集成
|
||||
|
||||
:::info
|
||||
UPage 默认仅支持单一匿名用户访问,但您可以通过集成 Logto 实现用户认证,支持多用户登录
|
||||
:::
|
||||
|
||||
UPage 支持与 [Logto](https://logto.io/) 集成,提供完整的用户认证体系。本文档将指导您如何配置 UPage 与 Logto 的集成。
|
||||
|
||||
## 什么是 Logto?
|
||||
|
||||
Logto 是一个开源的身份验证和授权解决方案,提供了完整的用户管理、身份验证和授权功能。通过与 Logto 集成,UPage 可以支持用户注册、登录、密码重置等功能,同时提供基于角色的访问控制。
|
||||
|
||||
## Logto 接入方式
|
||||
|
||||
Logto 支持两种接入方式,您可以根据自己的需求选择合适的方式。
|
||||
|
||||
1. 使用 Logto 官方提供的托管服务 - Logto Cloud。
|
||||
2. 本地部署开源版 Logto 服务。
|
||||
|
||||
:::info
|
||||
两种方式仅在接入方式上有所区别,在配置上完全一致。
|
||||
:::
|
||||
|
||||
### 使用官方托管服务
|
||||
|
||||
访问 [Logto 官方网站](https://logto.io/),注册一个账号即可进行下一步操作。
|
||||
|
||||
### 本地部署 Logto
|
||||
|
||||
UPage 提供了一个简化的 Logto 部署配置。在 UPage 项目目录下,您可以找到 `logto/docker-compose.yaml` 文件以及 `.env` 文件。
|
||||
|
||||
如果是开发环境,执行以下命令:
|
||||
|
||||
```bash
|
||||
cd ./logto
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
如果是生产环境,执行以下命令:
|
||||
|
||||
```bash
|
||||
curl -L https://raw.githubusercontent.com/halo-dev/upage/refs/heads/main/logto/docker-compose.yaml -o ~/upage/logto/docker-compose.yaml
|
||||
curl -L https://raw.githubusercontent.com/halo-dev/upage/refs/heads/main/logto/.env -o ~/upage/logto/.env
|
||||
cd ~/upage/logto
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
这将启动 Logto 服务,默认情况下可以通过 `http://localhost:3002` 访问 Logto 管理控制台。
|
||||
|
||||
:::caution
|
||||
在生产环境部署时,请务必修改 `.env` 文件中的 `LOGTO_ENDPOINT` 、 `LOGTO_ADMIN_ENDPOINT` 以及 `LOGTO_POSTGRES_PASSWORD` 配置。
|
||||
:::
|
||||
|
||||
## 配置 Logto
|
||||
|
||||
1. 访问 Logto 管理控制台,
|
||||
2. 创建一个新的应用程序:
|
||||
- 应用类型:传统网页应用
|
||||
- 应用名称:UPage
|
||||
- 重定向 URIs:`http://${UPAGE_URL}/api/auth/callback`
|
||||
- 退出登录后重定向 URIs:`http://${UPAGE_URL}`
|
||||
- CORS 允许的来源:`http://${UPAGE_URL}`
|
||||
- 其他配置根据实际情况填写
|
||||
3. 记录应用程序的 ID 和密钥,这些将用于配置 UPage
|
||||
|
||||
## 配置 UPage 与 Logto 集成
|
||||
|
||||
### 环境变量配置
|
||||
|
||||
在 UPage 的环境变量中配置 Logto 相关参数:
|
||||
|
||||
```bash
|
||||
# 启用 Logto 认证
|
||||
LOGTO_ENABLE=true
|
||||
# Logto LOGTO_ENDPOINT 地址
|
||||
LOGTO_ENDPOINT=http://localhost:3001
|
||||
# Logto 应用程序 ID
|
||||
LOGTO_APP_ID=your-app-id
|
||||
# Logto 应用程序密钥
|
||||
LOGTO_APP_SECRET=your-app-secret
|
||||
# Logto 用于加密 cookie 的密钥,随机生成一个 32 位密钥即可
|
||||
LOGTO_COOKIE_SECRET=your-cookie-secret
|
||||
# 填写 UPage 地址,根据实际部署地址修改
|
||||
LOGTO_BASE_URL=http://localhost:3000
|
||||
```
|
||||
|
||||
如果使用 Docker compose 部署 UPage,在 `docker-compose.yml` 文件中添加这些环境变量:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
upage:
|
||||
# ... 其他配置
|
||||
environment:
|
||||
# ... 其他环境变量
|
||||
- LOGTO_ENABLE=true
|
||||
- LOGTO_ENDPOINT=http://logto:3001
|
||||
- LOGTO_APP_ID=your-app-id
|
||||
- LOGTO_APP_SECRET=your-app-secret
|
||||
- LOGTO_COOKIE_SECRET=your-cookie-secret
|
||||
- LOGTO_BASE_URL=http://localhost:3000
|
||||
```
|
||||
|
||||
### 配置说明
|
||||
|
||||
| 环境变量 | 描述 | 示例 |
|
||||
| --- | --- | --- |
|
||||
| `LOGTO_ENABLE` | 是否启用 Logto 认证 | `true` |
|
||||
| `LOGTO_ENDPOINT` | Logto 服务的 URL | `http://localhost:3001` |
|
||||
| `LOGTO_APP_ID` | Logto 应用程序 ID | `your-app-id` |
|
||||
| `LOGTO_APP_SECRET` | Logto 应用程序密钥 | `your-app-secret` |
|
||||
| `LOGTO_COOKIE_SECRET` | 用于加密 cookie 的密钥 | `00bf44b6ceaa648eca6ad172f0cd8c8c` |
|
||||
| `LOGTO_BASE_URL` | UPage 地址 | `http://localhost:3000` |
|
||||
|
||||
## Logto 使用技巧
|
||||
|
||||
:::tip
|
||||
UPage 集成 Logto 步骤已完成,以下内容是 Logto 的特殊使用技巧,供扩展阅读,如无定制化需求可忽略。
|
||||
:::
|
||||
|
||||
### 自定义登录界面
|
||||
|
||||
Logto 提供了自定义登录界面的功能:
|
||||
|
||||
1. 在 Logto 管理控制台中,导航到"外观"
|
||||
2. 自定义登录页面的样式、颜色和品牌元素
|
||||
3. 预览并保存更改
|
||||
|
||||
### 配置社交登录
|
||||
|
||||
Logto 支持多种社交登录方式:
|
||||
|
||||
1. 在 Logto 管理控制台中,导航到"连接器"
|
||||
2. 添加社交登录连接器(如 Google、GitHub、微信等)
|
||||
3. 按照向导完成配置
|
||||
|
||||
### 配置多因素认证
|
||||
|
||||
启用多因素认证以提高安全性:
|
||||
|
||||
1. 在 Logto 管理控制台中,导航到"安全"
|
||||
2. 启用多因素认证
|
||||
3. 配置多因素认证方式(如 TOTP、短信等)
|
||||
|
||||
## 下一步
|
||||
|
||||
- 阅读[用户指南](../user-guide/basics)学习如何使用 UPage 创建网页
|
||||
- 探索[配置参考](../configuration)了解所有可用的配置选项
|
||||
40
docs/content/deployment/others.md
Normal file
40
docs/content/deployment/others.md
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
id: others
|
||||
title: 其他配置
|
||||
---
|
||||
|
||||
# 其他配置
|
||||
|
||||
本文档提供了部署 UPage 时的一些其他配置选项和最佳实践。
|
||||
|
||||
## 使用 Nginx 反向代理
|
||||
|
||||
如果您需要使用 Nginx 作为反向代理,可以参考以下配置:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:3000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 配置 HTTPS
|
||||
|
||||
建议使用 Nginx 或其他反向代理来处理 HTTPS 请求。您可以使用 Let's Encrypt 获取免费的 SSL 证书。
|
||||
|
||||
## 数据备份
|
||||
|
||||
UPage 的数据存储在挂载的 `data` 目录中,您可以定期备份该目录来保护您的数据:
|
||||
|
||||
```bash
|
||||
# 备份数据目录
|
||||
tar -czf upage-data-backup-$(date +%Y%m%d).tar.gz ./upage/data
|
||||
```
|
||||
235
docs/content/deployment/source.md
Normal file
235
docs/content/deployment/source.md
Normal file
@@ -0,0 +1,235 @@
|
||||
---
|
||||
id: source
|
||||
title: 源码部署
|
||||
---
|
||||
|
||||
# 源码部署
|
||||
|
||||
本文档详细介绍如何从源码构建和部署 UPage。如果您希望自定义 UPage 或者参与开发,这是最合适的部署方式。
|
||||
|
||||
## 前置条件
|
||||
|
||||
在开始之前,请确保您的系统满足以下要求:
|
||||
|
||||
- Node.js 18.18.0 或更高版本
|
||||
- pnpm 9.4.0 或更高版本
|
||||
- Git
|
||||
|
||||
## 下载并构建代码
|
||||
|
||||
### 克隆代码库
|
||||
|
||||
首先,克隆 UPage 的代码库:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/halo-dev/upage.git
|
||||
cd upage
|
||||
```
|
||||
|
||||
### 安装依赖
|
||||
|
||||
使用 pnpm 安装项目依赖:
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### 配置环境变量
|
||||
|
||||
拷贝 `.env.example` 文件,创建 `.env` 文件:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
配置必要的环境变量:
|
||||
|
||||
```bash
|
||||
# 基础配置
|
||||
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=OpenAILike
|
||||
PROVIDER_BASE_URL=your-openai-like-api-base-url
|
||||
PROVIDER_API_KEY=your-openai-like-api-key
|
||||
LLM_DEFAULT_MODEL=your-default-model
|
||||
LLM_MINOR_MODEL=your-minor-model
|
||||
```
|
||||
|
||||
您可以根据需要配置不同的 AI 提供商,详细配置请参考[配置参考](../configuration)。
|
||||
|
||||
### 生成 Prisma 客户端
|
||||
|
||||
```bash
|
||||
pnpm setup
|
||||
```
|
||||
|
||||
## 开发模式使用
|
||||
|
||||
如果您想在开发模式下运行 UPage,可以使用以下命令:
|
||||
|
||||
```bash
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
开发服务器启动后,您可以通过浏览器访问:
|
||||
|
||||
```
|
||||
http://localhost:5173
|
||||
```
|
||||
|
||||
这将启动开发服务器,支持热重载,方便您进行开发和调试。
|
||||
|
||||
## 生产模式使用
|
||||
|
||||
构建 UPage 项目:
|
||||
|
||||
```bash
|
||||
pnpm build
|
||||
```
|
||||
|
||||
### 启动服务
|
||||
|
||||
启动 UPage 服务:
|
||||
|
||||
```bash
|
||||
pnpm preview
|
||||
```
|
||||
|
||||
服务启动后,您可以通过浏览器访问:
|
||||
|
||||
```
|
||||
http://localhost:3000
|
||||
```
|
||||
|
||||
## 使用 PM2 管理服务(可选)
|
||||
|
||||
在生产环境中,可以使用 PM2 来管理 Node.js 应用程序:
|
||||
|
||||
### 全局安装 PM2
|
||||
|
||||
```bash
|
||||
npm install -g pm2
|
||||
```
|
||||
|
||||
### 创建 PM2 配置文件
|
||||
|
||||
创建 `ecosystem.config.js` 文件:
|
||||
|
||||
```javascript
|
||||
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: 'OpenAILike',
|
||||
PROVIDER_BASE_URL: 'your-openai-like-api-base-url',
|
||||
PROVIDER_API_KEY: 'your-openai-like-api-key',
|
||||
LLM_DEFAULT_MODEL: 'your-default-model',
|
||||
LLM_MINOR_MODEL: 'your-minor-model',
|
||||
}
|
||||
}]
|
||||
};
|
||||
```
|
||||
|
||||
### 启动服务
|
||||
|
||||
```bash
|
||||
pm2 start ecosystem.config.js
|
||||
```
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
pm2 logs upage
|
||||
```
|
||||
|
||||
### 监控服务
|
||||
|
||||
```bash
|
||||
pm2 monit
|
||||
```
|
||||
|
||||
## 升级 UPage
|
||||
|
||||
当有新版本发布时,您可以按照以下步骤升级 UPage:
|
||||
|
||||
```bash
|
||||
# 拉取最新代码
|
||||
git pull origin main
|
||||
|
||||
# 安装依赖
|
||||
pnpm install
|
||||
|
||||
# 构建项目
|
||||
pnpm build
|
||||
|
||||
# 开发环境使用
|
||||
pnpm dev
|
||||
|
||||
# 生产环境使用
|
||||
pnpm preview
|
||||
|
||||
# 或者如果使用 PM2
|
||||
pm2 restart upage
|
||||
```
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 依赖安装失败
|
||||
|
||||
如果依赖安装失败,可以尝试清除 pnpm 缓存:
|
||||
|
||||
```bash
|
||||
pnpm store prune
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### 构建失败
|
||||
|
||||
如果构建失败,可以尝试清除构建缓存:
|
||||
|
||||
```bash
|
||||
pnpm clean
|
||||
pnpm build
|
||||
```
|
||||
|
||||
### 数据库错误
|
||||
|
||||
如果遇到数据库相关错误,可以尝试重新初始化数据库
|
||||
|
||||
```bash
|
||||
pnpm prisma migrate reset
|
||||
```
|
||||
|
||||
:::danger
|
||||
请注意,这将清空所有数据并重置数据库,切勿在生产环境中使用。
|
||||
:::
|
||||
|
||||
### 日志查看
|
||||
|
||||
检查日志文件以获取更多错误信息:
|
||||
|
||||
```bash
|
||||
cat logs/combined-*.log
|
||||
cat logs/error-*.log
|
||||
```
|
||||
|
||||
## 下一步
|
||||
|
||||
- 阅读[用户指南](../user-guide/basics)学习如何使用 UPage 创建网页
|
||||
- 探索[配置参考](../configuration)了解所有可用的配置选项
|
||||
- 探索[Logto 认证集成](./logto)了解如何集成 Logto 实现用户认证
|
||||
260
docs/content/faq.md
Normal file
260
docs/content/faq.md
Normal file
@@ -0,0 +1,260 @@
|
||||
---
|
||||
id: faq
|
||||
title: 常见问题
|
||||
---
|
||||
|
||||
# 常见问题
|
||||
|
||||
本文档整理了使用 UPage 时的常见问题和解答,帮助您快速解决可能遇到的问题。
|
||||
|
||||
## 基本问题
|
||||
|
||||
### UPage 是什么?
|
||||
|
||||
UPage 是一款基于大模型的可视化网页构建平台,支持多种 AI 提供商集成,基于自然语言快速实现定制化网页。它允许用户通过简单的文字描述生成完整的网页,并提供可视化编辑工具进行进一步定制。
|
||||
|
||||
### UPage 适合哪些用户?
|
||||
|
||||
UPage 适合各类需要快速创建网页的用户,包括但不限于:
|
||||
|
||||
- 开发者:快速创建原型和演示页面
|
||||
- 设计师:将设计理念转化为实际网页
|
||||
- 内容创作者:创建展示内容的网页
|
||||
- 营销人员:制作营销着陆页
|
||||
- 小企业主:创建企业网站和产品展示页面
|
||||
- 教育工作者:制作教学资源和课程页面
|
||||
|
||||
### UPage 是开源的吗?
|
||||
|
||||
是的,UPage 是一个开源项目,采用 [基于 GPLv3 的补充协议许可证](https://github.com/halo-dev/upage/blob/main/LICENSE.txt)。您可以在 [GitHub](https://github.com/halo-dev/upage) 上查看源代码,也可以参与项目开发和改进。
|
||||
|
||||
## 安装和部署
|
||||
|
||||
### 如何安装 UPage?
|
||||
|
||||
UPage 提供多种安装方式,最简单的方法是使用 Docker:
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name upage \
|
||||
--restart unless-stopped \
|
||||
-p 3000:3000 \
|
||||
-e LLM_PROVIDER=OpenAILike \
|
||||
-e PROVIDER_BASE_URL=your-openai-like-api-base-url \
|
||||
-e PROVIDER_API_KEY=your-openai-like-api-key \
|
||||
-e LLM_DEFAULT_MODEL=your-default-model \
|
||||
-e LLM_MINOR_MODEL=your-minor-model \
|
||||
-v ./data:/app/data \
|
||||
-v ./logs:/app/logs \
|
||||
-v ./storage:/app/storage \
|
||||
halo-dev/upage:latest
|
||||
```
|
||||
|
||||
详细的安装说明请参考[快速开始](./quick-start)文档。
|
||||
|
||||
### UPage 的系统要求是什么?
|
||||
|
||||
UPage 的最低系统要求:
|
||||
|
||||
- Docker 20.10.0 或更高版本(如果使用 Docker 部署)
|
||||
- Node.js 18.18.0 或更高版本(如果源码部署)
|
||||
- 至少 2GB 可用内存
|
||||
- 至少 2GB 可用磁盘空间
|
||||
- 互联网连接(用于访问 AI API)
|
||||
|
||||
### 如何更新 UPage?
|
||||
|
||||
如果使用 Docker 部署,可以按照以下步骤更新 UPage:
|
||||
|
||||
```bash
|
||||
# 拉取最新镜像
|
||||
docker pull halo-dev/upage:latest
|
||||
|
||||
# 停止并删除旧容器
|
||||
docker stop upage
|
||||
docker rm upage
|
||||
|
||||
# 使用新镜像启动容器(使用与之前相同的环境变量和挂载)
|
||||
docker run -d \
|
||||
--name upage \
|
||||
--restart unless-stopped \
|
||||
-p 3000:3000 \
|
||||
... # 其他环境变量和挂载
|
||||
halo-dev/upage:latest
|
||||
```
|
||||
|
||||
如果使用 Docker Compose,则可以执行:
|
||||
|
||||
```bash
|
||||
docker-compose pull
|
||||
docker-compose down
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## AI 集成
|
||||
|
||||
### UPage 支持哪些 AI 提供商?
|
||||
|
||||
UPage 支持多种 AI 提供商,包括:
|
||||
|
||||
- DeepSeek(DeepSeek-Chat、DeepSeek-Reasoner)
|
||||
- OpenAI(GPT-4o、GPT-5 等)
|
||||
- Anthropic Claude
|
||||
- Google Gemini
|
||||
- 兼容 OpenAI 接口的服务(如 Azure OpenAI、智谱 AI 等)
|
||||
- Ollama(本地部署的开源模型)
|
||||
|
||||
所有支持的 AI 提供商请参考[配置参考- AI 提供商配置](./configuration#ai-提供商配置)文档。
|
||||
|
||||
### 如何配置 AI 提供商?
|
||||
|
||||
通过环境变量配置 AI 提供商,例如:
|
||||
|
||||
```bash
|
||||
# OpenAI
|
||||
-e LLM_PROVIDER=OpenAI \
|
||||
-e PROVIDER_API_KEY=your-openai-api-key \
|
||||
-e LLM_DEFAULT_MODEL=gpt-4-turbo \
|
||||
-e LLM_MINOR_MODEL=gpt-3.5-turbo
|
||||
|
||||
# Anthropic Claude
|
||||
-e LLM_PROVIDER=Anthropic \
|
||||
-e PROVIDER_API_KEY=your-anthropic-api-key \
|
||||
-e LLM_DEFAULT_MODEL=claude-3-opus-20240229 \
|
||||
-e LLM_MINOR_MODEL=claude-3-haiku-20240307
|
||||
```
|
||||
|
||||
详细的配置选项请参考[配置参考 - AI 提供商配置](./configuration#ai-提供商配置)文档。
|
||||
|
||||
### 使用 AI 生成页面需要多少 token?
|
||||
|
||||
生成一个标准页面通常需要 2,000-10,000 个 token,具体取决于页面的复杂度和内容量。复杂的页面可能需要更多 token。UPage 会尽可能优化 prompt,尽量减少 token 消耗。
|
||||
|
||||
### 如何优化 AI 提示以获得更好的结果?
|
||||
|
||||
有效的 AI 提示应该:
|
||||
|
||||
- 明确指定页面类型和目的
|
||||
- 列出所需的主要组件和内容
|
||||
- 描述设计风格和布局偏好
|
||||
- 提供具体的内容示例或要求
|
||||
- 使用清晰、具体的语言
|
||||
|
||||
例如:
|
||||
```
|
||||
创建一个现代风格的产品登录页面,用于展示我们的智能手表产品。页面应包含:
|
||||
1. 顶部导航栏,带有品牌标志和菜单
|
||||
2. 醒目的标题和副标题,强调产品的主要卖点
|
||||
3. 产品图片展示区,包含至少3张不同角度的产品图
|
||||
...
|
||||
```
|
||||
|
||||
你可以使用 UPage 的优化提示功能来优化您的提示。
|
||||
|
||||
## 使用问题
|
||||
|
||||
### 如何编辑 AI 生成的页面?
|
||||
|
||||
1. 在页面列表中选择要编辑的页面
|
||||
2. 使用可视化编辑器点击要修改的页面元素
|
||||
3. 对于文本组件,可以直接输入文本进行修改
|
||||
4. 对于图片组件,可以点击上传图片进行替换
|
||||
5. 使用弹出的属性面板修改组件属性和样式
|
||||
6. 也可以使用 AI 辅助功能进行局部或整体调整
|
||||
|
||||
### UPage 支持响应式设计吗?
|
||||
|
||||
是的,UPage 生成的页面默认支持响应式设计,可以自动适应不同屏幕尺寸。您可以在编辑器中预览页面在不同设备上的显示效果,并进行针对性调整。如果生成的页面不符合您的预期,您可以尝试使用 AI 辅助调整。
|
||||
|
||||
## 数据和安全
|
||||
|
||||
### UPage 如何存储数据?
|
||||
|
||||
UPage 使用 SQLite 数据库存储页面数据和用户配置,存储在挂载的 `data` 目录中。上传的文件和资源存储在挂载的 `storage` 目录中。日志文件存储在挂载的 `logs` 目录中。
|
||||
|
||||
### 如何备份 UPage 数据?
|
||||
|
||||
备份 UPage 数据的最简单方法是备份挂载的数据目录:
|
||||
|
||||
```bash
|
||||
# 备份数据目录
|
||||
tar -czf upage-data-backup-$(date +%Y%m%d).tar.gz ./data
|
||||
|
||||
# 备份存储目录
|
||||
tar -czf upage-storage-backup-$(date +%Y%m%d).tar.gz ./storage
|
||||
```
|
||||
|
||||
### UPage 如何处理用户隐私?
|
||||
|
||||
UPage 本身不会收集或传输用户数据,除非明确配置。当使用 AI 功能时,页面内容会发送到配置的 AI 提供商进行处理。请确保您使用的 AI 提供商符合您的隐私要求。
|
||||
|
||||
### 如何配置 UPage 的多用户?
|
||||
|
||||
UPage 支持通过 Logto 进行用户认证和访问控制。详细配置请参考[Logto 认证集成](deployment/logto)文档。
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 页面生成失败怎么办?
|
||||
|
||||
如果页面生成失败,可能的原因和解决方法:
|
||||
|
||||
1. **AI API 连接问题**:检查网络连接和 API 密钥是否正确
|
||||
2. **提示过于复杂**:尝试简化页面描述,分步骤生成
|
||||
3. **token 限制**:检查是否达到 AI 提供商的 token 限制
|
||||
4. **模型不支持**:尝试使用更强大的模型或不同的 AI 提供商
|
||||
5. **生成内容超过限制**:UPage 默认限制单次回答不超过 3 次 Token 上限,您可以尝试分步骤生成
|
||||
|
||||
### 如何查看系统日志?
|
||||
|
||||
默认情况下,UPage 会将日志保存在挂载的 `logs` 目录中,可以通过以下方式查看系统日志:
|
||||
|
||||
```bash
|
||||
# 查看容器日志
|
||||
docker logs upage
|
||||
|
||||
# 查看错误日志文件
|
||||
cat logs/error-*.log
|
||||
|
||||
# 查看所有日志文件
|
||||
cat logs/combined-*.log
|
||||
```
|
||||
|
||||
### 如何解决数据库错误?
|
||||
|
||||
如果遇到数据库相关错误,可以尝试:
|
||||
|
||||
1. 检查数据目录的权限:`chmod -R 755 ./data`
|
||||
2. 备份并重新初始化数据库:
|
||||
```bash
|
||||
# 备份当前数据库
|
||||
cp ./data/upage.db ./data/upage.db.bak
|
||||
|
||||
# 删除并重新初始化
|
||||
rm ./data/upage.db
|
||||
docker restart upage
|
||||
```
|
||||
|
||||
### 容器无法启动怎么办?
|
||||
|
||||
如果 Docker 容器无法启动,可以尝试:
|
||||
|
||||
1. 检查日志:`docker logs upage`
|
||||
2. 验证环境变量:确保所有必需的环境变量都已正确设置
|
||||
3. 检查磁盘空间:确保有足够的磁盘空间
|
||||
4. 检查端口冲突:确保端口 3000 没有被其他服务占用
|
||||
5. 检查文件权限:确保挂载的目录具有正确的权限
|
||||
|
||||
## 高级问题
|
||||
|
||||
### UPage 支持插件系统吗?
|
||||
|
||||
UPage 不提供正式的插件系统,但作为开源项目,您可以通过 fork 代码库并进行修改来扩展功能。
|
||||
|
||||
### 如何与现有系统集成?
|
||||
|
||||
UPage 提供多种集成方式:
|
||||
|
||||
1. **API 集成**:使用 UPage API 与其他系统交互
|
||||
2. **导出集成**:下载页面源代码(HTML/CSS/JS)并集成到现有系统
|
||||
3. **部署集成**:使用 Vercel 或 Netlify 集成直接部署页面
|
||||
4. **认证集成**:通过 Logto 与现有认证系统集成
|
||||
50
docs/content/index.md
Normal file
50
docs/content/index.md
Normal file
@@ -0,0 +1,50 @@
|
||||
---
|
||||
id: index
|
||||
title: UPage 文档
|
||||
slug: /
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
<p align="center">
|
||||
<div className="theme-logo" style={{ width: '240px' }}>
|
||||
<img alt="UPage 主界面" />
|
||||
</div>
|
||||
</p>
|
||||
|
||||
<p align="center" style={{ display: 'flex', gap: '4px', justifyContent: 'center' }}>
|
||||
<a href="https://github.com/halo-dev/upage/releases"><img alt="GitHub release" src="https://img.shields.io/github/release/halo-dev/upage.svg?style=flat-square&include_prereleases" /></a>
|
||||
<a href="https://github.com/halo-dev/upage/commits"><img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/halo-dev/upage.svg?style=flat-square" /></a>
|
||||
<a href="https://github.com/halo-dev/upage/actions"><img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/halo-dev/upage/halo.yaml?branch=main&style=flat-square" /></a>
|
||||
<a href="https://halo-dev.github.io/upage/"><img alt="Documentation" src="https://img.shields.io/badge/docs-latest-blue?style=flat-square" /></a>
|
||||
</p>
|
||||
|
||||
|
||||
## 什么是 UPage?
|
||||
|
||||
UPage 是一款基于大模型的可视化网页构建平台,支持多种 AI 提供商集成,基于自然语言快速实现定制化网页。它利用大语言模型,让用户能够通过自然语言描述来创建和定制网页。无论您是开发者、设计师还是内容创作者,UPage 都能帮助您快速将想法转化为可视化的网页。
|
||||
|
||||
## 核心特性
|
||||
|
||||
- **基于 LLM 的页面生成**:通过自然语言描述生成完整的网页
|
||||
- **多种 LLM 提供商支持**:兼容 OpenAI、Anthropic Claude、Google Gemini 等多种 LLM 模型
|
||||
- **可视化编辑器**:简洁直观的可视化编辑器界面,实时预览
|
||||
- **多页面生成**:支持同时生成多个页面
|
||||
- **代码导出**:生成标准的 HTML/CSS/JS 代码,方便集成到现有项目
|
||||
- **响应式设计**:自动适应不同屏幕尺寸
|
||||
- **部署集成**:支持一键部署到常见托管平台
|
||||
|
||||
:::note
|
||||
特别感谢 [bolt.diy](https://github.com/stackblitz-labs/bolt.diy) 项目,UPage 的实现基于该项目的代码结构。
|
||||
:::
|
||||
|
||||
## 快速开始
|
||||
|
||||
请查看[快速开始](quick-start.md)指南,了解如何安装和使用 UPage。
|
||||
|
||||
## 贡献
|
||||
|
||||
UPage 是一个开源项目,我们欢迎任何形式的贡献。请查看[贡献指南](contributing.md)了解如何参与项目开发。
|
||||
|
||||
## 许可证
|
||||
|
||||
UPage 采用 [基于 GPLv3 的补充协议许可证](https://github.com/halo-dev/upage/blob/main/LICENSE.txt)。
|
||||
121
docs/content/quick-start.md
Normal file
121
docs/content/quick-start.md
Normal file
@@ -0,0 +1,121 @@
|
||||
---
|
||||
id: quick-start
|
||||
title: 快速开始
|
||||
---
|
||||
|
||||
# 快速开始
|
||||
|
||||
本指南将帮助您快速部署和启动 UPage,让您在几分钟内体验基于大模型的网页构建平台。
|
||||
|
||||
:::caution 注意
|
||||
此快速启动方式仅适用于体验和测试目的,如需在生产环境中完整部署,请参考[Docker 部署指南](deployment/docker)。
|
||||
:::
|
||||
|
||||
## 前置条件
|
||||
|
||||
在开始之前,请确保您的系统满足以下要求:
|
||||
|
||||
- Docker 已安装(推荐 Docker 20.10.0 或更高版本)
|
||||
- 至少 2GB 可用内存
|
||||
- 至少 2GB 可用磁盘空间
|
||||
- 互联网连接(用于拉取 Docker 镜像和访问大模型 API)
|
||||
|
||||
## 使用 Docker 快速部署
|
||||
|
||||
UPage 提供了官方 Docker 镜像,可以通过以下命令快速启动:
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name upage \
|
||||
--restart unless-stopped \
|
||||
-p 3000:3000 \
|
||||
-e LLM_PROVIDER=OpenAILike \
|
||||
-e PROVIDER_BASE_URL=your-openai-like-api-base-url \
|
||||
-e PROVIDER_API_KEY=your-openai-like-api-key \
|
||||
-e LLM_DEFAULT_MODEL=your-default-model \
|
||||
-e LLM_MINOR_MODEL=your-minor-model \
|
||||
-v ./data:/app/data \
|
||||
-v ./logs:/app/logs \
|
||||
-v ./storage:/app/storage \
|
||||
halo-dev/upage:latest
|
||||
```
|
||||
|
||||
### 参数说明
|
||||
|
||||
- `-e LLM_PROVIDER=OpenAILike`:设置默认的 LLM 提供商
|
||||
- `-e PROVIDER_BASE_URL=your-openai-like-api-base-url`:设置 API 基础 URL
|
||||
- `-e PROVIDER_API_KEY=your-openai-like-api-key`:设置 API 密钥
|
||||
- `-e LLM_DEFAULT_MODEL=your-default-model`:设置用于页面生成的默认 AI 模型
|
||||
- `-e LLM_MINOR_MODEL=your-minor-model`:设置用于辅助任务的 AI 模型
|
||||
- `-v ./data:/app/data`:挂载数据目录,用于存储数据库文件
|
||||
- `-v ./logs:/app/logs`:挂载日志目录
|
||||
- `-v ./storage:/app/storage`:挂载存储目录,用于存储上传的文件
|
||||
|
||||
|
||||
## 访问 UPage
|
||||
|
||||
服务启动后,您可以通过浏览器访问:
|
||||
|
||||
```
|
||||
http://localhost:3000
|
||||
```
|
||||
|
||||
## 配置 AI 提供商
|
||||
|
||||
UPage 支持多种 AI 提供商,您需要至少配置一个 AI 提供商才能使用页面生成功能。以下是常见的 AI 提供商配置示例:
|
||||
|
||||
### DeepSeek
|
||||
|
||||
```bash
|
||||
-e LLM_PROVIDER=Deepseek \
|
||||
-e PROVIDER_API_KEY=your-deepseek-api-key \
|
||||
-e LLM_DEFAULT_MODEL=deepseek-chat \
|
||||
-e LLM_MINOR_MODEL=deepseek-reasoner
|
||||
```
|
||||
|
||||
### 兼容 OpenAI 接口的服务
|
||||
|
||||
```bash
|
||||
-e LLM_PROVIDER=OpenAILike \
|
||||
-e PROVIDER_BASE_URL=https://your-api-base-url \
|
||||
-e PROVIDER_API_KEY=your-api-key \
|
||||
-e LLM_DEFAULT_MODEL=your-model-name \
|
||||
-e LLM_MINOR_MODEL=your-minor-model-name
|
||||
```
|
||||
|
||||
### OpenAI
|
||||
|
||||
```bash
|
||||
-e LLM_PROVIDER=OpenAI \
|
||||
-e PROVIDER_API_KEY=your-openai-api-key \
|
||||
-e LLM_DEFAULT_MODEL=gpt-4-turbo \
|
||||
-e LLM_MINOR_MODEL=gpt-3.5-turbo
|
||||
```
|
||||
|
||||
### Anthropic Claude
|
||||
|
||||
```bash
|
||||
-e LLM_PROVIDER=Anthropic \
|
||||
-e PROVIDER_API_KEY=your-anthropic-api-key \
|
||||
-e LLM_DEFAULT_MODEL=claude-3-opus-20240229 \
|
||||
-e LLM_MINOR_MODEL=claude-3-haiku-20240307
|
||||
```
|
||||
|
||||
### Ollama
|
||||
|
||||
```bash
|
||||
-e LLM_PROVIDER=Ollama \
|
||||
-e PROVIDER_BASE_URL=http://127.0.0.1:11434 \
|
||||
-e LLM_DEFAULT_MODEL=llama3 \
|
||||
-e LLM_MINOR_MODEL=llama3
|
||||
```
|
||||
|
||||
:::info
|
||||
详细的 AI 提供商配置请阅读[配置参考](configuration#ai-提供商配置)。
|
||||
:::
|
||||
|
||||
## 下一步
|
||||
|
||||
- 探索[Docker 部署指南](deployment/docker)了解生产环境部署方案,包括使用 Docker Compose、数据备份、HTTPS 配置等
|
||||
- 查看[配置参考](configuration)了解所有可用的配置选项
|
||||
- 阅读[用户指南](user-guide/basics)学习如何使用 UPage 创建网页
|
||||
12
docs/content/user-guide/basics.md
Normal file
12
docs/content/user-guide/basics.md
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
id: basics
|
||||
title: 基础使用
|
||||
---
|
||||
|
||||
# 基础使用
|
||||
|
||||
本文档介绍 UPage 的基本使用方法,帮助您快速上手这款基于大模型的可视化网页构建平台。
|
||||
|
||||
## 主界面概览
|
||||
|
||||
建设中...
|
||||
133
docs/docusaurus.config.js
Normal file
133
docs/docusaurus.config.js
Normal file
@@ -0,0 +1,133 @@
|
||||
// @ts-check
|
||||
// Note: type annotations allow type checking and IDEs autocompletion
|
||||
|
||||
/** @type {import('@docusaurus/types').Config} */
|
||||
const config = {
|
||||
title: 'UPage 文档',
|
||||
tagline: 'UPage 是一款基于人工智能的可视化网页构建平台',
|
||||
favicon: '../public/favicon.svg',
|
||||
|
||||
// Set the production url of your site here
|
||||
url: 'https://halo-dev.github.io',
|
||||
// Set the /<baseUrl>/ pathname under which your site is served
|
||||
// For GitHub pages deployment, it is often '/<projectName>/'
|
||||
baseUrl: '/upage/',
|
||||
|
||||
// GitHub pages deployment config.
|
||||
// If you aren't using GitHub pages, you don't need these.
|
||||
organizationName: 'halo-dev', // Usually your GitHub org/user name.
|
||||
projectName: 'upage', // Usually your repo name.
|
||||
trailingSlash: false,
|
||||
|
||||
onBrokenLinks: 'warn',
|
||||
onBrokenMarkdownLinks: 'warn',
|
||||
|
||||
// Even if you don't use internalization, you can use this field to set useful
|
||||
// metadata like html lang. For example, if your site is Chinese, you may want
|
||||
// to replace "en" with "zh-Hans".
|
||||
i18n: {
|
||||
defaultLocale: 'zh-Hans',
|
||||
locales: ['zh-Hans'],
|
||||
},
|
||||
|
||||
presets: [
|
||||
[
|
||||
'classic',
|
||||
/** @type {import('@docusaurus/preset-classic').Options} */
|
||||
({
|
||||
docs: {
|
||||
path: 'content',
|
||||
routeBasePath: '/',
|
||||
sidebarPath: require.resolve('./sidebars.js'),
|
||||
// Please change this to your repo.
|
||||
// Remove this to remove the "edit this page" links.
|
||||
editUrl:
|
||||
'https://github.com/halo-dev/upage/edit/main/docs/content/',
|
||||
},
|
||||
blog: false,
|
||||
theme: {
|
||||
customCss: require.resolve('./src/css/custom.css'),
|
||||
},
|
||||
}),
|
||||
],
|
||||
],
|
||||
|
||||
themeConfig:
|
||||
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
||||
({
|
||||
// Replace with your project's social card
|
||||
image: 'img/social-card.png',
|
||||
navbar: {
|
||||
title: 'UPage',
|
||||
logo: {
|
||||
alt: 'UPage Logo',
|
||||
src: 'img/logo.svg',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
type: 'docSidebar',
|
||||
sidebarId: 'tutorialSidebar',
|
||||
position: 'left',
|
||||
label: '使用文档',
|
||||
},
|
||||
{
|
||||
href: 'https://github.com/halo-dev/upage',
|
||||
label: 'GitHub',
|
||||
position: 'right',
|
||||
},
|
||||
],
|
||||
},
|
||||
footer: {
|
||||
style: 'dark',
|
||||
links: [
|
||||
{
|
||||
title: '文档',
|
||||
items: [
|
||||
{
|
||||
label: '快速开始',
|
||||
to: '/quick-start',
|
||||
},
|
||||
{
|
||||
label: '部署指南',
|
||||
to: '/category/deployment-guide',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: '社区',
|
||||
items: [
|
||||
{
|
||||
label: 'GitHub Issues',
|
||||
href: 'https://github.com/halo-dev/upage/issues',
|
||||
},
|
||||
{
|
||||
label: 'GitHub Discussions',
|
||||
href: 'https://github.com/halo-dev/upage/discussions',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: '更多',
|
||||
items: [
|
||||
{
|
||||
label: 'GitHub',
|
||||
href: 'https://github.com/halo-dev/upage',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
copyright: `Copyright © ${new Date().getFullYear()} 凌霞软件. Built with Docusaurus.`,
|
||||
},
|
||||
prism: {
|
||||
theme: require('prism-react-renderer').themes.github,
|
||||
darkTheme: require('prism-react-renderer').themes.dracula,
|
||||
},
|
||||
colorMode: {
|
||||
defaultMode: 'light',
|
||||
disableSwitch: false,
|
||||
respectPrefersColorScheme: true,
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
||||
module.exports = config;
|
||||
45
docs/package.json
Normal file
45
docs/package.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"name": "upage-docs",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"workspaces": [".."],
|
||||
"scripts": {
|
||||
"docusaurus": "docusaurus",
|
||||
"start": "docusaurus start",
|
||||
"build": "docusaurus build",
|
||||
"swizzle": "docusaurus swizzle",
|
||||
"deploy": "docusaurus deploy",
|
||||
"clear": "docusaurus clear",
|
||||
"serve": "docusaurus serve",
|
||||
"write-translations": "docusaurus write-translations",
|
||||
"write-heading-ids": "docusaurus write-heading-ids"
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "3.9.0",
|
||||
"@docusaurus/preset-classic": "3.9.0",
|
||||
"@mdx-js/react": "^3.0.0",
|
||||
"clsx": "^2.0.0",
|
||||
"prism-react-renderer": "^2.3.0",
|
||||
"react": "^18.0.0",
|
||||
"react-dom": "^18.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/module-type-aliases": "3.9.0",
|
||||
"@docusaurus/types": "3.9.0"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.5%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0"
|
||||
}
|
||||
}
|
||||
81
docs/sidebars.js
Normal file
81
docs/sidebars.js
Normal file
@@ -0,0 +1,81 @@
|
||||
/**
|
||||
* Creating a sidebar enables you to:
|
||||
- create an ordered group of docs
|
||||
- render a sidebar for each doc of that group
|
||||
- provide next/previous navigation
|
||||
|
||||
The sidebars can be generated from the filesystem, or explicitly defined here.
|
||||
|
||||
Create as many sidebars as you want.
|
||||
*/
|
||||
|
||||
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
|
||||
const sidebars = {
|
||||
tutorialSidebar: [
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'index',
|
||||
label: '首页',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'quick-start',
|
||||
label: '快速开始',
|
||||
},
|
||||
{
|
||||
type: 'category',
|
||||
label: '部署指南',
|
||||
link: {
|
||||
type: 'generated-index',
|
||||
title: '部署指南',
|
||||
slug: 'deployment-guide',
|
||||
},
|
||||
items: [
|
||||
'deployment/docker',
|
||||
'deployment/docker-compose',
|
||||
'deployment/source',
|
||||
'deployment/logto',
|
||||
'deployment/others',
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'configuration',
|
||||
label: '配置参考',
|
||||
},
|
||||
{
|
||||
type: 'category',
|
||||
label: '用户指南',
|
||||
link: {
|
||||
type: 'generated-index',
|
||||
title: '用户指南',
|
||||
slug: 'user-guide',
|
||||
},
|
||||
items: [
|
||||
'user-guide/basics',
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'category',
|
||||
label: '贡献指南',
|
||||
link: {
|
||||
type: 'doc',
|
||||
id: 'contributing/contributing',
|
||||
},
|
||||
items: [
|
||||
'contributing/code-of-conduct',
|
||||
'contributing/ways-to-contribute',
|
||||
'contributing/development-setup',
|
||||
'contributing/code-standards',
|
||||
'contributing/workflow',
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'faq',
|
||||
label: '常见问题',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
module.exports = sidebars;
|
||||
66
docs/src/css/custom.css
Normal file
66
docs/src/css/custom.css
Normal file
@@ -0,0 +1,66 @@
|
||||
/**
|
||||
* Any CSS included here will be global. The classic template
|
||||
* bundles Infima by default. Infima is a CSS framework designed to
|
||||
* work well for content-centric websites.
|
||||
*/
|
||||
|
||||
/* You can override the default Infima variables here. */
|
||||
:root {
|
||||
--ifm-color-primary: #3f51b5;
|
||||
--ifm-color-primary-dark: #3949a3;
|
||||
--ifm-color-primary-darker: #36459a;
|
||||
--ifm-color-primary-darkest: #2c397f;
|
||||
--ifm-color-primary-light: #4c5ec1;
|
||||
--ifm-color-primary-lighter: #5566c4;
|
||||
--ifm-color-primary-lightest: #707ecd;
|
||||
--ifm-code-font-size: 95%;
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
/* For readability concerns, you should choose a lighter palette in dark mode. */
|
||||
[data-theme="dark"] {
|
||||
--ifm-color-primary: #7986cb;
|
||||
--ifm-color-primary-dark: #6271c2;
|
||||
--ifm-color-primary-darker: #5767be;
|
||||
--ifm-color-primary-darkest: #3f50a8;
|
||||
--ifm-color-primary-light: #909bd4;
|
||||
--ifm-color-primary-lighter: #9ba5d8;
|
||||
--ifm-color-primary-lightest: #bcc2e5;
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
/* 为 API KEY 和 BASE URL 添加不同的颜色样式 */
|
||||
/* 红色,表示 API KEY */
|
||||
.api-key-highlight {
|
||||
color: #e53935;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 蓝色,表示 BASE URL */
|
||||
.base-url-highlight {
|
||||
color: #2196f3;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 暗色模式下的颜色调整 */
|
||||
[data-theme="dark"] .api-key-highlight {
|
||||
color: #ff7961;
|
||||
}
|
||||
|
||||
[data-theme="dark"] .base-url-highlight {
|
||||
color: #64b5f6;
|
||||
}
|
||||
|
||||
/* 亮暗模式下的 logo 切换 */
|
||||
.theme-logo {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.theme-logo img {
|
||||
content: url("/img/logo1.png");
|
||||
}
|
||||
|
||||
[data-theme="dark"] .theme-logo img {
|
||||
content: url("/img/logo2.png");
|
||||
}
|
||||
4
docs/static/img/logo.svg
vendored
Normal file
4
docs/static/img/logo.svg
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16">
|
||||
<rect width="16" height="16" rx="2" fill="#1389fd" />
|
||||
<path d="M7.398 9.091h-3.58L10.364 2 8.602 6.909h3.58L5.636 14l1.762-4.909Z" fill="#fff" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 241 B |
BIN
docs/static/img/logo1.png
vendored
Normal file
BIN
docs/static/img/logo1.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
BIN
docs/static/img/logo2.png
vendored
Normal file
BIN
docs/static/img/logo2.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
BIN
docs/static/img/logo3.png
vendored
Normal file
BIN
docs/static/img/logo3.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
@@ -1,5 +1,7 @@
|
||||
TAG=1.31.0
|
||||
LOGTO_ENDPOINT=
|
||||
LOGTO_ADMIN_ENDPOINT=
|
||||
LOGTO_POSTGRES_PORT=
|
||||
LOGTO_POSTGRES_PASSWORD=postgres1
|
||||
LOGTO_CORE_PORT=3001
|
||||
LOGTO_ADMIN_PORT=3002
|
||||
LOGTO_ADMIN_PORT=3002
|
||||
|
||||
@@ -20,6 +20,8 @@ services:
|
||||
postgres:
|
||||
image: postgres:17-alpine
|
||||
user: postgres
|
||||
ports:
|
||||
- ${LOGTO_POSTGRES_PORT:-5432}:5432
|
||||
environment:
|
||||
POSTGRES_USER: logto
|
||||
POSTGRES_PASSWORD: ${LOGTO_POSTGRES_PASSWORD}
|
||||
|
||||
@@ -13,14 +13,17 @@
|
||||
"check": "biome check --write --no-errors-on-unmatched .",
|
||||
"check:stage": "biome check --write --staged --no-errors-on-unmatched",
|
||||
"clean": "node scripts/clean.js",
|
||||
"setup": "prisma generate && prisma migrate deploy",
|
||||
"setup": "prisma migrate deploy && prisma generate",
|
||||
"docker:build": "docker build -t upage-ai:production -t upage-ai:latest --target runtime .",
|
||||
"docker:dev:run": "docker compose -f docker-compose-dev.yaml up",
|
||||
"docker:prod:run": "docker compose -f docker-compose-prod.yaml up",
|
||||
"prepare": "husky || true",
|
||||
"test": "vitest --run",
|
||||
"test:watch": "vitest",
|
||||
"typecheck": "tsc"
|
||||
"typecheck": "tsc",
|
||||
"docs:start": "pnpm --filter upage-docs run start",
|
||||
"docs:build": "pnpm --filter upage-docs run build",
|
||||
"docs:serve": "pnpm --filter upage-docs run serve"
|
||||
},
|
||||
"dependencies": {
|
||||
"@agentic/ai-sdk": "^8.4.4",
|
||||
|
||||
8113
pnpm-lock.yaml
generated
8113
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
3
pnpm-workspace.yaml
Normal file
3
pnpm-workspace.yaml
Normal file
@@ -0,0 +1,3 @@
|
||||
packages:
|
||||
- "."
|
||||
- "docs"
|
||||
Reference in New Issue
Block a user