File size: 1,484 Bytes
5a399c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# -------- 基础镜像 --------
FROM debian:bookworm-slim

ENV DEBIAN_FRONTEND=noninteractive \
    DENO_INSTALL=/usr/local

# 系统依赖 + 安装 Deno + pip依赖
RUN apt-get update -qq && \
    apt-get install -y --no-install-recommends \
        curl git sqlite3 ca-certificates python3 python3-pip unzip && \
    pip3 install --no-cache-dir --break-system-packages requests webdavclient3 && \
    curl -fsSL https://deno.land/install.sh | sh && \
    ln -s /usr/local/bin/deno /usr/bin/deno && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# 新建与 Spaces 运行时一致的普通用户
RUN useradd -m -u 1000 deno
USER deno
WORKDIR /app
ENV HOME=/home/deno \
    DENO_DIR=/home/deno/.cache/deno

# 拉取 QBin 源码 & 预缓存依赖
RUN git clone --depth=1 https://github.com/Quick-Bin/qbin.git . && \
    deno cache --node-modules-dir index.ts

# 数据库生成 & 迁移
ENV DB_CLIENT=sqlite \
    SQLITE_URL="file:data/qbin_local.db"
RUN mkdir -p data && \
    sed -i -e 's/"deno"/"no-deno"/' node_modules/@libsql/client/package.json && \
    deno task db:generate && \
    deno task db:migrate && \
    deno task db:push && \
    sed -i -e 's/"no-deno"/"deno"/' node_modules/@libsql/client/package.json

COPY --chown=deno:deno --chmod=755 sync_data.sh ./sync_data.sh

# 运行参数
ENV PORT=8000
EXPOSE 8000

CMD bash -c '\
  ./sync_data.sh && \
  deno run -NER --allow-ffi --allow-sys --unstable-kv --unstable-broadcast-channel index.ts --port ${PORT:-8000}'