convertor/api-server/Dockerfile

101 lines
2.5 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ==============================================================================
# ConvertX-CN API Server Dockerfile
# ==============================================================================
#
# 📦 說明:
# - 這是 ConvertX-CN API Server 的獨立 Dockerfile
# - 使用 Rust 編譯,提供 REST 與 GraphQL API
# - 此 API Server 獨立於 Web UI直接調用轉換引擎
#
# 🔧 建置方式:
# docker build -f api-server/Dockerfile -t convertx-api .
#
# ==============================================================================
# Stage 1: Build
FROM rust:1.75-bookworm AS builder
WORKDIR /app
# Install build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
pkg-config \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
# Copy only Cargo files first for dependency caching
COPY Cargo.toml Cargo.lock* ./
# Create a dummy main.rs to build dependencies
RUN mkdir src && \
echo "fn main() {}" > src/main.rs && \
cargo build --release && \
rm -rf src
# Copy actual source code
COPY src ./src
# Build the actual application
RUN touch src/main.rs && cargo build --release
# Stage 2: Runtime
FROM debian:bookworm-slim AS runtime
WORKDIR /app
# Install runtime dependencies and conversion tools
RUN apt-get update && apt-get install -y --no-install-recommends \
# SSL/TLS support
ca-certificates \
libssl3 \
# Conversion tools (subset - main ones used by API)
ffmpeg \
imagemagick-7.q16 \
graphicsmagick \
libreoffice \
pandoc \
inkscape \
potrace \
libvips-tools \
libheif-examples \
libjxl-tools \
resvg \
dasel \
assimp-utils \
calibre \
ghostscript \
# Python for markitdown
python3 \
python3-pip \
pipx \
&& pipx install "markitdown[all]" \
# Cleanup
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /root/.cache/pip
# Add pipx bin directory to PATH
ENV PATH="/root/.local/bin:${PATH}"
# Copy the compiled binary
COPY --from=builder /app/target/release/convertx-api /usr/local/bin/convertx-api
# Create data directories
RUN mkdir -p /app/data/uploads /app/data/output
# Set environment variables
ENV API_HOST=0.0.0.0
ENV API_PORT=3001
ENV UPLOAD_DIR=/app/data/uploads
ENV OUTPUT_DIR=/app/data/output
ENV RUST_LOG=convertx_api=info,tower_http=info
# Expose API port
EXPOSE 3001/tcp
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:3001/health || exit 1
# Run the API server
ENTRYPOINT ["/usr/local/bin/convertx-api"]