修复安装错误issue #1
This commit is contained in:
24
deploy/open/Dockerfile
Normal file
24
deploy/open/Dockerfile
Normal file
@@ -0,0 +1,24 @@
|
||||
FROM eclipse-temurin:21-jre
|
||||
|
||||
ENV TZ=Asia/Shanghai \
|
||||
LANG=C.UTF-8 \
|
||||
LC_ALL=C.UTF-8 \
|
||||
SPRING_PROFILES_ACTIVE=prod \
|
||||
JVM_XMS=512m \
|
||||
JVM_XMX=512m
|
||||
|
||||
# Fix JDK 21 reflective access for BigDecimal in Spring Data Mongo
|
||||
ENV JAVA_TOOL_OPTIONS="--add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED"
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Copy prebuilt server jar and web assets (paths are relative to build context: deploy)
|
||||
COPY dist/ainoval-server.jar /app/ainoval-server.jar
|
||||
COPY dist/web/ /app/web/
|
||||
|
||||
EXPOSE 18080
|
||||
|
||||
# Serve the prebuilt web from filesystem via Spring static locations
|
||||
CMD sh -c "java -Xms${JVM_XMS} -Xmx${JVM_XMX} -Dfile.encoding=UTF-8 -Dspring.web.resources.static-locations=file:/app/web/ -jar /app/ainoval-server.jar"
|
||||
|
||||
|
||||
95
deploy/open/README.md
Normal file
95
deploy/open/README.md
Normal file
@@ -0,0 +1,95 @@
|
||||
# AINoval 一键部署(Docker 版)
|
||||
|
||||
本指南面向开源用户,提供无需自行构建前端与后端的简易部署方案:一个镜像同时打包后端 JAR 与已编译的 Web 静态文件,配合 docker-compose 可一键启动,并内置可选的 MongoDB 服务。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
deploy/
|
||||
├─ dist/
|
||||
│ ├─ ainoval-server.jar # 预编译后端
|
||||
│ └─ web/ # 预编译前端静态文件
|
||||
├─ open/
|
||||
│ ├─ README.md # 本指南
|
||||
│ ├─ Dockerfile # 开源镜像 Dockerfile(相对路径复制 dist)
|
||||
│ ├─ docker-compose.yml # 开源 docker-compose(相对路径引用本目录 env)
|
||||
│ ├─ production.env.example # 环境变量示例
|
||||
│ └─ production.env # 实际运行环境变量(建议忽略到版本库外)
|
||||
```
|
||||
|
||||
## 系统要求
|
||||
- Docker 24+,Docker Compose v2+
|
||||
- 至少 1GB 可用内存(建议 2GB+),磁盘 2GB+
|
||||
|
||||
## 快速开始
|
||||
1) 准备环境变量
|
||||
- 复制 `deploy/open/production.env.example` 到 `deploy/open/production.env`
|
||||
- 根据你的实际情况修改变量(尤其是 Mongo、JWT、对象存储、代理、API Key 等)
|
||||
|
||||
2) 构建镜像(或使用你私有仓库已推送的镜像)
|
||||
```bash
|
||||
# 方式A:在仓库根目录执行
|
||||
docker compose -f deploy/open/docker-compose.yml build
|
||||
|
||||
# 方式B:在 deploy/open 目录执行(无需重复路径)
|
||||
cd deploy/open
|
||||
docker compose -f docker-compose.yml build
|
||||
# 或
|
||||
docker compose build
|
||||
```
|
||||
|
||||
3) 启动服务
|
||||
```bash
|
||||
# 仓库根目录
|
||||
docker compose -f deploy/open/docker-compose.yml up -d
|
||||
|
||||
# 或在 deploy/open 目录
|
||||
docker compose -f docker-compose.yml up -d
|
||||
# 或
|
||||
docker compose up -d
|
||||
```
|
||||
启动后访问:http://localhost:18080/
|
||||
|
||||
## MongoDB 说明
|
||||
- 默认 compose 已包含 `mongo` 服务(镜像:mongo:6.0),开源一键部署默认使用 dev 模式、无认证。
|
||||
- 如你已有外部 MongoDB,可:
|
||||
- 注释/删除 `docker-compose.yml` 中的 `mongo` 服务;
|
||||
- 在 `deploy/open/production.env` 设置 `SPRING_DATA_MONGODB_URI` 指向外部实例(例如:`mongodb://host:27017/ainovel`)。
|
||||
|
||||
## 重要环境变量(节选)
|
||||
- 端口与 JVM:`SERVER_PORT`、`JVM_XMS`、`JVM_XMX`
|
||||
- Mongo(dev 无认证):`SPRING_DATA_MONGODB_URI`(默认 `mongodb://mongo:27017/ainovel`)
|
||||
- 向量库(Chroma):默认关闭,`VECTORSTORE_CHROMA_ENABLED=false`
|
||||
- 开启:将其设为 `true` 并确保 `CHROMA_URL` 可达(如 `http://host.docker.internal:18000` 或独立容器地址)。
|
||||
- JWT:`JWT_SECRET`(务必改成强随机值)
|
||||
- 存储:`STORAGE_PROVIDER`(local/alioss…),以及对应供应商参数
|
||||
- 代理:`PROXY_ENABLED`、`PROXY_HOST`、`PROXY_PORT`
|
||||
- 向量库:`CHROMA_URL`(如需)
|
||||
- AI Key:`OPENAI_API_KEY`、`GEMINI_API_KEY`、`ANTHROPIC_API_KEY` 等
|
||||
|
||||
> 注意:示例 env 仅用于演示,生产环境请务必替换为你自己的安全值。
|
||||
|
||||
## 日志与数据
|
||||
- 应用日志挂载在 `deploy/open/logs`(compose 中映射到容器 `/var/log/ainoval`)。
|
||||
- MongoDB 数据保存在命名卷 `mongo-data` 中。
|
||||
|
||||
## 常见操作
|
||||
- 查看日志:
|
||||
```bash
|
||||
docker compose -f deploy/open/docker-compose.yml logs -f ainoval
|
||||
```
|
||||
- 重启服务:
|
||||
```bash
|
||||
docker compose -f deploy/open/docker-compose.yml restart ainoval
|
||||
```
|
||||
- 停止并删除容器:
|
||||
```bash
|
||||
docker compose -f deploy/open/docker-compose.yml down
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
- 无法访问页面:检查容器是否正常启动、端口是否被占用;或修改 `ports` 映射。
|
||||
- 连接 Mongo 失败:检查 `MONGO_*` 变量,或确认外部 Mongo 地址/鉴权。
|
||||
- 前端静态资源 404:镜像内置静态目录 `/app/web/`,通过 JVM 参数 `-Dspring.web.resources.static-locations` 暴露;确保 `deploy/dist/web/` 在构建前已准备完整。
|
||||
|
||||
如有改进建议或问题反馈,欢迎提交 Issue!
|
||||
47
deploy/open/docker-compose.yml
Normal file
47
deploy/open/docker-compose.yml
Normal file
@@ -0,0 +1,47 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
mongo:
|
||||
image: mongo:6.0
|
||||
container_name: ainoval-mongo
|
||||
restart: unless-stopped
|
||||
# dev 开发模式:不启用认证(不要设置 MONGO_INITDB_*),首次启动请清空数据卷
|
||||
volumes:
|
||||
- mongo-data:/data/db
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "mongosh --quiet --eval \"db.adminCommand('ping').ok\" || exit 1"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 5s
|
||||
|
||||
ainoval:
|
||||
image: ainoval/ainoval-server:latest
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: open/Dockerfile
|
||||
container_name: ainoval-server
|
||||
env_file:
|
||||
- ./production.env
|
||||
environment:
|
||||
- SPRING_PROFILES_ACTIVE=dev
|
||||
- JVM_XMS=${JVM_XMS:-512m}
|
||||
- JVM_XMX=${JVM_XMX:-512m}
|
||||
# 覆盖 dev 配置中的 localhost,直接指向 compose 中的 mongo 服务
|
||||
- SPRING_DATA_MONGODB_URI=${SPRING_DATA_MONGODB_URI:-mongodb://mongo:27017/ainovel}
|
||||
- STORAGE_PROVIDER=${STORAGE_PROVIDER:-local}
|
||||
- AINOVEL_STORAGE_TEST_ON_STARTUP=${AINOVEL_STORAGE_TEST_ON_STARTUP:-false}
|
||||
- PROXY_ENABLED=${PROXY_ENABLED:-false}
|
||||
ports:
|
||||
- "18080:18080"
|
||||
volumes:
|
||||
- ./logs:/var/log/ainoval
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mongo:
|
||||
condition: service_healthy
|
||||
|
||||
volumes:
|
||||
mongo-data:
|
||||
|
||||
|
||||
101345
deploy/open/logs/application.log
Normal file
101345
deploy/open/logs/application.log
Normal file
File diff suppressed because it is too large
Load Diff
50
deploy/open/production.env
Normal file
50
deploy/open/production.env
Normal file
@@ -0,0 +1,50 @@
|
||||
# ==== 基础 ====
|
||||
SERVER_PORT=18080
|
||||
SPRING_PROFILES_ACTIVE=dev
|
||||
JVM_XMS=512m
|
||||
JVM_XMX=512m
|
||||
|
||||
# ==== MongoDB(内置 compose 服务,dev 默认无认证)====
|
||||
SPRING_DATA_MONGODB_URI=mongodb://mongo:27017/ainovel
|
||||
MONGO_DATABASE=ainovel
|
||||
VECTORSTORE_CHROMA_ENABLED=false
|
||||
# CHROMA_URL=http://localhost:18000
|
||||
|
||||
# ==== 健康检查(禁用不需要的组件避免 DOWN)====
|
||||
MANAGEMENT_HEALTH_RABBIT_ENABLED=false
|
||||
|
||||
# ==== 最小必填占位(避免 Bean 装配失败)====
|
||||
# ChatLanguageModelConfig 需要该键存在;开源默认给占位值,实际使用请改成真实 Key
|
||||
AI_OPENAI_API_KEY=dummy_openai_key
|
||||
|
||||
# 可选:如你启用了 Gemini 相关功能,可填,否则保留占位即可
|
||||
AI_GEMINI_API_KEY=dummy_gemini_key
|
||||
|
||||
# 如使用外部 Mongo,请把 MONGO_HOST 改为外部地址,并确保账号/密码正确
|
||||
|
||||
# ==== JWT ====
|
||||
JWT_SECRET=please_replace_with_a_strong_random_secret
|
||||
|
||||
# ==== 存储(可选,本地/OSS 等)====
|
||||
STORAGE_PROVIDER=local
|
||||
# ALIYUN_OSS_ENDPOINT=
|
||||
# ALIYUN_OSS_ACCESS_KEY_ID=
|
||||
# ALIYUN_OSS_ACCESS_KEY_SECRET=
|
||||
# ALIYUN_OSS_BUCKET_NAME=
|
||||
# ALIYUN_OSS_BASE_URL=
|
||||
|
||||
# ==== 代理(可选)====
|
||||
PROXY_ENABLED=false
|
||||
PROXY_HOST=127.0.0.1
|
||||
PROXY_PORT=6888
|
||||
|
||||
# ==== 向量库(可选)====
|
||||
CHROMA_URL=
|
||||
CHROMA_COLLECTION=ainovel
|
||||
|
||||
# ==== AI Key(按需)====
|
||||
OPENAI_API_KEY=
|
||||
GEMINI_API_KEY=
|
||||
ANTHROPIC_API_KEY=
|
||||
|
||||
|
||||
50
deploy/open/production.env.example
Normal file
50
deploy/open/production.env.example
Normal file
@@ -0,0 +1,50 @@
|
||||
# ==== 基础 ====
|
||||
SERVER_PORT=18080
|
||||
SPRING_PROFILES_ACTIVE=dev
|
||||
JVM_XMS=512m
|
||||
JVM_XMX=512m
|
||||
|
||||
# ==== MongoDB(内置 compose 服务,dev 默认无认证)====
|
||||
SPRING_DATA_MONGODB_URI=mongodb://mongo:27017/ainovel
|
||||
MONGO_DATABASE=ainovel
|
||||
VECTORSTORE_CHROMA_ENABLED=false
|
||||
# CHROMA_URL=http://localhost:18000
|
||||
|
||||
# ==== 健康检查(禁用不需要的组件避免 DOWN)====
|
||||
MANAGEMENT_HEALTH_RABBIT_ENABLED=false
|
||||
|
||||
# ==== 最小必填占位(避免 Bean 装配失败)====
|
||||
# ChatLanguageModelConfig 需要该键存在;开源默认给占位值,实际使用请改成真实 Key
|
||||
AI_OPENAI_API_KEY=dummy_openai_key
|
||||
|
||||
# 可选:如你启用了 Gemini 相关功能,可填,否则保留占位即可
|
||||
AI_GEMINI_API_KEY=dummy_gemini_key
|
||||
|
||||
# 如使用外部 Mongo,请把 MONGO_HOST 改为外部地址,并确保账号/密码正确
|
||||
|
||||
# ==== JWT ====
|
||||
JWT_SECRET=please_replace_with_a_strong_random_secret
|
||||
|
||||
# ==== 存储(可选,本地/OSS 等)====
|
||||
STORAGE_PROVIDER=local
|
||||
# ALIYUN_OSS_ENDPOINT=
|
||||
# ALIYUN_OSS_ACCESS_KEY_ID=
|
||||
# ALIYUN_OSS_ACCESS_KEY_SECRET=
|
||||
# ALIYUN_OSS_BUCKET_NAME=
|
||||
# ALIYUN_OSS_BASE_URL=
|
||||
|
||||
# ==== 代理(可选)====
|
||||
PROXY_ENABLED=false
|
||||
PROXY_HOST=127.0.0.1
|
||||
PROXY_PORT=6888
|
||||
|
||||
# ==== 向量库(可选)====
|
||||
CHROMA_URL=
|
||||
CHROMA_COLLECTION=ainovel
|
||||
|
||||
# ==== AI Key(按需)====
|
||||
OPENAI_API_KEY=
|
||||
GEMINI_API_KEY=
|
||||
ANTHROPIC_API_KEY=
|
||||
|
||||
|
||||
Reference in New Issue
Block a user