build(docker): 优化Docker配置并添加国内镜像源
- 将基础镜像替换为AWS ECR公共镜像 - 使用阿里云镜像源加速apt安装 - 配置pnpm使用淘宝源 - 优化Dockerfile结构并添加ffmpeg验证 - 添加.dockerignore文件排除不必要文件
This commit is contained in:
8
.dockerignore
Normal file
8
.dockerignore
Normal file
@@ -0,0 +1,8 @@
|
||||
node_modules
|
||||
npm-debug.log
|
||||
pnpm-debug.log
|
||||
Dockerfile
|
||||
.git
|
||||
.gitignore
|
||||
.dockerignore
|
||||
README.md
|
||||
38
Dockerfile
38
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"]
|
||||
|
||||
2
index.js
2
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');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user