From 74d5d2d64452236aa651d370a2609678aba9fc0f Mon Sep 17 00:00:00 2001 From: Dionisio Pozo <58851263+DioCrafts@users.noreply.github.com> Date: Tue, 22 Apr 2025 11:44:46 +0200 Subject: [PATCH] Update Dockerfile --- Dockerfile | 62 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index aed7fae2..5665b9ef 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,19 @@ # Stage 1: Cache dependencies FROM rust:1.85-alpine AS cacher WORKDIR /app + +# Instalar dependencias de compilación optimizadas RUN apk --no-cache upgrade && \ apk add --no-cache musl-dev pkgconfig postgresql-dev gcc perl make + +# Configuración para compilación optimizada +ENV RUSTFLAGS="-C target-cpu=native" +ENV CARGO_NET_RETRY=10 + +# Copiar solo los archivos de dependencias COPY Cargo.toml Cargo.lock ./ -# Create a minimal project to download and cache dependencies + +# Crear un proyecto mínimo para descargar y cachear dependencias RUN mkdir -p src && \ echo 'fn main() { println!("Dummy build for caching dependencies"); }' > src/main.rs && \ cargo build --release && \ @@ -13,41 +22,68 @@ RUN mkdir -p src && \ # Stage 2: Build the application FROM rust:1.85-alpine AS builder WORKDIR /app + +# Instalar dependencias de compilación RUN apk --no-cache upgrade && \ apk add --no-cache musl-dev pkgconfig postgresql-dev gcc perl make -# Copy cached dependencies + +# Configuración para compilación optimizada +ENV RUSTFLAGS="-C target-cpu=native" +ENV CARGO_NET_RETRY=10 + +# Copiar dependencias en caché COPY --from=cacher /app/target target COPY --from=cacher /usr/local/cargo /usr/local/cargo -# Copy ALL files needed for compilation, including static files + +# Copiar archivos de código fuente primero (más propenso a cambiar) COPY src src +COPY Cargo.toml Cargo.lock ./ + +# Copiar recursos estáticos (menos propensos a cambiar) COPY static static COPY db db -COPY Cargo.toml Cargo.lock ./ -# Build with all optimizations + +# Configuración de compilación y compilar con todas las optimizaciones +ARG VERSION=dev +ENV VERSION=${VERSION} ENV DATABASE_URL="postgres://postgres:postgres@postgres/oxicloud" + +# Compilar con optimizaciones de release RUN cargo build --release # Stage 3: Create minimal final image -FROM alpine:3.21.3 -# Install only necessary runtime dependencies and update packages +FROM alpine:3.21.3 AS runtime + +# Metadatos de la imagen +LABEL org.opencontainers.image.title="OxiCloud" +LABEL org.opencontainers.image.description="☁️ OxiCloud server, efficient and secure way to save all your data" +LABEL org.opencontainers.image.licenses="MIT" +LABEL org.opencontainers.image.source="https://github.com/DioCrafts/OxiCloud" +ARG VERSION=dev +LABEL org.opencontainers.image.version=${VERSION} + +# Instalar solo dependencias de tiempo de ejecución necesarias y actualizar paquetes RUN apk --no-cache upgrade && \ apk add --no-cache libgcc ca-certificates libpq tzdata -# Copy only the compiled binary +# Copiar solo el binario compilado COPY --from=builder /app/target/release/oxicloud /usr/local/bin/ -# Copy static files and other resources needed at runtime +# Copiar archivos estáticos y otros recursos necesarios en tiempo de ejecución COPY static /app/static COPY db /app/db -# Create storage directory with proper permissions +# Crear directorio de almacenamiento con permisos adecuados RUN mkdir -p /app/storage && chmod 777 /app/storage -# Set proper permissions +# Establecer permisos adecuados RUN chmod +x /usr/local/bin/oxicloud -# Set working directory +# Establecer directorio de trabajo WORKDIR /app -# Run the application +# Puerto de la aplicación +EXPOSE 8086 + +# Ejecutar la aplicación CMD ["oxicloud"]