Skip to content

Commit ef166a6

Browse files
committed
feat(docker): 新增并优化针对国内网络的Dockerfile配置
新增两个Dockerfile变体(minimal/simple)并优化现有配置,主要改进包括: - 使用阿里云镜像源加速apt包管理 - 配置USTC Rust镜像源提高crates下载速度 - 简化cargo配置生成方式 - 统一使用bookworm基础镜像 - 优化构建参数和超时设置 移除冗余配置并保持各变体间一致性,提升国内构建速度和可靠性
1 parent 8ef0752 commit ef166a6

File tree

4 files changed

+225
-109
lines changed

4 files changed

+225
-109
lines changed

backend/Dockerfile.china

Lines changed: 28 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,35 @@
1-
# Multi-stage build for Rust backend
1+
# 极简版 Rust 后端 Dockerfile - 针对国内网络优化
22
FROM rust:1.86.0-slim AS chef
33

4-
# 配置国内镜像源加速
4+
# 配置阿里云镜像源
55
RUN echo "deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list && \
66
echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
77
echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list
88

9-
# 配置Rust镜像源和网络超时设置
10-
ENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
11-
ENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
12-
ENV CARGO_NET_RETRY=10
13-
ENV CARGO_NET_TIMEOUT=300
14-
ENV CARGO_HTTP_TIMEOUT=300
15-
ENV CARGO_NET_GIT_FETCH_WITH_CLI=true
9+
# 配置最优Rust镜像源
10+
ENV CARGO_NET_RETRY=3
11+
ENV CARGO_NET_TIMEOUT=60
12+
ENV CARGO_HTTP_TIMEOUT=60
1613

1714
RUN mkdir -p ~/.cargo && \
1815
echo '[source.crates-io]' > ~/.cargo/config.toml && \
1916
echo 'replace-with = "ustc"' >> ~/.cargo/config.toml && \
20-
echo '' >> ~/.cargo/config.toml && \
2117
echo '[source.ustc]' >> ~/.cargo/config.toml && \
2218
echo 'registry = "https://mirrors.ustc.edu.cn/crates.io-index"' >> ~/.cargo/config.toml && \
23-
echo '' >> ~/.cargo/config.toml && \
2419
echo '[net]' >> ~/.cargo/config.toml && \
25-
echo 'retry = 10' >> ~/.cargo/config.toml && \
26-
echo 'timeout = 300' >> ~/.cargo/config.toml && \
27-
echo '' >> ~/.cargo/config.toml && \
28-
echo '[http]' >> ~/.cargo/config.toml && \
29-
echo 'timeout = 300' >> ~/.cargo/config.toml
20+
echo 'retry = 3' >> ~/.cargo/config.toml && \
21+
echo 'timeout = 60' >> ~/.cargo/config.toml
3022

