mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-13 11:13:43 +08:00
- docker-compose.yml: pass SEARXNG_BASE_URL into mateclaw-server so the app can reach the searxng sidecar container out of the box (default http://searxng:8080). - SystemSettingService: resolveSearxngBaseUrl() now falls back to the SEARXNG_BASE_URL env var when no DB value is set, so Docker users no longer need to configure it manually in the UI. - V38 migration (h2 + mysql): expand mate_wiki_chunk.content from TEXT (64KB) to MEDIUMTEXT (16MB) so large Chinese chunks (~30k chars ≈ 90KB UTF-8) no longer overflow.
85 lines
2.7 KiB
YAML
85 lines
2.7 KiB
YAML
version: '3.8'
|
||
|
||
services:
|
||
# MySQL 数据库
|
||
#
|
||
# ⚠️ 密码通过环境变量传入,必须从 .env 文件提供。首次部署前:
|
||
# 1. cp .env.example .env
|
||
# 2. 编辑 .env 把 DB_ROOT_PASSWORD / DB_PASSWORD 改成强密码
|
||
# 未设置会直接在 `docker compose up` 时报错,避免把默认密码带到生产环境。
|
||
mysql:
|
||
image: mysql:8.0
|
||
container_name: mateclaw-mysql
|
||
restart: unless-stopped
|
||
environment:
|
||
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:?DB_ROOT_PASSWORD is required in .env}
|
||
MYSQL_DATABASE: ${DB_NAME:-mateclaw}
|
||
MYSQL_USER: ${DB_USERNAME:-mateclaw}
|
||
MYSQL_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD is required in .env}
|
||
TZ: Asia/Shanghai
|
||
ports:
|
||
- "3306:3306"
|
||
volumes:
|
||
- mysql_data:/var/lib/mysql
|
||
# Schema and seed data are managed by Flyway on application startup.
|
||
# Do NOT mount legacy schema.sql / data.sql here — Flyway creates all
|
||
# tables from V1 baseline and applies incremental migrations automatically.
|
||
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||
healthcheck:
|
||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 5
|
||
|
||
# SearXNG 搜索引擎(keyless 搜索 provider,零配置可用)
|
||
searxng:
|
||
image: searxng/searxng:latest
|
||
container_name: mateclaw-searxng
|
||
restart: unless-stopped
|
||
environment:
|
||
- SEARXNG_BASE_URL=http://searxng:8080
|
||
volumes:
|
||
- searxng_data:/etc/searxng
|
||
ports:
|
||
- "8088:8080"
|
||
healthcheck:
|
||
test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/healthz"]
|
||
interval: 30s
|
||
timeout: 5s
|
||
retries: 3
|
||
|
||
# MateClaw 后端服务
|
||
mateclaw-server:
|
||
build:
|
||
context: .
|
||
dockerfile: mateclaw-server/Dockerfile
|
||
container_name: mateclaw-server
|
||
restart: unless-stopped
|
||
depends_on:
|
||
mysql:
|
||
condition: service_healthy
|
||
searxng:
|
||
condition: service_healthy
|
||
environment:
|
||
SPRING_PROFILES_ACTIVE: mysql
|
||
DB_HOST: mysql
|
||
DB_PORT: 3306
|
||
DB_NAME: ${DB_NAME:-mateclaw}
|
||
DB_USERNAME: ${DB_USERNAME:-mateclaw}
|
||
DB_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD is required in .env}
|
||
DASHSCOPE_API_KEY: ${DASHSCOPE_API_KEY:-}
|
||
SERPER_API_KEY: ${SERPER_API_KEY:-}
|
||
JWT_SECRET: ${JWT_SECRET:-}
|
||
MATECLAW_CORS_ALLOWED_ORIGINS: ${MATECLAW_CORS_ALLOWED_ORIGINS:-}
|
||
# SearXNG: tell the app where to reach the sidecar container
|
||
SEARXNG_BASE_URL: ${SEARXNG_BASE_URL:-http://searxng:8080}
|
||
ports:
|
||
- "18080:18088" # host:container — app listens on 18088 inside the container
|
||
volumes:
|
||
- server_data:/app/data
|
||
|
||
volumes:
|
||
mysql_data:
|
||
server_data:
|
||
searxng_data:
|