Files
deploy.stack/mixapi/stack.yml
T
cnphpbb 9b823ba34e docs(mixapi): 补充 buildx 多架构构建并调整镜像仓库
- Dockerfile/compose 头部与 readme 补充 buildx 多架构(amd64+arm64)构建示例
- IMAGE_TAG 默认改指私有仓库 hub.6t7.net/cnphpbb/mixapi 并同步各处 tag
2026-09-03 21:54:10 +08:00

97 lines
3.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# path:: mkdir -pv /data/volumes/mixapi/{data,logs,redis,pgsql_data}
# build:: docker build --build-arg MIXAPI_VER=v2.5.1cl -t hub.6t7.net/cnphpbb/mixapi:v2.5.1cl ./mixapi
# buildx:: docker buildx build --platform linux/amd64,linux/arm64 \
# --build-arg MIXAPI_VER=v2.5.1cl \
# -t hub.6t7.net/cnphpbb/mixapi:v2.5.1cl --push ./mixapi
# run:: docker compose -p mixapi --env-file ./mixapi/env.cfg -f ./mixapi/stack.yml up -d
# disc:: 全栈容器化部署:包含 MIXAPI、Redis 缓存及 PostgreSQL 数据库
# disc:: 容器间处于自定义桥接网络 mixapi 内,内部通过服务名 postgres:5432 / redis:6379 互通
# disc:: 容器 PG 不暴露宿主机端口,与宿主机已有 PostgreSQL 服务互不冲突
# disc:: MIXAPI 无官方 Docker Hub 镜像:需先按 build:: 命令本地构建(版本见 env.cfg)
# disc:: 首次启动后浏览器访问 /setup 创建的第一个账号即为 root 管理员
# disc:: 生产务必修改 env.cfg 中的全部密码与 SESSION_SECRET
services:
mixapi:
image: ${IMAGE_TAG}
container_name: mixapi_app
restart: always
command: --log-dir /app/logs
ports:
- "${PORT:-3000}:3000"
networks:
- mixapi
depends_on:
- redis
- postgres
volumes:
- ${Volumes_Path}/data:/data
- ${Volumes_Path}/logs:/app/logs
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- SQL_DSN=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
# 本机无 TLS 的 PG 也可显式关闭 SSL:
# - SQL_DSN=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?sslmode=disable
# 不设 SQL_DSN(删除上行)则 MIXAPI 回落使用 /data 下的 SQLite(文件名随版本,v2.5.1cl 为 mix-api.db
- REDIS_CONN_STRING=redis://:${REDIS_PASSWORD}@redis:6379
- TZ=Asia/Shanghai
- BATCH_UPDATE_ENABLED=true
- ERROR_LOG_ENABLED=true
- SESSION_SECRET=${SESSION_SECRET}
# 渠道密钥加密密钥:默认取 SESSION_SECRET,存量数据加密后不可随意变更
# - CRYPTO_SECRET=${CRYPTO_SECRET}
# 多节点部署时从节点设为 slave:
# - NODE_TYPE=slave
# 可选:独立日志库(PG 或 ClickHouse),不设则日志与业务同库
# - LOG_SQL_DSN=postgresql://${DB_USER}:${DB_PASSWORD}@postgres:5432/mixapi_log
# 流式无响应超时(秒),默认 120,出现空补全时调大:
# - STREAMING_TIMEOUT=300
healthcheck:
test: ["CMD-SHELL", "wget -q -O - http://127.0.0.1:3000/api/status > /dev/null || exit 1"]
interval: 30s
timeout: 10s
retries: 3
redis:
image: ${REDIS_IMAGE_TAG}
container_name: mixapi_redis
restart: always
networks:
- mixapi
volumes:
- ${Volumes_Path}/redis:/data
command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}"]
healthcheck:
test: ["CMD-SHELL", "redis-cli -a ${REDIS_PASSWORD} ping | grep -q PONG"]
interval: 10s
timeout: 5s
retries: 5
postgres:
image: ${PGSQL_IMAGE_TAG}
container_name: mixapi_pgsql
restart: always
shm_size: 256mb
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=${DB_NAME}
- POSTGRES_HOST_AUTH_METHOD=scram-sha-256
- TZ=Asia/Shanghai
volumes:
- ${Volumes_Path}/pgsql_data:/var/lib/postgresql/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
networks:
- mixapi
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
interval: 10s
timeout: 5s
retries: 5
networks:
mixapi:
driver: bridge