File size: 1,526 Bytes
2610f09
 
6a4ab6a
2610f09
793bc3b
 
 
acab921
 
 
 
 
 
 
 
 
793bc3b
 
 
 
acab921
 
 
 
 
 
 
 
 
 
 
 
 
 
793bc3b
 
2610f09
793bc3b
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# 构建阶段
FROM --platform=$TARGETPLATFORM rustlang/rust:nightly-bookworm-slim as builder

# TARGETARCH会自动由Docker buildx设置
ARG TARGETARCH

WORKDIR /app

# 先复制Cargo.toml和Cargo.lock文件以利用Docker缓存
COPY Cargo.toml Cargo.lock* ./
# 创建一个临时的src目录和main.rs,这样cargo可以解析依赖
RUN mkdir -p src && \
    echo "fn main() {println!(\"placeholder\");}" > src/main.rs && \
    cargo fetch

# 安装依赖
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    build-essential protobuf-compiler pkg-config libssl-dev nodejs npm openssl \
    && rm -rf /var/lib/apt/lists/*

# 复制源代码
COPY src ./src
COPY build.rs* ./
COPY proto* ./proto/

# 构建项目
RUN case "$TARGETARCH" in \
    amd64) TARGET_CPU="x86-64-v2" ;; \
    arm64) TARGET_CPU="neoverse-n1" ;; \
    *) echo "Unsupported architecture: $TARGETARCH" && exit 1 ;; \
    esac && \
    RUSTFLAGS="-C link-arg=-s -C target-cpu=$TARGET_CPU" cargo +nightly build --release && \
    cp target/release/cursor-api /app/cursor-api

# 运行阶段
FROM --platform=$TARGETPLATFORM debian:bookworm-slim

WORKDIR /app
ENV TZ=Asia/Shanghai
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    ca-certificates tzdata openssl \
    && rm -rf /var/lib/apt/lists/* && \
    groupadd -r cursorapi && useradd -r -g cursorapi cursorapi
COPY --from=builder /app/cursor-api .
RUN chown -R cursorapi:cursorapi /app
ENV PORT=3000
EXPOSE ${PORT}
USER cursorapi
CMD ["./cursor-api"]