154 lines
6.3 KiB
YAML
154 lines
6.3 KiB
YAML
# =============================================================================
|
||
# CloudSearch · Docker Compose 部署编排
|
||
# =============================================================================
|
||
#
|
||
# 双模式使用:
|
||
#
|
||
# 开发/测试模式(从源码构建):
|
||
# docker compose up -d
|
||
#
|
||
# 生产模式(使用预构建镜像):
|
||
# 1. 注释掉 services.app.build 段
|
||
# 2. 取消注释 services.app.image 行
|
||
# 3. docker compose up -d
|
||
#
|
||
# 构建并推送镜像到私有仓库:
|
||
# ./scripts/build-and-push.sh v0.3.32
|
||
#
|
||
# =============================================================================
|
||
|
||
networks:
|
||
cloudsearch-network:
|
||
driver: bridge
|
||
|
||
volumes:
|
||
app-data: # 主应用数据(SQLite 数据库、上传文件)
|
||
redis-data: # Redis 数据持久化
|
||
pansou-data: # PanSou 缓存
|
||
|
||
# ── 日志轮转模板 ────────────────────────────────────────────────────────────
|
||
x-logging: &default-logging
|
||
driver: json-file
|
||
options:
|
||
max-size: "50m"
|
||
max-file: "10"
|
||
|
||
# ── 服务定义 ────────────────────────────────────────────────────────────────
|
||
services:
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
# CloudSearch 主应用 — Node.js + Express + TypeScript
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
app:
|
||
container_name: CloudSearch_App
|
||
|
||
# ┌─ 开发模式:从源码构建 ──────────────────────────────────────────┐
|
||
build:
|
||
context: ./source_clean
|
||
dockerfile: Dockerfile
|
||
# └────────────────────────────────────────────────────────────────┘
|
||
|
||
# ┌─ 生产模式:使用预构建镜像(切换时取消注释下行,注释 build 段)───┐
|
||
# image: gitea.timxx.cn/admin/cloudsearch:latest
|
||
# image: gitea.timxx.cn/admin/cloudsearch:v0.3.32
|
||
# └────────────────────────────────────────────────────────────────┘
|
||
|
||
ports:
|
||
- "${PORT:-9527}:9527"
|
||
|
||
environment:
|
||
# ── 核心 ──
|
||
- NODE_ENV=${NODE_ENV:-production}
|
||
- PORT=${PORT:-9527}
|
||
- TZ=${TZ:-Asia/Shanghai}
|
||
|
||
# ── 安全 ──
|
||
- JWT_SECRET=${JWT_SECRET}
|
||
- ADMIN_USERNAME=${ADMIN_USERNAME:-admin}
|
||
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
|
||
- COOKIE_ENCRYPTION_KEY=${COOKIE_ENCRYPTION_KEY:-}
|
||
- CORS_ORIGIN=${CORS_ORIGIN}
|
||
|
||
# ── 数据库 & 缓存 ──
|
||
- DATA_DIR=/data
|
||
- DB_PATH=${DB_PATH:-/data/database.sqlite}
|
||
- REDIS_URL=${REDIS_URL:-redis://redis:6379}
|
||
|
||
# ── 搜索服务 ──
|
||
- PANSOU_URL=${PANSOU_URL:-http://pansou:80}
|
||
- PANSOU_AUTH_TOKEN=${PANSOU_AUTH_TOKEN:-}
|
||
|
||
# ── 网盘校验 ──
|
||
- VALIDATION_CONCURRENCY=${VALIDATION_CONCURRENCY:-10}
|
||
- VALIDATION_TIMEOUT=${VALIDATION_TIMEOUT:-5000}
|
||
- CACHE_TTL_VALID=${CACHE_TTL_VALID:-14400}
|
||
- CACHE_TTL_INVALID=${CACHE_TTL_INVALID:-3600}
|
||
|
||
# ── 路径 ──
|
||
- CHROMIUM_PATH=${CHROMIUM_PATH:-/usr/bin/chromium-browser}
|
||
- APP_VERSION_FILE=${APP_VERSION_FILE:-/data/VERSION}
|
||
- UPLOAD_DIR=${UPLOAD_DIR:-/app/uploads}
|
||
|
||
# ── 日志 ──
|
||
- LOG_LEVEL=${LOG_LEVEL:-info}
|
||
|
||
volumes:
|
||
- app-data:/data # 数据库
|
||
- ./uploads:/app/uploads # 上传文件
|
||
- ./VERSION:/app/VERSION # 版本文件
|
||
- ./icons:/app/dist/frontend/admin/icons # 云盘图标
|
||
|
||
depends_on:
|
||
redis:
|
||
condition: service_healthy
|
||
pansou:
|
||
condition: service_started
|
||
|
||
restart: always
|
||
networks:
|
||
- cloudsearch-network
|
||
logging: *default-logging
|
||
healthcheck:
|
||
test: ["CMD", "wget", "-qO-", "http://localhost:9527/health"]
|
||
interval: 30s
|
||
timeout: 10s
|
||
retries: 3
|
||
start_period: 20s
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
# Redis — 缓存 & 会话
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
redis:
|
||
container_name: CloudSearch_Redis
|
||
image: redis:7-alpine
|
||
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
|
||
volumes:
|
||
- redis-data:/data
|
||
restart: always
|
||
networks:
|
||
- cloudsearch-network
|
||
healthcheck:
|
||
test: ["CMD", "redis-cli", "ping"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 3
|
||
start_period: 5s
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
# PanSou — 第三方搜索聚合
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
pansou:
|
||
container_name: CloudSearch_PanSou
|
||
image: ghcr.io/fish2018/pansou-web:latest
|
||
networks:
|
||
cloudsearch-network:
|
||
aliases:
|
||
- pansou
|
||
environment:
|
||
- DOMAIN=${DOMAIN:-localhost}
|
||
- CACHE_TTL=60
|
||
volumes:
|
||
- pansou-data:/app/data
|
||
restart: always
|
||
logging: *default-logging
|