File size: 2,231 Bytes
62c2e34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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"]