Files
IDHAN/Dockerfile

104 lines
2.6 KiB
Docker

# Multi-stage build for IDHANServer
# Stage 1: Build environment
FROM ubuntu:24.04 AS builder
RUN apt-get update && DEBIAN_FRONTNED=noninteractive apt-get install -y \
build-essential \
cmake \
git \
pkg-config \
gcc-14 \
g++-14 \
ccache \
libpq-dev \
liburing-dev \
qt6-base-dev \
qt6-multimedia-dev \
libqt6core6 \
libqt6multimedia6 \
libjsoncpp-dev \
libvips-dev
# Set C++23 capable compiler as default
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 100 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 100
RUN rm -rf /var/lib/apt/lists/*
WORKDIR /build
COPY . /build/
# Initialize git submodules if needed
RUN if [ -f .gitmodules ]; then git submodule update --init --recursive || true; fi
# Build IDHANServer
RUN cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_STANDARD=23 \
-DBUILD_IDHAN_TESTS=OFF \
-DBUILD_HYDRUS_IMPORTER=OFF \
-DBUILD_IDHAN_DOCS=ON \
-DBUILD_IDHAN_WEBUI=OFF \
-DBUILD_IDHAN_CLIENT=OFF \
-DBUILD_IDHAN_TOOLS=OFF
ENV CCACHE_DIR=/root/.ccache
RUN --mount=type=cache,target=/root/.ccache \
cmake --build build --target IDHANServer -j$(nproc)
# Stage 2: Runtime environment
FROM ubuntu:24.04
RUN apt-get update
# Install runtime dependencies only
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \
# Qt6 runtime libraries
libqt6core6 \
libqt6multimedia6 \
# PostgreSQL client
libpq5 \
# Image processing
libvips42 \
# Async I/O
liburing2 \
# Supporting libraries
libjsoncpp25 \
uuid-runtime \
zlib1g \
libssl3 \
libc-ares2
# Cleanup
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/*
# Create directories
RUN mkdir -p /usr/share/idhan/
# Copy built artifacts from builder stage
COPY --from=builder /build/build/bin/IDHANServer/ /usr/bin/IDHANServer
COPY --from=builder /build/build/bin/static/ /usr/share/idhan/static
COPY --from=builder /build/build/bin/modules/ /usr/share/idhan/modules
COPY --from=builder /build/build/bin/mime/ /usr/share/idhan/mime
COPY --from=builder /build/build/bin/config.toml /usr/share/idhan/config.toml
# Environment variables for database configuration
ENV IDHAN_DATABASE_HOST=localhost \
IDHAN_DATABASE_USER=idhan \
IDHAN_DATABASE_PASSWORD=idhan \
IDHAN_DATABASE_DATABASE=idhan-db \
IDHAN_THUMBNAILS_PATH=/thumbnails \
IDHAN_HOST_IPV4_LISTEN=0.0.0.0 \
IDHAN_HOST_IPV6_LISTEN=::
RUN chmod +x /usr/bin/IDHANServer
# Expose default port (adjust based on your config)
EXPOSE 16609
# Default entrypoint
ENTRYPOINT ["/usr/bin/IDHANServer"]