docs: 添加 README、Release 模板、docker-compose 编排、构建发布脚本

This commit is contained in:
2026-05-17 20:05:45 +08:00
parent 389df53d2d
commit 17b40cea7b
5 changed files with 717 additions and 52 deletions

View File

@@ -1,24 +1,141 @@
# CloudSearch — single source of truth: ./VERSION
# 注意: 此 compose 用于参考/文档。实际部署使用 docker run 以兼容 1Panel Redis。
# =============================================================================
# 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:
admin-data:
app-data:
external: true
name: cloudsearch_app-data
pansou-data:
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}
# ── 数据库 & 缓存 ──
- 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
@@ -33,48 +150,3 @@ services:
- pansou-data:/app/data
restart: always
logging: *default-logging
app:
container_name: CloudSearch_App
image: cloudsearch-app:latest
ports:
- "9527:9527"
environment:
- NODE_ENV=production
- CORS_ORIGIN=http://jp-cs.timaa.cn
- JWT_SECRET=u-_1wB...JeIg
- ADMIN_PASSWORD=0nL5kL...b25A
- PANSOU_URL=http://pansou:80
- DB_PATH=/data/database.sqlite
- REDIS_URL=redis://:redis_GbR7XZ@1Panel-redis-aDp3:6379
- CLOUDSEARCH_API=http://localhost:9527
- TRANSFER_CONFIG_PATH=/data/transfer_config.json
- TZ=Asia/Shanghai
- APP_VERSION_FILE=/data/VERSION
volumes:
- cloudsearch_app-data:/data
- ./uploads:/app/uploads
- ./VERSION:/app/VERSION
- ./icons:/app/dist/frontend/admin/icons
depends_on:
- pansou
restart: always
networks:
- cloudsearch-network
logging: *default-logging
admin:
container_name: CloudSearch_Admin
image: cloudsearch-admin:v0.1.0
ports:
- "127.0.0.1:9531:9531"
environment:
- ADMIN_PORT=9531
- ADMIN_PASSWORD=0nL5kL...b25A
- ADMIN_DB_PATH=/data/admin_flags.sqlite
volumes:
- admin-data:/data
restart: always
networks:
- cloudsearch-network
logging: *default-logging