31-
# 预先拉取 cargo-chef 源码以避免网络问题
32-
RUN git clone --depth 1 https://mirrors.ustc.edu.cn/crates.io-index.git /tmp/crates-index || \
33-
git clone --depth 1 https://github.com/rust-lang/crates.io-index.git /tmp/crates-index || true
23+
# 安装系统依赖
24+
RUN apt-get update && apt-get install -y --no-install-recommends \
25+
pkg-config \
26+
libssl-dev \
27+
ca-certificates \
28+
&& rm -rf /var/lib/apt/lists/*
29+
30+
# 安装cargo-chef
31+
RUN cargo install cargo-chef --timeout 300
3432

35-
RUN cargo install cargo-chef --timeout 600
3633
WORKDIR /app
3734

3835
FROM chef AS planner
@@ -42,83 +39,47 @@ RUN cargo chef prepare --recipe-path recipe.json
4239
FROM chef AS builder
4340
COPY --from=planner /app/recipe.json recipe.json
4441

45-
# 配置国内镜像源
46-
RUN echo "deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list && \
47-
echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
48-
echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list
49-
50-
# 配置Rust镜像源和网络超时设置
51-
ENV CARGO_NET_RETRY=10
52-
ENV CARGO_NET_TIMEOUT=300
53-
ENV CARGO_HTTP_TIMEOUT=300
54-
ENV CARGO_NET_GIT_FETCH_WITH_CLI=true
55-
56-
RUN mkdir -p ~/.cargo && \
57-
echo '[source.crates-io]' > ~/.cargo/config.toml && \
58-
echo 'replace-with = "ustc"' >> ~/.cargo/config.toml && \
59-
echo '' >> ~/.cargo/config.toml && \
60-
echo '[source.ustc]' >> ~/.cargo/config.toml && \
61-
echo 'registry = "https://mirrors.ustc.edu.cn/crates.io-index"' >> ~/.cargo/config.toml && \
62-
echo '' >> ~/.cargo/config.toml && \
63-
echo '[net]' >> ~/.cargo/config.toml && \
64-
echo 'retry = 10' >> ~/.cargo/config.toml && \
65-
echo 'timeout = 300' >> ~/.cargo/config.toml && \
66-
echo '' >> ~/.cargo/config.toml && \
67-
echo '[http]' >> ~/.cargo/config.toml && \
68-
echo 'timeout = 300' >> ~/.cargo/config.toml
69-
70-
# Install system dependencies
71-
RUN apt-get update && apt-get install -y \
72-
pkg-config \
73-
libssl-dev \
74-
ca-certificates \
75-
&& rm -rf /var/lib/apt/lists/*
76-
77-
# Build dependencies - this layer is cached
78-
RUN cargo chef cook --release --recipe-path recipe.json --timeout 600
42+
# 构建依赖
43+
RUN cargo chef cook --release --recipe-path recipe.json
7944

80-
# Copy source code and build application
45+
# 复制源码并构建
8146
COPY . .
82-
RUN CARGO_NET_RETRY=10 CARGO_NET_TIMEOUT=300 cargo build --release --timeout 600
47+
RUN cargo build --release
8348

84-
# Runtime stage
49+
# 运行时阶段
8550
FROM debian:bookworm-slim AS runtime
8651

87-
# 配置国内镜像源
52+
# 配置阿里云镜像源
8853
RUN echo "deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list && \
8954
echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
9055
echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list
9156

92-
# Install runtime dependencies
93-
RUN apt-get update && apt-get install -y \
57+
# 安装运行时依赖
58+
RUN apt-get update && apt-get install -y --no-install-recommends \
9459
ca-certificates \
9560
libssl3 \
9661
curl \
97-
&& rm -rf /var/lib/apt/lists/* \
98-
&& apt-get clean
62+
&& rm -rf /var/lib/apt/lists/*
9963

100-
# Create non-root user
64+
# 创建用户
10165
RUN groupadd -r bloguser && useradd -r -g bloguser bloguser
10266

10367
WORKDIR /app
10468

105-
# Copy binary and config
69+
# 复制二进制文件
10670
COPY --from=builder /app/target/release/backend /app/backend
10771
COPY --from=builder /app/config.docker.toml /app/config.toml
10872

109-
# Set ownership
11073
RUN chown -R bloguser:bloguser /app
11174
USER bloguser
11275

11376
EXPOSE 8080
11477

115-
# Health check
11678
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
11779
CMD curl -f http://localhost:8080/health || exit 1
11880

11981
CMD ["./backend"]
12082

121-
# Production optimized stage
12283
FROM runtime AS production
12384
ENV RUST_LOG=info
12485
ENV RUST_BACKTRACE=0

backend/Dockerfile.fast

Lines changed: 38 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,25 @@ ENV CARGO_HTTP_MULTIPLEXING=false
1616

1717
# 创建完整的cargo配置
1818
RUN mkdir -p ~/.cargo && \
19-
cat > ~/.cargo/config.toml << 'EOF'
20-
[source.crates-io]
21-
replace-with = "rsproxy"
22-
23-
[source.rsproxy]
24-
registry = "https://rsproxy.cn/crates.io-index"
25-
26-
[source.rsproxy-sparse]
27-
registry = "sparse+https://rsproxy.cn/index/"
28-
29-
[registries.rsproxy]
30-
index = "https://rsproxy.cn/crates.io-index"
31-
32-
[net]
33-
retry = 3
34-
timeout = 60
35-
36-
[http]
37-
timeout = 60
38-
multiplexing = false
39-
EOF
19+
echo '[source.crates-io]' > ~/.cargo/config.toml && \
20+
echo 'replace-with = "rsproxy"' >> ~/.cargo/config.toml && \
21+
echo '' >> ~/.cargo/config.toml && \
22+
echo '[source.rsproxy]' >> ~/.cargo/config.toml && \
23+
echo 'registry = "https://rsproxy.cn/crates.io-index"' >> ~/.cargo/config.toml && \
24+
echo '' >> ~/.cargo/config.toml && \
25+
echo '[source.rsproxy-sparse]' >> ~/.cargo/config.toml && \
26+
echo 'registry = "sparse+https://rsproxy.cn/index/"' >> ~/.cargo/config.toml && \
27+
echo '' >> ~/.cargo/config.toml && \
28+
echo '[registries.rsproxy]' >> ~/.cargo/config.toml && \
29+
echo 'index = "https://rsproxy.cn/crates.io-index"' >> ~/.cargo/config.toml && \
30+
echo '' >> ~/.cargo/config.toml && \
31+
echo '[net]' >> ~/.cargo/config.toml && \
32+
echo 'retry = 3' >> ~/.cargo/config.toml && \
33+
echo 'timeout = 60' >> ~/.cargo/config.toml && \
34+
echo '' >> ~/.cargo/config.toml && \
35+
echo '[http]' >> ~/.cargo/config.toml && \
36+
echo 'timeout = 60' >> ~/.cargo/config.toml && \
37+
echo 'multiplexing = false' >> ~/.cargo/config.toml
4038

4139
# 跳过cargo-chef安装,直接使用预编译二进制
4240
RUN apt-get update && apt-get install -y --no-install-recommends \
@@ -65,27 +63,25 @@ RUN echo "deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free n
6563

6664
# 复制cargo配置
6765
RUN mkdir -p ~/.cargo && \
68-
cat > ~/.cargo/config.toml << 'EOF'
69-
[source.crates-io]
70-
replace-with = "rsproxy"
71-
72-
[source.rsproxy]
73-
registry = "https://rsproxy.cn/crates.io-index"
74-
75-
[source.rsproxy-sparse]
76-
registry = "sparse+https://rsproxy.cn/index/"
77-
78-
[registries.rsproxy]
79-
index = "https://rsproxy.cn/crates.io-index"
80-
81-
[net]
82-
retry = 3
83-
timeout = 60
84-
85-
[http]
86-
timeout = 60
87-
multiplexing = false
88-
EOF
66+
echo '[source.crates-io]' > ~/.cargo/config.toml && \
67+
echo 'replace-with = "rsproxy"' >> ~/.cargo/config.toml && \
68+
echo '' >> ~/.cargo/config.toml && \
69+
echo '[source.rsproxy]' >> ~/.cargo/config.toml && \
70+
echo 'registry = "https://rsproxy.cn/crates.io-index"' >> ~/.cargo/config.toml && \
71+
echo '' >> ~/.cargo/config.toml && \
72+
echo '[source.rsproxy-sparse]' >> ~/.cargo/config.toml && \
73+
echo 'registry = "sparse+https://rsproxy.cn/index/"' >> ~/.cargo/config.toml && \
74+
echo '' >> ~/.cargo/config.toml && \
75+
echo '[registries.rsproxy]' >> ~/.cargo/config.toml && \
76+
echo 'index = "https://rsproxy.cn/crates.io-index"' >> ~/.cargo/config.toml && \
77+
echo '' >> ~/.cargo/config.toml && \
78+
echo '[net]' >> ~/.cargo/config.toml && \
79+
echo 'retry = 3' >> ~/.cargo/config.toml && \
80+
echo 'timeout = 60' >> ~/.cargo/config.toml && \
81+
echo '' >> ~/.cargo/config.toml && \
82+
echo '[http]' >> ~/.cargo/config.toml && \
83+
echo 'timeout = 60' >> ~/.cargo/config.toml && \
84+
echo 'multiplexing = false' >> ~/.cargo/config.toml
8985

9086
# 快速安装系统依赖
9187
RUN apt-get update && apt-get install -y --no-install-recommends \

backend/Dockerfile.minimal

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# 最简版 Rust 后端 Dockerfile - 无cargo-chef,专为国内网络优化
2+
FROM rust:1.86.0-slim AS builder
3+
4+
# 配置阿里云镜像源
5+
RUN echo "deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list && \
6+
echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
7+
echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list
8+
9+
# 配置Rust镜像源
10+
ENV CARGO_NET_RETRY=3
11+
ENV CARGO_NET_TIMEOUT=60
12+
ENV CARGO_HTTP_TIMEOUT=60
13+
14+
RUN mkdir -p ~/.cargo && \
15+
echo '[source.crates-io]' > ~/.cargo/config.toml && \
16+
echo 'replace-with = "ustc"' >> ~/.cargo/config.toml && \
17+
echo '[source.ustc]' >> ~/.cargo/config.toml && \
18+
echo 'registry = "https://mirrors.ustc.edu.cn/crates.io-index"' >> ~/.cargo/config.toml && \
19+
echo '[net]' >> ~/.cargo/config.toml && \
20+
echo 'retry = 3' >> ~/.cargo/config.toml && \
21+
echo 'timeout = 60' >> ~/.cargo/config.toml
22+
23+
# 安装系统依赖
24+
RUN apt-get update && apt-get install -y --no-install-recommends \
25+
pkg-config \
26+
libssl-dev \
27+
ca-certificates \
28+
&& rm -rf /var/lib/apt/lists/*
29+
30+
WORKDIR /app
31+
32+
# 复制所有源码
33+
COPY . .
34+
35+
# 直接构建(跳过cargo-chef)
36+
RUN cargo build --release
37+
38+
# 运行时阶段
39+
FROM debian:bookworm-slim AS runtime
40+
41+
# 配置阿里云镜像源
42+
RUN echo "deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list && \
43+
echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \
44+
echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list
45+
46+
# 安装运行时依赖
47+
RUN apt-get update && apt-get install -y --no-install-recommends \
48+
ca-certificates \
49+
libssl3 \
50+
curl \
51+
&& rm -rf /var/lib/apt/lists/*
52+
53+
# 创建用户
54+
RUN groupadd -r bloguser && useradd -r -g bloguser bloguser
55+
56+
WORKDIR /app
57+
58+
# 复制二进制文件
59+
COPY --from=builder /app/target/release/backend /app/backend
60+
COPY --from=builder /app/config.docker.toml /app/config.toml
61+
62+
RUN chown -R bloguser:bloguser /app
63+
USER bloguser
64+
65+
EXPOSE 8080
66+
67+
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
68+
CMD curl -f http://localhost:8080/health || exit 1
69+
70+
CMD ["./backend"]
71+
72+
FROM runtime AS production
73+
ENV RUST_LOG=info
74+
ENV RUST_BACKTRACE=0

0 commit comments

Comments
 (0)