forked from DevOps/deploy.stack
feat(mixapi): 添加 MIXAPI 部署配置
- 全容器化 stack.yml 与复用 prod-dbs 的 stack.host.yml 双方案 - Dockerfile 从 GitHub Release 下载官方二进制构建(官方无 Docker Hub 镜像) - env.cfg.example 模板与 readme 部署/初始化说明
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# path:: mkdir -pv /data/volumes/mixapi/{data,logs,redis,pgsql_data}
|
||||
# build:: docker build --build-arg MIXAPI_VER=v2.5.1cl -t mixapi:v2.5.1cl ./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
|
||||
Reference in New Issue
Block a user