327df0c
# KenApi 单机部署(本机 stack 版)
#
# docker compose up -d # 用已有镜像启动
# docker compose up -d --build # 从仓库根目录 Dockerfile 重新构建
#
# 端口:7051 = API(含登录页)。apihost 只监听这一个端口;
# config 里残留的 7022(gRPC)/ 7052(githost HTTP)/ 7053(git SSH)均无人监听,
# git 读写走 KenShell,由 KenShell 的 7011/7012 承担。
#
# 为什么用 host 网络:PostgreSQL / Redis / RustFS / KenShell 都在
# 宿主机 127.0.0.1 上(与其它服务一致)。
#
# 首次部署前置(本机已执行):
# 1. 建库 + 迁移
# docker exec postgres psql -U postgres -c 'CREATE DATABASE gitdata'
# docker run --rm --network host -v "$PWD/config:/app/config:ro" \
# --entrypoint /usr/local/bin/app kenapi:local migrate
# 2. S3 桶(RustFS):gitdata(与 config/local/s3.json 的 bucket 一致)
# 3. identity 已内嵌,无需独立服务。
#
# 配置:镜像内 config/default/ + 挂载的 config/local/(本机地址与密钥)。
name: kenapi
services:
apihost:
image: ${KENAPI_IMAGE:-kenapi:local}
build:
context: ..
dockerfile: Dockerfile
container_name: kenapi
restart: unless-stopped
network_mode: host
environment:
RUST_LOG: ${RUST_LOG:-info}
TZ: ${TZ:-Asia/Shanghai}
KENAPI_HEALTH_PORT: ${KENAPI_HEALTH_PORT:-7051}
APP_WEB__WEB_BASE_URL: http://127.0.0.1:7051
# 进程内没有家目录,避免各 SDK 往 / 下写缓存。
HOME: /tmp
volumes:
# config/default/ 已烘进镜像;config/local/ 提供本机数据库/Redis/S3/identity 地址。
# 整个 config 目录只读挂载,顺便保留未来新增的本地配置文件。
- ../config:/app/config:ro
stop_grace_period: 120s
working_dir: /app
logging:
driver: json-file
options:
max-size: "20m"
max-file: "5"