Dockerfile 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # Multi-stage Dockerfile for Spry Framework Website
  2. # Build stage: Compile the Vala application
  3. FROM fedora:43 AS builder
  4. # Install build dependencies
  5. RUN dnf install -y \
  6. meson \
  7. ninja-build \
  8. gcc \
  9. vala \
  10. glib2-devel \
  11. gobject-introspection-devel \
  12. json-glib-devel \
  13. libxml2-devel \
  14. zlib-devel \
  15. libzstd-devel \
  16. libgee-devel \
  17. brotli-devel \
  18. libmicrohttpd-devel \
  19. git \
  20. pkg-config \
  21. && dnf clean all
  22. # Clone and build invercargill library
  23. WORKDIR /build
  24. RUN git clone https://fabrica.unitatem.net/Tilo15/Invercargill.git invercargill && \
  25. cd invercargill && \
  26. meson setup src builddir --prefix=/usr && \
  27. ninja -C builddir && \
  28. ninja -C builddir install
  29. # Clone and build invercargill-json library
  30. RUN git clone https://git.sr.ht/~tilo15/Invercargill-Json invercargill-json && \
  31. cd invercargill-json && \
  32. meson setup src builddir --prefix=/usr && \
  33. ninja -C builddir && \
  34. ninja -C builddir install
  35. # Clone and build inversion library (depends on invercargill)
  36. RUN git clone https://fabrica.unitatem.net/Tilo15/inversion.git inversion && \
  37. cd inversion && \
  38. meson setup builddir --prefix=/usr && \
  39. ninja -C builddir && \
  40. ninja -C builddir install
  41. # Clone and build astralis library (depends on invercargill, invercargill-json, inversion)
  42. RUN git clone https://fabrica.unitatem.net/Tilo15/astralis.git astralis && \
  43. cd astralis && \
  44. meson setup builddir --prefix=/usr && \
  45. ninja -C builddir && \
  46. ninja -C builddir install && \
  47. # Copy the Spry project source
  48. COPY . /build/spry
  49. # Build the Spry library and website
  50. WORKDIR /build/spry
  51. RUN meson setup builddir --prefix=/usr && \
  52. ninja -C builddir && \
  53. ninja -C builddir install
  54. # Runtime stage: Minimal image with only necessary runtime libraries
  55. FROM fedora:43 AS runtime
  56. # Install runtime dependencies only
  57. RUN dnf install -y \
  58. glib2 \
  59. json-glib \
  60. libxml2 \
  61. zlib \
  62. libzstd \
  63. brotli \
  64. libmicrohttpd \
  65. libgee \
  66. && dnf clean all
  67. # Copy built libraries and executable from builder
  68. COPY --from=builder /usr/lib64/libinvercargill*.so* /usr/lib64/
  69. COPY --from=builder /usr/lib64/libinvercargill-json*.so* /usr/lib64/
  70. COPY --from=builder /usr/lib64/libinversion*.so* /usr/lib64/
  71. COPY --from=builder /usr/lib64/libastralis*.so* /usr/lib64/
  72. COPY --from=builder /usr/lib64/libspry*.so* /usr/lib64/
  73. COPY --from=builder /usr/lib64/girepository-1.0/*.typelib /usr/lib64/girepository-1.0/
  74. COPY --from=builder /usr/bin/spry-website /usr/bin/
  75. # Update library cache
  76. RUN ldconfig
  77. # Expose the default port
  78. EXPOSE 8080
  79. # Set environment variables
  80. ENV PORT=8080
  81. # Run the website
  82. CMD ["spry-website", "8080"]