diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..1133ff0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +node_modules +npm-debug.log +pnpm-debug.log +Dockerfile +.git +.gitignore +.dockerignore +README.md diff --git a/Dockerfile b/Dockerfile index 7de9ffe..06f235a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,36 @@ -FROM node:22-slim - -RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg \ - && rm -rf /var/lib/apt/lists/* +# 使用 AWS ECR Public 镜像源 (通常国内可直连) +FROM public.ecr.aws/docker/library/node:22-slim ENV NODE_ENV=production -ENV CACHE_DIR=/app/.cache WORKDIR /app -COPY package.json ./ -RUN corepack enable && pnpm --version && pnpm install --prod +# 1. 替换 Debian 软件源为阿里云镜像 (解决 apt 网络问题) +RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources && \ + apt-get update && \ + apt-get install -y --no-install-recommends ffmpeg && \ + rm -rf /var/lib/apt/lists/* + +# 验证 ffmpeg +RUN ffmpeg -version && ffprobe -version + +# 2. 配置 pnpm 淘宝源并安装依赖 +# 启用 corepack +RUN corepack enable && \ + pnpm config set registry https://registry.npmmirror.com/ + +COPY package.json ./ +RUN pnpm install --prod --frozen-lockfile || pnpm install --prod -# 只复制必要源代码,避免把缓存等无关内容塞进镜像 COPY . . -RUN useradd -m appuser && mkdir -p /app/.cache && chown -R appuser:appuser /app -USER appuser +# 3. 权限与启动 +ENV PORT=9520 +ENV CACHE_DIR=/app/.cache -EXPOSE 9520 +RUN useradd -m appuser && \ + mkdir -p "$CACHE_DIR" && \ + chown -R appuser:appuser /app + +USER appuser +EXPOSE $PORT CMD ["node", "index.js"] diff --git a/index.js b/index.js index 1e7aa53..e33e97f 100644 --- a/index.js +++ b/index.js @@ -16,7 +16,7 @@ const crypto = require('crypto'); const EventEmitter = require('events'); // Configuration -const PORT = 9520; +const PORT = process.env.PORT || 9520; const API_BASE = 'http://183.6.121.121:9558/api'; const CACHE_DIR = process.env.CACHE_DIR ? path.resolve(process.env.CACHE_DIR) : path.join(__dirname, '.cache');