Files
arboris-novel/deploy/docker-compose.yml
2025-10-21 09:51:27 +08:00

109 lines
3.9 KiB
YAML

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}
LOGGING_LEVEL: ${LOGGING_LEVEL:-INFO}
DB_PROVIDER: ${DB_PROVIDER:-sqlite}
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}
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:-Arboris}
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
volumes:
- ${SQLITE_STORAGE_SOURCE:-sqlite-data}:/app/storage
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 mysql 启用)
db:
image: mysql:8.0
container_name: arboris-db
profiles:
- mysql
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
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
sqlite-data:
driver: local
networks:
app-network:
driver: bridge