Dockerfile 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. FROM python:3.12-alpine
  2. # 配置 APK standard repositories and install LibreOffice 及 dependencies
  3. RUN echo "https://dl-cdn.alpinelinux.org/alpine/v3.19/main" > /etc/apk/repositories && \
  4. echo "https://dl-cdn.alpinelinux.org/alpine/v3.19/community" >> /etc/apk/repositories && \
  5. apk update && \
  6. apk add --no-cache \
  7. libreoffice \
  8. libreoffice-common \
  9. libreoffice-writer \
  10. libreoffice-impress \
  11. libreoffice-calc \
  12. font-noto \
  13. font-noto-cjk \
  14. ttf-dejavu \
  15. imagemagick \
  16. && rm -rf /var/cache/apk/*
  17. # 安装 Python 依赖
  18. COPY requirements.txt .
  19. RUN pip install --no-cache-dir -r requirements.txt
  20. # Install Node.js, Chromium, and essential dependencies for Puppeteer
  21. RUN apk add --no-cache \
  22. nodejs \
  23. npm \
  24. chromium \
  25. nss \
  26. freetype \
  27. harfbuzz \
  28. ca-certificates \
  29. ttf-dejavu \
  30. && rm -rf /var/cache/apk/*
  31. # Configure Puppeteer to use installed Chromium
  32. ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
  33. PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
  34. # Install Node dependencies
  35. COPY package.json .
  36. RUN npm install --registry=https://registry.npmmirror.com
  37. WORKDIR /app
  38. COPY main.py /app/
  39. COPY md_to_pdf.js /app/
  40. # Link node_modules to app directory so the script can find required modules
  41. RUN ln -sf /node_modules /app/node_modules
  42. # 创建挂载目录
  43. RUN mkdir -p /app/uploads /temp
  44. # 暴露端口
  45. EXPOSE 8100
  46. # 启动 FastAPI
  47. CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8100", "--workers", "2"]