Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
67e4767a1a | ||
|
|
e78841908f | ||
|
|
2dcb79065d | ||
|
|
a168df0267 | ||
|
|
bd5de76730 | ||
|
|
c6a1f08031 | ||
|
|
bed91cbcf7 | ||
|
|
a2e6b642d3 | ||
|
|
dda7864428 |
157
.env.example
157
.env.example
@@ -1,87 +1,142 @@
|
||||
# ============================================
|
||||
# ===================================================================
|
||||
# Docker Compose 环境变量配置示例
|
||||
# ============================================
|
||||
# ===================================================================
|
||||
#
|
||||
# 使用说明:
|
||||
# 1. 复制此文件为 .env: cp .env.example .env
|
||||
# 2. 修改以下配置项为您的实际值
|
||||
# 3. 根据是否使用内置数据库选择启动命令:
|
||||
# - 使用内置数据库: docker-compose --profile with-db up -d
|
||||
# - 使用外部数据库: docker-compose up -d
|
||||
# ============================================
|
||||
# 1. 将此文件复制为 .env 文件: `cp .env.example .env`
|
||||
# 2. 根据您的实际需求,仔细检查并修改以下配置项。
|
||||
# 3. 使用默认的 SQLite 数据库快速启动,只需运行:
|
||||
# docker compose up -d
|
||||
#
|
||||
# ===================================================================
|
||||
|
||||
# --------------------------------------------
|
||||
# 应用端口配置
|
||||
# --------------------------------------------
|
||||
# -------------------------------------------------------------------
|
||||
# A. 核心应用配置
|
||||
# -------------------------------------------------------------------
|
||||
# [必需] 应用对外暴露的网络端口
|
||||
APP_PORT=8088
|
||||
|
||||
# --------------------------------------------
|
||||
# FastAPI 基础配置
|
||||
# --------------------------------------------
|
||||
# SECRET_KEY 用于 JWT token 加密,必须设置为随机且复杂的字符串
|
||||
# [必需] 用于 JWT token 等安全功能的加密密钥。
|
||||
# 警告:为了生产环境的安全,请务必将其修改为一个长且随机的复杂字符串!
|
||||
# 您可以使用此命令生成: openssl rand -hex 32
|
||||
SECRET_KEY=your-secret-key-change-me-to-random-string
|
||||
ENVIRONMENT=production
|
||||
DEBUG=false
|
||||
|
||||
# --------------------------------------------
|
||||
# MySQL 数据库配置
|
||||
# --------------------------------------------
|
||||
# 📌 方案一:使用内置 MySQL 数据库(推荐快速体验)
|
||||
# 启动命令: docker-compose --profile with-db up -d
|
||||
# 配置如下(保持 MYSQL_HOST=db):
|
||||
MYSQL_HOST=db
|
||||
# [可选] 应用环境,设置为 "development" 可以启用更详细的调试日志
|
||||
ENVIRONMENT=production
|
||||
|
||||
# [可选] 是否开启调试模式,生产环境中应始终为 "false"
|
||||
DEBUG=false
|
||||
# [可选] 控制应用日志级别,可选值:CRITICAL/ERROR/WARNING/INFO/DEBUG/NOTSET
|
||||
LOGGING_LEVEL=INFO
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# B. 数据库配置
|
||||
# -------------------------------------------------------------------
|
||||
# [必需] 选择数据库类型。可选值: "sqlite", "mysql"。
|
||||
# 默认为 "sqlite",这是最简单的配置,无需外部数据库服务。
|
||||
DB_PROVIDER=sqlite
|
||||
|
||||
# --- B1. SQLite 配置 (默认) ---
|
||||
# [可选] SQLite 数据库文件的存储位置。
|
||||
# 如果留空或注释掉,将使用名为 'sqlite-data' 的 Docker 卷进行持久化。
|
||||
# 若希望存储在宿主机上,可设置为路径,例如: ./storage
|
||||
# SQLITE_STORAGE_SOURCE=./storage
|
||||
|
||||
# --- B2. MySQL 配置 (可选) ---
|
||||
# 如果您希望使用 MySQL,请先将上方的 DB_PROVIDER 设置为 "mysql",然后根据您的场景选择并配置以下两种方案之一。
|
||||
|
||||
# ▼▼▼ 方案一:使用内置的 MySQL 服务 (推荐用于快速体验) ▼▼▼
|
||||
# 启动命令: DB_PROVIDER=mysql docker compose --profile mysql up -d
|
||||
#
|
||||
# 注意:以下变量由 docker-compose.yml 中的 `db` 服务使用。
|
||||
MYSQL_HOST=db # 使用内置服务时,请勿修改此项
|
||||
MYSQL_PORT=3306
|
||||
MYSQL_USER=arboris
|
||||
MYSQL_PASSWORD=your-database-password-change-me
|
||||
MYSQL_DATABASE=arboris
|
||||
# 内置数据库需要设置 ROOT 密码
|
||||
MYSQL_ROOT_PASSWORD=your-root-password-change-me
|
||||
# 内置数据库对外暴露的端口(可选,用于外部连接)
|
||||
# 如果宿主机 3306 端口被占用,修改为其他端口,如 3307
|
||||
# MYSQL_EXTERNAL_PORT=3307
|
||||
MYSQL_ROOT_PASSWORD=your-root-password-change-me # 内置数据库需要设置 root 密码
|
||||
|
||||
# 📌 方案二:使用外部 MySQL 数据库
|
||||
# 启动命令: docker-compose up -d(不加 --profile)
|
||||
# 配置如下(修改 MYSQL_HOST 为外部数据库地址):
|
||||
# ▼▼▼ 方案二:连接到外部的 MySQL 数据库 ▼▼▼
|
||||
# 启动命令: DB_PROVIDER=mysql docker compose up -d
|
||||
#
|
||||
# 注意:请确保应用容器可以访问到您的外部数据库地址。
|
||||
# `host.docker.internal` 是一个特殊的DNS名,可用于从容器内部访问宿主机。
|
||||
# MYSQL_HOST=host.docker.internal
|
||||
# MYSQL_PORT=3306
|
||||
# MYSQL_USER=root
|
||||
# MYSQL_PASSWORD=123456
|
||||
# MYSQL_DATABASE=arboris
|
||||
# 注意:使用外部数据库时不需要设置 MYSQL_ROOT_PASSWORD
|
||||
# MYSQL_USER=your-external-db-user
|
||||
# MYSQL_PASSWORD=your-external-db-password
|
||||
# MYSQL_DATABASE=your-external-db-name
|
||||
# 使用外部数据库时,无需设置 MYSQL_ROOT_PASSWORD。
|
||||
|
||||
# --------------------------------------------
|
||||
# 管理员初始化账号
|
||||
# --------------------------------------------
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# C. 初始化管理员账户
|
||||
# -------------------------------------------------------------------
|
||||
# 应用首次启动时,将使用以下凭据创建默认的管理员账户。
|
||||
ADMIN_DEFAULT_USERNAME=admin
|
||||
ADMIN_DEFAULT_PASSWORD=ChangeMe123!
|
||||
ADMIN_DEFAULT_EMAIL=admin@example.com
|
||||
|
||||
# --------------------------------------------
|
||||
# 公共OpenAI / LLM 配置
|
||||
# --------------------------------------------
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# D. 大语言模型 (LLM) 与 RAG 配置
|
||||
# -------------------------------------------------------------------
|
||||
# --- D1. 主要生成模型配置 ---
|
||||
OPENAI_API_KEY=sk-your-api-key-here
|
||||
OPENAI_API_BASE_URL=https://api.openai.com/v1
|
||||
OPENAI_MODEL_NAME=gpt-3.5-turbo
|
||||
WRITER_CHAPTER_VERSION_COUNT=2
|
||||
|
||||
# --------------------------------------------
|
||||
# SMTP 邮件发送配置
|
||||
# --------------------------------------------
|
||||
# --- D2. 嵌入模型配置 (用于 RAG 检索) ---
|
||||
# [必需] 嵌入模型提供方,可选 "openai" 或 "ollama"
|
||||
EMBEDDING_PROVIDER=openai
|
||||
|
||||
# [可选] OpenAI / 兼容服务的 Base URL,如果留空,将复用上方的 OPENAI_API_BASE_URL
|
||||
EMBEDDING_BASE_URL=https://api.openai.com/v1
|
||||
# [可选] 嵌入模型专用的 API Key,如果留空,将复用上方的 OPENAI_API_KEY
|
||||
EMBEDDING_API_KEY=sk-your-api-key-here
|
||||
# [必需] 默认嵌入模型名称
|
||||
EMBEDDING_MODEL=text-embedding-3-large
|
||||
# [必需] 嵌入模型的向量维度,必须与模型匹配;若不确定可保持默认
|
||||
EMBEDDING_MODEL_VECTOR_SIZE=3072
|
||||
|
||||
# [可选] 如果使用 Ollama 本地模型 (EMBEDDING_PROVIDER=ollama),请配置其服务地址与模型。
|
||||
OLLAMA_EMBEDDING_BASE_URL=http://host.docker.internal:11434
|
||||
OLLAMA_EMBEDDING_MODEL=nomic-embed-text:latest
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# E. 向量数据库配置 (用于 RAG)
|
||||
# -------------------------------------------------------------------
|
||||
# [可选] RAG 功能依赖向量数据库,默认使用本地文件。
|
||||
VECTOR_DB_URL=file:./storage/rag_vectors.db
|
||||
VECTOR_DB_AUTH_TOKEN=
|
||||
VECTOR_TOP_K_CHUNKS=5
|
||||
VECTOR_TOP_K_SUMMARIES=3
|
||||
VECTOR_CHUNK_SIZE=480
|
||||
VECTOR_CHUNK_OVERLAP=120
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# F. 可选服务与功能开关
|
||||
# -------------------------------------------------------------------
|
||||
# --- F1. SMTP 邮件发送配置 ---
|
||||
# [可选] 用于发送注册验证、密码重置等邮件。
|
||||
SMTP_SERVER=smtp.example.com
|
||||
SMTP_PORT=465
|
||||
SMTP_USERNAME=no-reply@example.com
|
||||
SMTP_PASSWORD=your-smtp-password
|
||||
EMAIL_FROM=拯救小说家
|
||||
|
||||
# --------------------------------------------
|
||||
# 注册与第三方登录开关
|
||||
# --------------------------------------------
|
||||
# --- F2. 功能开关 ---
|
||||
# 是否允许新用户注册
|
||||
ALLOW_USER_REGISTRATION=false
|
||||
# 是否启用 Linux.do 第三方登录
|
||||
ENABLE_LINUXDO_LOGIN=false
|
||||
|
||||
# --------------------------------------------
|
||||
# Linux.do OAuth 配置(如果启用)
|
||||
# --------------------------------------------
|
||||
# --- F3. Linux.do OAuth 配置 (如果启用) ---
|
||||
# 仅当 ENABLE_LINUXDO_LOGIN=true 时需要配置。
|
||||
LINUXDO_CLIENT_ID=your_client_id
|
||||
LINUXDO_CLIENT_SECRET=your_client_secret
|
||||
LINUXDO_REDIRECT_URI=https://your-domain.com/api/auth/linuxdo/register
|
||||
|
||||
27
README.md
27
README.md
@@ -11,19 +11,16 @@
|
||||
<img width="306" height="304" alt="屏幕截图 2025-10-12 221806" src="https://github.com/user-attachments/assets/e0315a7b-1138-4af3-9c5b-0e519c1705e5" />
|
||||
|
||||
---
|
||||
<img width="555" height="666" alt="image" src="https://github.com/user-attachments/assets/05974659-3172-4188-95d1-16bdf269d0c6" />
|
||||
<img width="811" height="515" alt="image" src="https://github.com/user-attachments/assets/aebe5ddb-3efb-4acd-a160-46df2bf928aa" />
|
||||
<img width="1471" height="880" alt="image" src="https://github.com/user-attachments/assets/a52d0214-bc1b-4792-8a2b-267b09e47379" />
|
||||
<img width="1375" height="872" alt="image" src="https://github.com/user-attachments/assets/0673faad-43df-4479-83ae-cffa870199a3" />
|
||||
<img width="1392" height="852" alt="image" src="https://github.com/user-attachments/assets/b7a7af24-1689-4341-aa78-26b0d74bdddd" />
|
||||
<img width="1240" height="879" alt="image" src="https://github.com/user-attachments/assets/137d44eb-3afa-4a0d-b88f-a62ff3621944" />
|
||||
<img width="1255" height="882" alt="image" src="https://github.com/user-attachments/assets/c831d746-8c1a-4ce8-aa1c-9b852da15c11" />
|
||||
|
||||
---
|
||||
|
||||
## ✨ Arboris 能为你做什么?
|
||||
|
||||
想象一下,你只需提出一个模糊的想法,AI 就能为你……
|
||||
在这里,你只需提出一个模糊的想法,AI 就能为你……
|
||||
|
||||
- **🌱 孕育世界**: 从零开始构建一个全新的世界观,包括独特的派系、关键的地点和丰富的背景设定。
|
||||
- **🎭 塑造角色**: 创造有血有肉的角色,并用一张清晰的关系网将他们联系起来,让人物关系一目了然。
|
||||
@@ -48,20 +45,25 @@
|
||||
- 根据部署环境调整 `.env` 内的数据库、SMTP、OpenAI 及开关配置。
|
||||
|
||||
### 使用官方镜像
|
||||
- 已推送镜像:`tichui251/arboris-app:latest`
|
||||
- 推荐执行 `docker pull tichui251/arboris-app:latest` 获取最新版本。
|
||||
- 已推送镜像:`tiechui251/arboris-app:latest`
|
||||
- 推荐执行 `docker pull tiechui251/arboris-app:latest` 获取最新版本。
|
||||
- 镜像标签已在 `docker-compose.yml` 中配置,如需固定版本可自行修改。
|
||||
|
||||
### 使用 Docker Compose 启动
|
||||
1. 确认 `.env` 与 `docker-compose.yml` 位于同一目录。
|
||||
2. 若需要内置 MySQL,执行(推荐内置):
|
||||
```bash
|
||||
docker compose --profile with-db up -d
|
||||
```
|
||||
3. 若使用外部数据库,执行:
|
||||
2. 默认使用 SQLite(无需数据库服务),直接执行:
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
> 如需将 SQLite 数据库文件映射到宿主机路径,可在 `.env` 中设置 `SQLITE_STORAGE_SOURCE=./storage` 或绝对路径。
|
||||
3. 若需启用内置 MySQL,请在命令前设置 `DB_PROVIDER=mysql` 并启用 `mysql` profile:
|
||||
```bash
|
||||
DB_PROVIDER=mysql docker compose --profile mysql up -d
|
||||
```
|
||||
4. 若连接外部 MySQL,同样需设置 `DB_PROVIDER=mysql`,但无需开启 profile:
|
||||
```bash
|
||||
DB_PROVIDER=mysql docker compose up -d
|
||||
```
|
||||
|
||||
### 环境变量摘要
|
||||
| 变量 | 必填 | 说明 |
|
||||
@@ -70,6 +72,9 @@
|
||||
| `SECRET_KEY` | 是 | JWT 加密密钥,需设置为随机且足够复杂的字符串。 |
|
||||
| `ENVIRONMENT` | 否 | 运行环境标识,默认 `production`。 |
|
||||
| `DEBUG` | 否 | 是否启用调试日志,默认 `false`。 |
|
||||
| `LOGGING_LEVEL` | 否 | 控制应用日志等级,默认 `INFO`,可选 `CRITICAL/ERROR/WARNING/INFO/DEBUG/NOTSET`。 |
|
||||
| `DB_PROVIDER` | 否 | 数据库类型,默认 `sqlite`;切换为 `mysql` 时请配合相关命令。 |
|
||||
| `SQLITE_STORAGE_SOURCE` | 否 | SQLite 数据存储映射;留空使用命名卷,或设置为宿主机路径/其他卷名。 |
|
||||
| `MYSQL_HOST` | 是 | 数据库主机地址,使用内置 MySQL 时保持为 `db`。 |
|
||||
| `MYSQL_PORT` | 否 | 数据库端口,默认 `3306`。 |
|
||||
| `MYSQL_USER` | 是 | 应用使用的数据库用户名。 |
|
||||
|
||||
@@ -8,6 +8,9 @@ services:
|
||||
SECRET_KEY: ${SECRET_KEY:?请设置SECRET_KEY}
|
||||
ENVIRONMENT: ${ENVIRONMENT:-production}
|
||||
DEBUG: ${DEBUG:-false}
|
||||
LOGGING_LEVEL: ${LOGGING_LEVEL:-INFO}
|
||||
|
||||
DB_PROVIDER: ${DB_PROVIDER:-sqlite}
|
||||
|
||||
MYSQL_HOST: ${MYSQL_HOST:-db}
|
||||
MYSQL_PORT: ${MYSQL_PORT:-3306}
|
||||
@@ -24,11 +27,26 @@ services:
|
||||
OPENAI_MODEL_NAME: ${OPENAI_MODEL_NAME:-gpt-3.5-turbo}
|
||||
WRITER_CHAPTER_VERSION_COUNT: ${WRITER_CHAPTER_VERSION_COUNT:-2}
|
||||
|
||||
EMBEDDING_PROVIDER: ${EMBEDDING_PROVIDER:-openai}
|
||||
EMBEDDING_BASE_URL: ${EMBEDDING_BASE_URL:-https://api.openai.com/v1}
|
||||
EMBEDDING_API_KEY: ${EMBEDDING_API_KEY:-${OPENAI_API_KEY}}
|
||||
EMBEDDING_MODEL: ${EMBEDDING_MODEL:-text-embedding-3-large}
|
||||
EMBEDDING_MODEL_VECTOR_SIZE: ${EMBEDDING_MODEL_VECTOR_SIZE:-3072}
|
||||
OLLAMA_EMBEDDING_BASE_URL: ${OLLAMA_EMBEDDING_BASE_URL:-http://localhost:11434}
|
||||
OLLAMA_EMBEDDING_MODEL: ${OLLAMA_EMBEDDING_MODEL:-nomic-embed-text:latest}
|
||||
|
||||
VECTOR_DB_URL: ${VECTOR_DB_URL:-file:./storage/rag_vectors.db}
|
||||
VECTOR_DB_AUTH_TOKEN: ${VECTOR_DB_AUTH_TOKEN:-}
|
||||
VECTOR_TOP_K_CHUNKS: ${VECTOR_TOP_K_CHUNKS:-5}
|
||||
VECTOR_TOP_K_SUMMARIES: ${VECTOR_TOP_K_SUMMARIES:-3}
|
||||
VECTOR_CHUNK_SIZE: ${VECTOR_CHUNK_SIZE:-480}
|
||||
VECTOR_CHUNK_OVERLAP: ${VECTOR_CHUNK_OVERLAP:-120}
|
||||
|
||||
SMTP_SERVER: ${SMTP_SERVER:-smtp.example.com}
|
||||
SMTP_PORT: ${SMTP_PORT:-465}
|
||||
SMTP_USERNAME: ${SMTP_USERNAME:-no-reply@example.com}
|
||||
SMTP_PASSWORD: ${SMTP_PASSWORD}
|
||||
EMAIL_FROM: ${EMAIL_FROM:-小说生成器}
|
||||
EMAIL_FROM: ${EMAIL_FROM:-Arboris}
|
||||
|
||||
ALLOW_USER_REGISTRATION: ${ALLOW_USER_REGISTRATION:-true}
|
||||
ENABLE_LINUXDO_LOGIN: ${ENABLE_LINUXDO_LOGIN:-false}
|
||||
@@ -40,6 +58,8 @@ services:
|
||||
LINUXDO_TOKEN_URL: ${LINUXDO_TOKEN_URL:-https://connect.linux.do/oauth2/token}
|
||||
LINUXDO_USER_INFO_URL: ${LINUXDO_USER_INFO_URL:-https://connect.linux.do/api/user}
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ${SQLITE_STORAGE_SOURCE:-sqlite-data}:/app/storage
|
||||
networks:
|
||||
- app-network
|
||||
healthcheck:
|
||||
@@ -49,12 +69,12 @@ services:
|
||||
retries: 3
|
||||
start_period: 90s
|
||||
|
||||
# MySQL 数据库服务(可选,使用 profile)
|
||||
# MySQL 数据库服务(通过 profile mysql 启用)
|
||||
db:
|
||||
image: mysql:8.0
|
||||
container_name: arboris-db
|
||||
profiles:
|
||||
- with-db
|
||||
- mysql
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-ChangeMe_RootPassword123}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE:-arboris}
|
||||
@@ -63,7 +83,6 @@ services:
|
||||
TZ: Asia/Shanghai
|
||||
volumes:
|
||||
- mysql-data:/var/lib/mysql
|
||||
- ./backend/db/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- app-network
|
||||
@@ -81,6 +100,8 @@ services:
|
||||
volumes:
|
||||
mysql-data:
|
||||
driver: local
|
||||
sqlite-data:
|
||||
driver: local
|
||||
|
||||
networks:
|
||||
app-network:
|
||||
|
||||
Reference in New Issue
Block a user