Skip to content

Commit 1f9526a

Browse files
committed
fix docker build
fix
1 parent 5cc9aa9 commit 1f9526a

2 files changed

Lines changed: 57 additions & 47 deletions

File tree

Dockerfile

Lines changed: 56 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,78 @@
1+
12
# syntax=docker/dockerfile:1
23

3-
FROM alpine:3.18
4+
# 构建阶段
5+
FROM alpine:3.18 AS builder
6+
7+
ENV VENV_PATH="/opt/venv"
8+
9+
# 安装构建依赖
10+
RUN apk add --no-cache \
11+
python3 \
12+
python3-dev \
13+
gcc \
14+
musl-dev \
15+
libffi-dev \
16+
rust \
17+
cargo \
18+
curl
19+
20+
# 安装 uv
21+
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
22+
ENV PATH="/root/.local/bin:$PATH"
23+
24+
# 设置工作目录
25+
WORKDIR /build
26+
27+
# 复制依赖文件并安装(这层会被缓存,除非依赖文件改变)
28+
COPY backend/pyproject.toml backend/uv.lock ./
29+
30+
# 安装Python依赖
31+
RUN uv sync --frozen --no-dev && mv .venv $VENV_PATH
32+
33+
# 运行阶段
34+
FROM alpine:3.18 AS runtime
435

536
ENV LANG="C.UTF-8" \
637
TZ=Asia/Shanghai \
738
PUID=1000 \
839
PGID=1000 \
940
UMASK=022 \
10-
PATH="/root/.local/bin:$PATH"
41+
VENV_PATH="/opt/venv" \
42+
PATH="/opt/venv/bin:/root/.local/bin:$PATH"
1143

1244
WORKDIR /app
1345

14-
# Copy Python project files
15-
COPY backend/pyproject.toml backend/uv.lock ./
16-
46+
# 只安装运行时依赖
1747
RUN set -ex && \
1848
apk add --no-cache \
19-
bash \
20-
busybox-suid \
21-
python3 \
22-
python3-dev \
23-
py3-aiohttp \
24-
py3-bcrypt \
25-
curl \
26-
gcc \
27-
musl-dev \
28-
libffi-dev \
29-
su-exec \
30-
shadow \
31-
tini \
32-
openssl \
33-
tzdata \
34-
rust \
35-
cargo && \
36-
# Install uv
37-
curl -LsSf https://astral.sh/uv/install.sh | sh && \
38-
# Verify uv installation and show version
39-
uv --version && \
40-
# Check if lock file exists and is readable
41-
ls -la uv.lock && \
42-
# Install dependencies using uv
43-
uv sync --frozen --no-dev && \
44-
# Remove build dependencies to reduce image size
45-
apk del \
46-
rust \
47-
cargo \
48-
gcc \
49-
musl-dev \
50-
libffi-dev \
51-
python3-dev && \
52-
# Add user
49+
bash \
50+
busybox-suid \
51+
python3 \
52+
py3-aiohttp \
53+
py3-bcrypt \
54+
curl \
55+
su-exec \
56+
shadow \
57+
tini \
58+
openssl \
59+
tzdata && \
60+
# 添加用户
5361
mkdir -p /home/ab && \
5462
addgroup -S ab -g 911 && \
5563
adduser -S ab -G ab -h /home/ab -s /sbin/nologin -u 911 && \
56-
# Clear
57-
rm -rf \
58-
/root/.cache \
59-
/root/.local \
60-
/tmp/*
64+
# 清理缓存
65+
rm -rf /var/cache/apk/* /tmp/*
66+
67+
# 从构建阶段复制虚拟环境
68+
COPY --from=builder $VENV_PATH $VENV_PATH
6169

70+
# 复制应用代码(放在最后,因为代码变更最频繁)
6271
COPY --chmod=755 backend/src/. .
6372
COPY --chmod=755 entrypoint.sh /entrypoint.sh
6473

6574
ENTRYPOINT ["tini", "-g", "--", "/entrypoint.sh"]
66-
6775
EXPOSE 7892
68-
VOLUME [ "/app/config" , "/app/data" ]
76+
VOLUME [ "/app/config" , "/app/data" ]
77+
78+

entrypoint.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ usermod -o -u "${PUID}" ab
1212

1313
chown ab:ab -R /app /home/ab
1414

15-
exec su-exec "${PUID}:${PGID}" /app/.venv/bin/python main.py
15+
exec su-exec "${PUID}:${PGID}" ${VENV_PATH}/bin/python main.py

0 commit comments

Comments
 (0)