feat(config): integrate etcd-based configuration management

- Add etcd-client dependency with TLS support
- Implement EtcdConfig struct for reading config values with priority: etcd > env > default
- Add ServiceRegistry for service discovery registration in etcd
- Create from_etcd method in AppConfig for loading SMTP configuration
- Update main.rs to use etcd-based config loading with fallback mechanism
- Add etcd module with client connection and key-value operations
- Modify Dockerfile to use cargo-chef for faster builds
- Add docker-compose.yaml for emailks service deployment
- Include AGENTS.md with development guidelines and best practices
- Add build.sh script for podman-based container building
- Update dependencies in Cargo.toml and Cargo.lock
This commit is contained in:
zhenyi
2026-06-12 16:21:04 +08:00
parent c4824ef261
commit 7b8d0714e7
10 changed files with 759 additions and 51 deletions
+23 -28
View File
@@ -1,38 +1,33 @@
# ---- builder ----
FROM rust:1.96-slim-bookworm AS builder
RUN apt-get update && apt-get install -y --no-install-recommends \
pkg-config \
libssl-dev \
protobuf-compiler \
&& rm -rf /var/lib/apt/lists/*
FROM rust:1.96-bookworm AS chef
RUN apt-get update && \
apt-get install -y --no-install-recommends \
protobuf-compiler libprotobuf-dev \
pkg-config libssl-dev \
mold clang && \
rm -rf /var/lib/apt/lists/*
RUN cargo install cargo-chef
WORKDIR /app
# Cache dependencies
COPY Cargo.toml Cargo.lock ./
COPY build.rs ./
COPY proto/ proto/
RUN echo '' >lib.rs && \
echo 'fn main() {}' >main.rs && \
cargo build --release --bin emailks; \
rm -f lib.rs main.rs
FROM chef AS planner
COPY . .
RUN cargo chef prepare --recipe-path recipe.json
# Build real binary
FROM chef AS builder
COPY --from=planner /app/recipe.json recipe.json
RUN cargo chef cook --release --recipe-path recipe.json
COPY . .
RUN cargo build --release --bin emailks && \
cp target/release/emailks /app/emailks
strip target/release/emailks
# ---- runtime ----
FROM debian:bookworm-slim
FROM ubuntu:26.04
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates libssl3 && \
rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/release/emailks /usr/local/bin/emailks
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
libssl3 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/emailks /usr/local/bin/emailks
ENV EMAILKS_HOST=0.0.0.0
ENV EMAILKS_PORT=50051
EXPOSE 50051
ENTRYPOINT ["emailks"]