cursor2api / Dockerfile
takatorury's picture
Update Dockerfile
acab921 verified
raw
history blame
1.53 kB
# 构建阶段
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"]