Commit 4aad1a98 authored by xiezhi's avatar xiezhi

参考 express.js-template 优化 Docker 配置

- Dockerfile: 使用多阶段构建,优化镜像大小
- 添加 npm 镜像源配置
- 正确复制构建结果和资源文件
- 设置标准环境变量
- docker-entrypoint.sh: 使用 sh 而不是 bash
- 添加资源路径处理逻辑
- 统一启动命令为 npm run serve
- 与 express.js-template 保持一致的风格
parent 2f1e180d
FROM hb.eazytec-cloud.com/eazytec/eazydevelop-node:ubuntu22.04-node22-latest
FROM hb.eazytec-cloud.com/eazytec/eazydevelop-node:ubuntu22.04-node22-latest AS builder
WORKDIR /app
# 复制依赖文件
# 复制 package.json 和 package-lock.json
COPY package*.json ./
RUN npm config set registry https://registry.npmmirror.com
# 安装依赖
RUN npm ci
RUN npm install
# 复制应用代码
# 复制代码
COPY . .
# 构建应用
RUN npm run build
# 设置启动脚本
FROM hb.eazytec-cloud.com/eazytec/eazydevelop-node:ubuntu22.04-node22-latest
WORKDIR /app
# 复制第一阶段的构建结果
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/.resource ./resource
# 复制启动脚本
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
# 设置必要的环境变量
ENV NODE_ENV=production
ENV APP_PORT_1=8000
ENV TZ=Asia/Shanghai
ENV RESOURCE_PATH=/app/.resource/resource_deploy.json
# 暴露端口
EXPOSE ${APP_PORT_1:-8000}
EXPOSE $APP_PORT_1
# 启动应用
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["npm", "run", "serve"]
# 使用启动脚本启动应用
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
#!/bin/bash
#!/bin/sh
# Three.js 项目启动脚本
set -e
# 设置默认端口
APP_PORT_1=${APP_PORT_1:-8000}
echo "🎨 启动 Three.js 应用..."
echo "📊 Node.js: $(node --version)"
echo "📦 npm: $(npm --version)"
echo "🌐 访问地址: http://localhost:${APP_PORT_1:-8000}"
echo ""
# 设置资源路径
RESOURCE_PATH=${RESOURCE_PATH:-/app/.resource/resource_deploy.json}
# 执行传入的命令
exec "$@"
# 创建资源目录(如果不存在)
mkdir -p /app/.resource
# 复制资源文件到正确位置
if [ -d "/app/resource" ]; then
cp -r /app/resource/* /app/.resource/ 2>/dev/null || true
fi
# 导出环境变量
export APP_PORT_1
export RESOURCE_PATH
# 启动应用
exec npm run serve
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment