kioai / Dockerfile
kines9661's picture
Upload 279 files
62c2e34 verified
FROM node:20-slim
# 安裝 pnpm 和必要工具
RUN npm install -g pnpm && \
apt-get update && \
apt-get install -y python3 make g++ && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
# 複製 pnpm 配置
COPY .npmrc ./
# 複製 workspace 配置(使用 HF 優化版本)
COPY package.json pnpm-lock.yaml ./
COPY pnpm-workspace-hf.yaml ./pnpm-workspace.yaml
COPY tsconfig.base.json tsconfig.json ./
# 複製所有 packages 和啟動腳本
COPY artifacts ./artifacts
COPY lib ./lib
COPY start.sh ./start.sh
RUN chmod +x ./start.sh
# 安裝依賴
RUN pnpm install --no-frozen-lockfile
# 強制重新編譯 better-sqlite3 原生模組
RUN echo "=== Rebuilding better-sqlite3 ===" && \
cd node_modules/.pnpm/better-sqlite3@*/node_modules/better-sqlite3 && \
npm run build-release && \
echo "=== better-sqlite3 rebuild completed ==="
# 驗證關鍵依賴
RUN echo "=== Checking esbuild ===" && pnpm list esbuild || echo "esbuild not found"
RUN echo "=== Checking vite ===" && pnpm list vite || echo "vite not found"
RUN echo "=== Checking typescript ===" && pnpm list typescript || echo "typescript not found"
# 設定建置時需要的環境變數
ENV NODE_ENV=production
ENV PORT=7860
ENV DATABASE_URL=file:/data/sqlite.db
ENV TEMP_STORAGE_PATH=/app/temp-storage
ENV NODE_PATH=/app/node_modules
# 建置前端
RUN echo "=== Starting frontend build ===" && \
cd artifacts/image-gen && \
pnpm run build && \
echo "=== Frontend build completed ==="
# 建置後端
RUN echo "=== Starting backend build ===" && \
cd artifacts/api-server && \
pnpm run build && \
echo "=== Backend build completed ==="
# 驗證 better-sqlite3 是否已安裝
RUN echo "=== Checking better-sqlite3 ===" && \
pnpm list better-sqlite3 || echo "better-sqlite3 not found in workspace" && \
ls -la node_modules/.pnpm/ | grep better-sqlite3 || echo "better-sqlite3 not in .pnpm"
# 建立資料和暫存目錄
RUN mkdir -p /data /app/temp-storage && \
chmod 777 /data /app/temp-storage
# 暴露 Hugging Face Spaces 預設端口
EXPOSE 7860
# 啟動命令(使用腳本確保從正確的目錄執行)
CMD ["./start.sh"]