Spaces:
Running
Running
Create Dockerfile
Browse files- Dockerfile +54 -0
Dockerfile
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 多阶段构建:WebUI 构建阶段
|
| 2 |
+
FROM node:24 AS webui-builder
|
| 3 |
+
|
| 4 |
+
# 安装git、克隆代码、清理构建依赖
|
| 5 |
+
RUN apt-get update && \
|
| 6 |
+
apt-get install -y --no-install-recommends git && \
|
| 7 |
+
git clone -b dev --single-branch https://github.com/CJackHwang/ds2api.git /app && \
|
| 8 |
+
apt purge -y git && \
|
| 9 |
+
apt autoremove -y && \
|
| 10 |
+
rm -rf /var/lib/apt/lists/*
|
| 11 |
+
|
| 12 |
+
# 构建前端
|
| 13 |
+
WORKDIR /app/webui
|
| 14 |
+
RUN npm ci && npm run build
|
| 15 |
+
|
| 16 |
+
# Go 构建阶段
|
| 17 |
+
FROM golang:1.26 AS go-builder
|
| 18 |
+
|
| 19 |
+
WORKDIR /app
|
| 20 |
+
ARG BUILD_VERSION
|
| 21 |
+
COPY --from=webui-builder /app/go.mod /app/go.sum* ./
|
| 22 |
+
RUN go mod download
|
| 23 |
+
COPY --from=webui-builder /app ./
|
| 24 |
+
RUN BUILD_VERSION_RESOLVED="${BUILD_VERSION:-}"; \
|
| 25 |
+
if [ -z "${BUILD_VERSION_RESOLVED}" ] && [ -f VERSION ]; then \
|
| 26 |
+
BUILD_VERSION_RESOLVED="$(cat VERSION | tr -d "[:space:]")"; \
|
| 27 |
+
fi; \
|
| 28 |
+
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -buildvcs=false -ldflags="-s -w -X ds2api/internal/version.BuildVersion=${BUILD_VERSION_RESOLVED}" -o /out/ds2api ./cmd/ds2api
|
| 29 |
+
|
| 30 |
+
# 运行阶段
|
| 31 |
+
FROM debian:bookworm-slim
|
| 32 |
+
|
| 33 |
+
WORKDIR /app
|
| 34 |
+
|
| 35 |
+
# 安装必要的依赖并创建用户
|
| 36 |
+
RUN apt-get update && \
|
| 37 |
+
apt-get install -y --no-install-recommends ca-certificates && \
|
| 38 |
+
groupadd -r ds2api && useradd -r -g ds2api -d /app -s /sbin/nologin ds2api && \
|
| 39 |
+
mkdir -p /app/data /data && chown -R ds2api:ds2api /app /data && \
|
| 40 |
+
rm -rf /var/lib/apt/lists/*
|
| 41 |
+
|
| 42 |
+
# 复制构建产物
|
| 43 |
+
COPY --from=go-builder /out/ds2api /usr/local/bin/ds2api
|
| 44 |
+
COPY --from=go-builder --chown=ds2api:ds2api /app/config.example.json /app/config.example.json
|
| 45 |
+
COPY --from=webui-builder --chown=ds2api:ds2api /app/static/admin /app/static/admin
|
| 46 |
+
|
| 47 |
+
# 配置端口
|
| 48 |
+
ENV PORT=7860
|
| 49 |
+
EXPOSE 7860
|
| 50 |
+
|
| 51 |
+
USER ds2api
|
| 52 |
+
|
| 53 |
+
# 启动服务
|
| 54 |
+
CMD ["/usr/local/bin/ds2api"]
|