# demo-game-server 镜像
# 构建：docker build -t 106.75.29.47:10086/ruoyi-cloud/demo-game-server:1.0.0 .
FROM node:22-alpine

# 国内 npm 源（构建阶段加速）
RUN npm config set registry https://registry.npmmirror.com

# curl：preStop 钩子需要它来触发 /drain 摘流（alpine 默认不带 curl）
RUN apk add --no-cache curl

WORKDIR /app

# 先装依赖，利用镜像层缓存
COPY package.json ./
RUN npm install --omit=dev

COPY server.js ./

ENV PORT=3000 \
    SERVER_VERSION=1.0.0 \
    BUILD=docker \
    MIN_PROTOCOL=4 \
    CURRENT_PROTOCOL=5 \
    CONFIG_VERSION=cfg-20260924-01 \
    FEATURES=new_map,new_shop \
    ROLLOUT_PERCENT=100

EXPOSE 3000

# 说明：
#   用 exec 形式（数组）启动，让 node 成为 PID 1，才能正确收到 SIGTERM。
#   如果用 `CMD node server.js`（shell 形式），信号会被 /bin/sh 吞掉，
#   drain 逻辑永远不会触发 —— 这是长连接服务容器化的经典坑。
CMD ["node", "server.js"]
