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
启动之后,访问
默认管理员账号:admin / 你在配置中设置的密码
SparkNoteAI支持接入第三方 LLM(如 OpenAI、Anthropic 等)和图床服务,非常方便好用