|
|
@@ -0,0 +1,96 @@
|
|
|
+# Multi-stage Dockerfile for Spry Framework Website
|
|
|
+# Build stage: Compile the Vala application
|
|
|
+FROM fedora:43 AS builder
|
|
|
+
|
|
|
+# Install build dependencies
|
|
|
+RUN dnf install -y \
|
|
|
+ meson \
|
|
|
+ ninja-build \
|
|
|
+ gcc \
|
|
|
+ vala \
|
|
|
+ glib2-devel \
|
|
|
+ gobject-introspection-devel \
|
|
|
+ json-glib-devel \
|
|
|
+ libxml2-devel \
|
|
|
+ zlib-devel \
|
|
|
+ libzstd-devel \
|
|
|
+ libgee-devel \
|
|
|
+ brotli-devel \
|
|
|
+ libmicrohttpd-devel \
|
|
|
+ git \
|
|
|
+ pkg-config \
|
|
|
+ && dnf clean all
|
|
|
+
|
|
|
+# Clone and build invercargill library
|
|
|
+WORKDIR /build
|
|
|
+RUN git clone https://fabrica.unitatem.net/Tilo15/Invercargill.git invercargill && \
|
|
|
+ cd invercargill && \
|
|
|
+ meson setup src builddir --prefix=/usr && \
|
|
|
+ ninja -C builddir && \
|
|
|
+ ninja -C builddir install
|
|
|
+
|
|
|
+# Clone and build invercargill-json library
|
|
|
+RUN git clone https://git.sr.ht/~tilo15/Invercargill-Json invercargill-json && \
|
|
|
+ cd invercargill-json && \
|
|
|
+ meson setup src builddir --prefix=/usr && \
|
|
|
+ ninja -C builddir && \
|
|
|
+ ninja -C builddir install
|
|
|
+
|
|
|
+# Clone and build inversion library (depends on invercargill)
|
|
|
+RUN git clone https://fabrica.unitatem.net/Tilo15/inversion.git inversion && \
|
|
|
+ cd inversion && \
|
|
|
+ meson setup builddir --prefix=/usr && \
|
|
|
+ ninja -C builddir && \
|
|
|
+ ninja -C builddir install
|
|
|
+
|
|
|
+# Clone and build astralis library (depends on invercargill, invercargill-json, inversion)
|
|
|
+RUN git clone https://fabrica.unitatem.net/Tilo15/astralis.git astralis && \
|
|
|
+ cd astralis && \
|
|
|
+ meson setup builddir --prefix=/usr && \
|
|
|
+ ninja -C builddir && \
|
|
|
+ ninja -C builddir install && \
|
|
|
+
|
|
|
+# Copy the Spry project source
|
|
|
+COPY . /build/spry
|
|
|
+
|
|
|
+# Build the Spry library and website
|
|
|
+WORKDIR /build/spry
|
|
|
+RUN meson setup builddir --prefix=/usr && \
|
|
|
+ ninja -C builddir && \
|
|
|
+ ninja -C builddir install
|
|
|
+
|
|
|
+# Runtime stage: Minimal image with only necessary runtime libraries
|
|
|
+FROM fedora:43 AS runtime
|
|
|
+
|
|
|
+# Install runtime dependencies only
|
|
|
+RUN dnf install -y \
|
|
|
+ glib2 \
|
|
|
+ json-glib \
|
|
|
+ libxml2 \
|
|
|
+ zlib \
|
|
|
+ libzstd \
|
|
|
+ brotli \
|
|
|
+ libmicrohttpd \
|
|
|
+ libgee \
|
|
|
+ && dnf clean all
|
|
|
+
|
|
|
+# Copy built libraries and executable from builder
|
|
|
+COPY --from=builder /usr/lib64/libinvercargill*.so* /usr/lib64/
|
|
|
+COPY --from=builder /usr/lib64/libinvercargill-json*.so* /usr/lib64/
|
|
|
+COPY --from=builder /usr/lib64/libinversion*.so* /usr/lib64/
|
|
|
+COPY --from=builder /usr/lib64/libastralis*.so* /usr/lib64/
|
|
|
+COPY --from=builder /usr/lib64/libspry*.so* /usr/lib64/
|
|
|
+COPY --from=builder /usr/lib64/girepository-1.0/*.typelib /usr/lib64/girepository-1.0/
|
|
|
+COPY --from=builder /usr/bin/spry-website /usr/bin/
|
|
|
+
|
|
|
+# Update library cache
|
|
|
+RUN ldconfig
|
|
|
+
|
|
|
+# Expose the default port
|
|
|
+EXPOSE 8080
|
|
|
+
|
|
|
+# Set environment variables
|
|
|
+ENV PORT=8080
|
|
|
+
|
|
|
+# Run the website
|
|
|
+CMD ["spry-website", "8080"]
|