收起左侧

SparkNoteAI 部署

0
回复
65
查看
[ 复制链接 ]

0

主题

0

回帖

0

牛值

江湖小虾

SparkNoteAI 是一个现代化的知识整理与管理系统,融合了大模型智能总结、知识图谱可视化和多平台内容采集能力。帮助你从碎片化信息中构建结构化知识体系。

本地建立SparkNoteAI目录,然后再建立一个子目录:postgres。

1、建立.env文件,然后修改其中的密码,SECRET_KEY和ENCRYPTION_KEY。

# SparkNoteAI 环境变量配置
# 复制此文件为 .env 即可使用
#   开发环境:cp docker/.env.example docker/.env
#   生产环境:复制后修改密码和域名

# ==================== 版本配置 ====================
# APP_VERSION 由 Docker 镜像构建时写入(--build-arg),不需要在 .env 中设置
# 仅用于 docker-compose 的 image 标签引用
APP_VERSION=latest

# ==================== 应用配置 ====================
DEBUG=false

# ==================== 数据库配置 ====================
POSTGRES_USER=sparknoteai
POSTGRES_PASSWORD= 数据库密码
POSTGRES_DB=sparknoteai

# ==================== Redis 配置 ====================
REDIS_PASSWORD= 密码

# ==================== Neo4j 配置 ====================
NEO4J_PASSWORD= 密码

# ==================== JWT 配置 ====================
# 生成方法:openssl rand -hex 32
SECRET_KEY=***************
ACCESS_TOKEN_EXPIRE_MINUTES=10080

# ==================== 加密密钥 ====================
# 生成方法:openssl rand -base64 32
ENCRYPTION_KEY=***************

# ==================== 客户端版本兼容 ====================
# 服务端兼容的客户端版本,多个用逗号分隔(空表示兼容所有版本)
COMPATIBLE_CLIENT_VERSIONS=

# ==================== 管理员账号 ====================
ADMIN_USERNAME=admin
ADMIN_PASSWORD=Passw0rd!
ADMIN_EMAIL=admin@example.com

2、为了持久化保存文件还可以在此目录下分别建立:backend_uploads、postgres_data、redis_data、neo4j_data这四个目录。

3、在postgres目录建立一个init.sql文件:

-- PostgreSQL 初始化脚本
-- 生产环境启动时自动执行

-- 创建扩展(如果需要)
-- CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

-- 这里可以添加初始化 SQL
-- 注意:表结构由 SQLAlchemy 自动创建

4、在飞牛中建立docker-compose.yml,修改端口和域名即可:

# 生产环境 Docker Compose 配置
# 包含前端 + 后端 + 数据库 + Redis + Neo4j
# Nginx 内置反向代理:/api 自动转发到后端,无需额外配置

services:
# ==================== 前端服务 ====================
frontend:
    image:sparknoteai/frontend:${APP_VERSION:-latest}
    container_name:sparknoteai-frontend
    ports:
      -"前端端口:80"
    depends_on:
      backend:
        condition:service_healthy
    networks:
      -sparknoteai-network
    restart:unless-stopped
    labels:
      -"com.sparknoteai.service=frontend"

# ==================== 后端服务 ====================
backend:
    image:sparknoteai/backend:${APP_VERSION:-latest}
    container_name:sparknoteai-backend
    ports:
      -"后端端口:8000"
    environment:
      # 注意:不使用 env_file,避免 APP_VERSION 覆盖 Docker 镜像构建时的版本号
      -DATABASE_URL=postgresql://${POSTGRES_USER:-sparknoteai}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-sparknoteai}
      -REDIS_URL=redis://:${REDIS_PASSWORD}@redis:6379/0
      -SECRET_KEY=${SECRET_KEY}
      -ACCESS_TOKEN_EXPIRE_MINUTES=${ACCESS_TOKEN_EXPIRE_MINUTES:-10080}
      -ENCRYPTION_KEY=${ENCRYPTION_KEY}
      -COMPATIBLE_CLIENT_VERSIONS=${COMPATIBLE_CLIENT_VERSIONS:-}
      -ADMIN_USERNAME=${ADMIN_USERNAME:-admin}
      -ADMIN_PASSWORD=${ADMIN_PASSWORD}
      -ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com}
      -NEO4J_URI=bolt://neo4j:7687
      -NEO4J_PASSWORD=${NEO4J_PASSWORD}
      -DEBUG=false
    volumes:
      -backend_uploads:/app/data/uploads
    depends_on:
      db:
        condition:service_healthy
      redis:
        condition:service_healthy
      neo4j:
        condition:service_healthy
    networks:
      -sparknoteai-network
    restart:unless-stopped
    healthcheck:
      test:["CMD","curl","-f","http://localhost:8000/api/health"]
      interval:30s
      timeout:10s
      retries:3
      start_period:40s
    labels:
      -"com.sparknoteai.service=backend"

# ==================== PostgreSQL 数据库 ====================
db:
    image:postgres:15-alpine
    container_name:sparknoteai-db
    env_file:
      -.env
    environment:
      POSTGRES_DB:${POSTGRES_DB:-sparknoteai}
      POSTGRES_USER:${POSTGRES_USER:-sparknoteai}
      POSTGRES_PASSWORD:${POSTGRES_PASSWORD}
    volumes:
      -./postgres_data:/var/lib/postgresql/data
      -./postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
    networks:
      -sparknoteai-network
    restart:unless-stopped
    healthcheck:
      test:["CMD-SHELL","pg_isready -U sparknoteai -d sparknoteai"]
      interval:10s
      timeout:5s
      retries:5
    labels:
      -"com.sparknoteai.service=database"

# ==================== Redis 缓存 ====================
redis:
    image:redis:7-alpine
    container_name:sparknoteai-redis
    env_file:
      -.env
    command:redis-server--appendonlyyes--requirepass${REDIS_PASSWORD}
    expose:
      -"6379"
    volumes:
      -redis_data:/data
    networks:
      -sparknoteai-network
    restart:unless-stopped
    healthcheck:
      test:["CMD","redis-cli","--pass","${REDIS_PASSWORD}","ping"]
      interval:10s
      timeout:5s
      retries:5
    labels:
      -"com.sparknoteai.service=redis"

# ==================== Neo4j 知识图谱 ====================
neo4j:
    image:neo4j:5-community
    container_name:sparknoteai-neo4j
    environment:
      -NEO4J_AUTH=neo4j/${NEO4J_PASSWORD}
      -NEO4J_PLUGINS=["apoc"]
      -NEO4J_dbms_security_procedures_unrestricted=apoc.*
    expose:
      -"7474"
      -"7687"
    volumes:
      -neo4j_data:/data
    networks:
      -sparknoteai-network
    restart:unless-stopped
    healthcheck:
      test:["CMD","wget","--no-verbose","--tries=1","--spider","http://localhost:7474/"]
      interval:15s
      timeout:10s
      retries:5
    labels:
      -"com.sparknoteai.service=neo4j"

# ==================== 数据卷 ====================
volumes:
# 后端
backend_uploads:

# 数据库
postgres_data:
redis_data:
neo4j_data:

# ==================== 网络 ====================
networks:
sparknoteai-network:
    driver:bridge

启动之后,访问

服务 地址
前端 http://your-server-ip:前端端口
后端 API http://your-server-ip:后端端口
Swagger UI http://your-server-ip:后端端口/docs

默认管理员账号:admin / 你在配置中设置的密码

SparkNoteAI支持接入第三方 LLM(如 OpenAI、Anthropic 等)和图床服务,非常方便好用

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则