Use multi-stage build with pentacent/keila image

This commit is contained in:
Andreas Dueren
2025-06-20 08:02:49 -06:00
parent 2ae04de2fd
commit 09ad85510f
2 changed files with 15 additions and 21 deletions

View File

@ -1,32 +1,22 @@
FROM cloudron/base:4.2.0 FROM cloudron/base:4.2.0
# Install dependencies # Use Keila's prebuilt image as base for the release
RUN mkdir -p /app/code /app/data FROM pentacent/keila:0.14 as keila-build
WORKDIR /app/code
# Install Erlang and Elixir from Ubuntu repos FROM cloudron/base:4.2.0
# Install runtime dependencies
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y erlang elixir \ && apt-get install -y postgresql-client \
&& apt-get install -y git build-essential cmake nodejs npm postgresql-client \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
# Set environment variables # Create directories
ENV MIX_ENV=prod RUN mkdir -p /app/code /app/data
# Clone and build Keila # Copy Keila from build stage
RUN git clone --depth 1 --branch v0.14.7 https://github.com/pentacent/keila.git . \ COPY --from=keila-build /opt/app /tmp/keila-release
&& mix local.hex --force \
&& mix local.rebar --force \
&& mix deps.get --only prod \
&& mix deps.compile \
&& cd assets && npm ci && npm run deploy && cd .. \
&& mix phx.digest \
&& mix release
# Copy initialization data # Copy configuration files
RUN cp -r _build/prod/rel/keila /tmp/keila-release
# Copy start script
COPY start.sh /app/code/start.sh COPY start.sh /app/code/start.sh
COPY nginx.conf /etc/nginx/sites-available/default COPY nginx.conf /etc/nginx/sites-available/default
@ -34,6 +24,8 @@ COPY nginx.conf /etc/nginx/sites-available/default
RUN chmod +x /app/code/start.sh \ RUN chmod +x /app/code/start.sh \
&& chown -R cloudron:cloudron /app/code /app/data /tmp/keila-release && chown -R cloudron:cloudron /app/code /app/data /tmp/keila-release
WORKDIR /app/code
EXPOSE 4000 EXPOSE 4000
CMD ["/app/code/start.sh"] CMD ["/app/code/start.sh"]

View File

@ -65,4 +65,6 @@ sudo -u cloudron -E /app/data/keila/bin/keila eval "Keila.Release.migrate()"
echo "==> Starting Keila application" echo "==> Starting Keila application"
cd /app/data/keila cd /app/data/keila
# Change the internal port since nginx listens on 4000
export PORT="4001"
exec sudo -u cloudron -E /app/data/keila/bin/keila start exec sudo -u cloudron -E /app/data/keila/bin/keila start