Add files via upload
This commit is contained in:
90
.env.example
Normal file
90
.env.example
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# ============================================
|
||||||
|
# Docker Compose 环境变量配置示例
|
||||||
|
# ============================================
|
||||||
|
# 使用说明:
|
||||||
|
# 1. 复制此文件为 .env: cp .env.example .env
|
||||||
|
# 2. 修改以下配置项为您的实际值
|
||||||
|
# 3. 根据是否使用内置数据库选择启动命令:
|
||||||
|
# - 使用内置数据库: docker-compose --profile with-db up -d
|
||||||
|
# - 使用外部数据库: docker-compose up -d
|
||||||
|
# ============================================
|
||||||
|
|
||||||
|
# --------------------------------------------
|
||||||
|
# 应用端口配置
|
||||||
|
# --------------------------------------------
|
||||||
|
APP_PORT=8088
|
||||||
|
|
||||||
|
# --------------------------------------------
|
||||||
|
# FastAPI 基础配置
|
||||||
|
# --------------------------------------------
|
||||||
|
# SECRET_KEY 用于 JWT token 加密,必须设置为随机且复杂的字符串
|
||||||
|
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
|
||||||
|
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 数据库
|
||||||
|
# 启动命令: docker-compose up -d(不加 --profile)
|
||||||
|
# 配置如下(修改 MYSQL_HOST 为外部数据库地址):
|
||||||
|
# MYSQL_HOST=host.docker.internal
|
||||||
|
# MYSQL_PORT=3306
|
||||||
|
# MYSQL_USER=root
|
||||||
|
# MYSQL_PASSWORD=123456
|
||||||
|
# MYSQL_DATABASE=arboris
|
||||||
|
# 注意:使用外部数据库时不需要设置 MYSQL_ROOT_PASSWORD
|
||||||
|
|
||||||
|
# --------------------------------------------
|
||||||
|
# 管理员初始化账号
|
||||||
|
# --------------------------------------------
|
||||||
|
ADMIN_DEFAULT_USERNAME=admin
|
||||||
|
ADMIN_DEFAULT_PASSWORD=ChangeMe123!
|
||||||
|
ADMIN_DEFAULT_EMAIL=admin@example.com
|
||||||
|
|
||||||
|
# --------------------------------------------
|
||||||
|
# 公共OpenAI / LLM 配置
|
||||||
|
# --------------------------------------------
|
||||||
|
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 邮件发送配置
|
||||||
|
# --------------------------------------------
|
||||||
|
SMTP_SERVER=smtp.example.com
|
||||||
|
SMTP_PORT=465
|
||||||
|
SMTP_USERNAME=no-reply@example.com
|
||||||
|
SMTP_PASSWORD=your-smtp-password
|
||||||
|
EMAIL_FROM=拯救小说家
|
||||||
|
|
||||||
|
# --------------------------------------------
|
||||||
|
# 注册与第三方登录开关
|
||||||
|
# --------------------------------------------
|
||||||
|
ALLOW_USER_REGISTRATION=false
|
||||||
|
ENABLE_LINUXDO_LOGIN=false
|
||||||
|
|
||||||
|
# --------------------------------------------
|
||||||
|
# Linux.do OAuth 配置(如果启用)
|
||||||
|
# --------------------------------------------
|
||||||
|
LINUXDO_CLIENT_ID=your_client_id
|
||||||
|
LINUXDO_CLIENT_SECRET=your_client_secret
|
||||||
|
LINUXDO_REDIRECT_URI=https://your-domain.com/api/auth/linuxdo/register
|
||||||
|
LINUXDO_AUTH_URL=https://connect.linux.do/oauth2/authorize
|
||||||
|
LINUXDO_TOKEN_URL=https://connect.linux.do/oauth2/token
|
||||||
|
LINUXDO_USER_INFO_URL=https://connect.linux.do/api/user
|
||||||
57
README.md
Normal file
57
README.md
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# 部署指南
|
||||||
|
|
||||||
|
## 准备环境
|
||||||
|
- 复制环境变量模板:`cp .env.example .env`
|
||||||
|
- 根据部署环境调整 `.env` 内的数据库、SMTP、OpenAI 及开关配置。
|
||||||
|
|
||||||
|
## 使用官方镜像
|
||||||
|
- 已推送镜像:`tichui251/arboris-app:latest`
|
||||||
|
- 推荐执行 `docker pull tichui251/arboris-app:latest` 获取最新版本。
|
||||||
|
- 镜像标签已在 `docker-compose.yml` 中配置,如需固定版本可自行修改。
|
||||||
|
|
||||||
|
## 使用 Docker Compose 启动
|
||||||
|
1. 确认 `.env` 与 `docker-compose.yml` 位于同一目录。
|
||||||
|
2. 若需要内置 MySQL,执行(推荐内置):
|
||||||
|
```bash
|
||||||
|
docker compose --profile with-db up -d
|
||||||
|
```
|
||||||
|
3. 若使用外部数据库,执行:
|
||||||
|
```bash
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## 环境变量摘要
|
||||||
|
| 变量 | 必填 | 说明 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `APP_PORT` | 否 | 映射到宿主机的 HTTP 端口,默认 `80`。 |
|
||||||
|
| `SECRET_KEY` | 是 | JWT 加密密钥,需设置为随机且足够复杂的字符串。 |
|
||||||
|
| `ENVIRONMENT` | 否 | 运行环境标识,默认 `production`。 |
|
||||||
|
| `DEBUG` | 否 | 是否启用调试日志,默认 `false`。 |
|
||||||
|
| `MYSQL_HOST` | 是 | 数据库主机地址,使用内置 MySQL 时保持为 `db`。 |
|
||||||
|
| `MYSQL_PORT` | 否 | 数据库端口,默认 `3306`。 |
|
||||||
|
| `MYSQL_USER` | 是 | 应用使用的数据库用户名。 |
|
||||||
|
| `MYSQL_PASSWORD` | 是 | 应用数据库密码。 |
|
||||||
|
| `MYSQL_DATABASE` | 是 | 应用数据库名称,默认 `arboris`。 |
|
||||||
|
| `MYSQL_ROOT_PASSWORD` | 使用内置数据库时必填 | 内置 MySQL 的 root 密码,外部数据库部署可忽略。 |
|
||||||
|
| `ADMIN_DEFAULT_USERNAME` | 否 | 首次启动的管理员用户名,默认 `admin`。 |
|
||||||
|
| `ADMIN_DEFAULT_PASSWORD` | 否 | 首次启动的管理员密码,部署后请尽快修改。 |
|
||||||
|
| `ADMIN_DEFAULT_EMAIL` | 否 | 管理员默认邮箱 |
|
||||||
|
| `OPENAI_API_KEY` | 视业务需求 | LLM 密钥,用于AI生成,必填。 |
|
||||||
|
| `OPENAI_API_BASE_URL` | 是 | LLM API 地址,默认官方 `https://api.openai.com/v1`。 |
|
||||||
|
| `OPENAI_MODEL_NAME` | 是 | 调用的模型名称,默认 `gpt-3.5-turbo`。 |
|
||||||
|
| `WRITER_CHAPTER_VERSION_COUNT` | 否 | 作家模式中保留的章节版本数量,默认 `2`。 |
|
||||||
|
| `SMTP_SERVER` | 否(开启注册时必填) | SMTP 服务器地址。 |
|
||||||
|
| `SMTP_PORT` | 否 | SMTP 端口,默认 `465`(SSL)。 |
|
||||||
|
| `SMTP_USERNAME` | 必填(开启邮件时) | SMTP 登录账号。 |
|
||||||
|
| `SMTP_PASSWORD` | 必填(开启邮件时) | SMTP 登录密码或授权码。 |
|
||||||
|
| `EMAIL_FROM` | 否 | 邮件显示的发件人名称,默认 “拯救小说家”。 |
|
||||||
|
| `ALLOW_USER_REGISTRATION` | 否 | 是否开放用户自助注册,默认 `false`。 |
|
||||||
|
| `ENABLE_LINUXDO_LOGIN` | 否 | 是否开启 Linux.do OAuth 登录,默认 `false`。 |
|
||||||
|
| `LINUXDO_CLIENT_ID` | 启用 Linux.do 时必填 | OAuth Client ID。 |
|
||||||
|
| `LINUXDO_CLIENT_SECRET` | 启用 Linux.do 时必填 | OAuth Client Secret。 |
|
||||||
|
| `LINUXDO_REDIRECT_URI` | 启用 Linux.do 时必填 | 授权回调地址,应指向 `/api/auth/linuxdo/register`。 |
|
||||||
|
| `LINUXDO_AUTH_URL` | 否 | 授权地址,默认官方地址。 |
|
||||||
|
| `LINUXDO_TOKEN_URL` | 否 | 获取 token 的地址,默认官方地址。 |
|
||||||
|
| `LINUXDO_USER_INFO_URL` | 否 | 用户信息查询地址,默认官方地址。 |
|
||||||
|
|
||||||
|
> 其余可选参数与示例说明详见 `.env.example` 注释。
|
||||||
87
docker-compose.yml
Normal file
87
docker-compose.yml
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
services:
|
||||||
|
app:
|
||||||
|
image: tiechui251/arboris-app:latest
|
||||||
|
container_name: arboris-app
|
||||||
|
ports:
|
||||||
|
- "${APP_PORT:-80}:80"
|
||||||
|
environment:
|
||||||
|
SECRET_KEY: ${SECRET_KEY:?请设置SECRET_KEY}
|
||||||
|
ENVIRONMENT: ${ENVIRONMENT:-production}
|
||||||
|
DEBUG: ${DEBUG:-false}
|
||||||
|
|
||||||
|
MYSQL_HOST: ${MYSQL_HOST:-db}
|
||||||
|
MYSQL_PORT: ${MYSQL_PORT:-3306}
|
||||||
|
MYSQL_USER: ${MYSQL_USER:-arboris}
|
||||||
|
MYSQL_PASSWORD: ${MYSQL_PASSWORD:?请设置数据库密码}
|
||||||
|
MYSQL_DATABASE: ${MYSQL_DATABASE:-arboris}
|
||||||
|
|
||||||
|
ADMIN_DEFAULT_USERNAME: ${ADMIN_DEFAULT_USERNAME:-admin}
|
||||||
|
ADMIN_DEFAULT_PASSWORD: ${ADMIN_DEFAULT_PASSWORD:-ChangeMe123!}
|
||||||
|
ADMIN_DEFAULT_EMAIL: ${ADMIN_DEFAULT_EMAIL:-admin@example.com}
|
||||||
|
|
||||||
|
OPENAI_API_KEY: ${OPENAI_API_KEY}
|
||||||
|
OPENAI_API_BASE_URL: ${OPENAI_API_BASE_URL:-https://api.openai.com/v1}
|
||||||
|
OPENAI_MODEL_NAME: ${OPENAI_MODEL_NAME:-gpt-3.5-turbo}
|
||||||
|
WRITER_CHAPTER_VERSION_COUNT: ${WRITER_CHAPTER_VERSION_COUNT:-2}
|
||||||
|
|
||||||
|
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:-小说生成器}
|
||||||
|
|
||||||
|
ALLOW_USER_REGISTRATION: ${ALLOW_USER_REGISTRATION:-true}
|
||||||
|
ENABLE_LINUXDO_LOGIN: ${ENABLE_LINUXDO_LOGIN:-false}
|
||||||
|
|
||||||
|
LINUXDO_CLIENT_ID: ${LINUXDO_CLIENT_ID}
|
||||||
|
LINUXDO_CLIENT_SECRET: ${LINUXDO_CLIENT_SECRET}
|
||||||
|
LINUXDO_REDIRECT_URI: ${LINUXDO_REDIRECT_URI}
|
||||||
|
LINUXDO_AUTH_URL: ${LINUXDO_AUTH_URL:-https://connect.linux.do/oauth2/authorize}
|
||||||
|
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
|
||||||
|
networks:
|
||||||
|
- app-network
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://127.0.0.1:8000/api/health"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 90s
|
||||||
|
|
||||||
|
# MySQL 数据库服务(可选,使用 profile)
|
||||||
|
db:
|
||||||
|
image: mysql:8.0
|
||||||
|
container_name: arboris-db
|
||||||
|
profiles:
|
||||||
|
- with-db
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-ChangeMe_RootPassword123}
|
||||||
|
MYSQL_DATABASE: ${MYSQL_DATABASE:-arboris}
|
||||||
|
MYSQL_USER: ${MYSQL_USER:-arboris}
|
||||||
|
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-ChangeMe_Password123}
|
||||||
|
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
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
start_period: 30s
|
||||||
|
command:
|
||||||
|
- --character-set-server=utf8mb4
|
||||||
|
- --collation-server=utf8mb4_unicode_ci
|
||||||
|
- --max_connections=1000
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mysql-data:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
networks:
|
||||||
|
app-network:
|
||||||
|
driver: bridge
|
||||||
Reference in New Issue
Block a user