mirror of
https://github.com/rustfs/rustfs.git
synced 2026-01-17 01:30:33 +00:00
* refactor(config): Unify S3 API and Console ports This commit streamlines the server configuration by unifying the S3 API and the WebUI (Console) to serve on a single port. Previously, the console was managed by separate configuration options (`RUSTFS_CONSOLE_ENABLE` and `RUSTFS_CONSOLE_ADDRESS`), requiring a distinct port. This added complexity to deployment and configuration. With this change: - The `RUSTFS_CONSOLE_ADDRESS` and `RUSTFS_CONSOLE_FS_ENDPOINT` environment variables are removed. - The WebUI is now always available and served directly from the main application port defined by `RUSTFS_ADDRESS`. - This simplifies setup, reduces the number of exposed ports, and makes the application easier to manage and deploy, especially in containerized environments. Users should update their startup scripts and remove the deprecated `RUSTFS_CONSOLE_*` variables. * improve docker comprose config file and remove docs dir
122 lines
3.8 KiB
Docker
122 lines
3.8 KiB
Docker
# Multi-stage Dockerfile for RustFS
|
|
# Supports cross-compilation for amd64 and arm64 architectures
|
|
ARG TARGETPLATFORM
|
|
ARG BUILDPLATFORM
|
|
|
|
# Build stage
|
|
FROM --platform=$BUILDPLATFORM rust:1.85-bookworm AS builder
|
|
|
|
# Install required build dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
wget \
|
|
git \
|
|
curl \
|
|
unzip \
|
|
gcc \
|
|
pkg-config \
|
|
libssl-dev \
|
|
lld \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install cross-compilation tools for ARM64
|
|
RUN if [ "$TARGETPLATFORM" = "linux/arm64" ]; then \
|
|
apt-get update && \
|
|
apt-get install -y gcc-aarch64-linux-gnu && \
|
|
rm -rf /var/lib/apt/lists/*; \
|
|
fi
|
|
|
|
# Install protoc
|
|
RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v31.1/protoc-31.1-linux-x86_64.zip \
|
|
&& unzip protoc-31.1-linux-x86_64.zip -d protoc3 \
|
|
&& mv protoc3/bin/* /usr/local/bin/ && chmod +x /usr/local/bin/protoc \
|
|
&& mv protoc3/include/* /usr/local/include/ && rm -rf protoc-31.1-linux-x86_64.zip protoc3
|
|
|
|
# Install flatc
|
|
RUN wget https://github.com/google/flatbuffers/releases/download/v25.2.10/Linux.flatc.binary.g++-13.zip \
|
|
&& unzip Linux.flatc.binary.g++-13.zip \
|
|
&& mv flatc /usr/local/bin/ && chmod +x /usr/local/bin/flatc && rm -rf Linux.flatc.binary.g++-13.zip
|
|
|
|
# Set up Rust targets based on platform
|
|
RUN case "$TARGETPLATFORM" in \
|
|
"linux/amd64") rustup target add x86_64-unknown-linux-gnu ;; \
|
|
"linux/arm64") rustup target add aarch64-unknown-linux-gnu ;; \
|
|
*) echo "Unsupported platform: $TARGETPLATFORM" && exit 1 ;; \
|
|
esac
|
|
|
|
# Set up environment for cross-compilation
|
|
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc
|
|
ENV CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc
|
|
ENV CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++
|
|
|
|
WORKDIR /usr/src/rustfs
|
|
|
|
# Copy Cargo files for dependency caching
|
|
COPY Cargo.toml Cargo.lock ./
|
|
COPY */Cargo.toml ./*/
|
|
|
|
# Create dummy main.rs files for dependency compilation
|
|
RUN find . -name "Cargo.toml" -not -path "./Cargo.toml" | \
|
|
xargs -I {} dirname {} | \
|
|
xargs -I {} sh -c 'mkdir -p {}/src && echo "fn main() {}" > {}/src/main.rs'
|
|
|
|
# Build dependencies only (cache layer)
|
|
RUN case "$TARGETPLATFORM" in \
|
|
"linux/amd64") cargo build --release --target x86_64-unknown-linux-gnu ;; \
|
|
"linux/arm64") cargo build --release --target aarch64-unknown-linux-gnu ;; \
|
|
esac
|
|
|
|
# Copy source code
|
|
COPY . .
|
|
|
|
# Generate protobuf code
|
|
RUN cargo run --bin gproto
|
|
|
|
# Build the actual application
|
|
RUN case "$TARGETPLATFORM" in \
|
|
"linux/amd64") \
|
|
cargo build --release --target x86_64-unknown-linux-gnu --bin rustfs && \
|
|
cp target/x86_64-unknown-linux-gnu/release/rustfs /usr/local/bin/rustfs \
|
|
;; \
|
|
"linux/arm64") \
|
|
cargo build --release --target aarch64-unknown-linux-gnu --bin rustfs && \
|
|
cp target/aarch64-unknown-linux-gnu/release/rustfs /usr/local/bin/rustfs \
|
|
;; \
|
|
esac
|
|
|
|
# Runtime stage - Ubuntu minimal for better compatibility
|
|
FROM ubuntu:22.04
|
|
|
|
# Install runtime dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
ca-certificates \
|
|
tzdata \
|
|
wget \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Create rustfs user and group
|
|
RUN groupadd -g 1000 rustfs && \
|
|
useradd -d /app -g rustfs -u 1000 -s /bin/bash rustfs
|
|
|
|
WORKDIR /app
|
|
|
|
# Create data directories
|
|
RUN mkdir -p /data/rustfs{0,1,2,3} && \
|
|
chown -R rustfs:rustfs /data /app
|
|
|
|
# Copy binary from builder stage
|
|
COPY --from=builder /usr/local/bin/rustfs /app/rustfs
|
|
RUN chmod +x /app/rustfs && chown rustfs:rustfs /app/rustfs
|
|
|
|
# Switch to non-root user
|
|
USER rustfs
|
|
|
|
# Expose ports
|
|
EXPOSE 9000
|
|
|
|
# Health check
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
CMD wget --no-verbose --tries=1 --spider http://localhost:9000/health || exit 1
|
|
|
|
# Set default command
|
|
CMD ["/app/rustfs"]
|