Files
koodo-reader/Dockerfile

56 lines
1.8 KiB
Docker

FROM node:20-slim as builder
RUN apt-get update && apt-get install -y jq curl wget python3 git
WORKDIR /app
### Get the latest release source code tarball
# RUN tarball_url=$(curl -s https://api.github.com/repos/koodo-reader/koodo-reader/releases/latest | jq -r ".tarball_url") \
# && wget -qO- $tarball_url \
# | tar xvfz - --strip 1
RUN git clone https://github.com/koodo-reader/koodo-reader.git . && \
git checkout master
### --network-timeout 1000000 as a workaround for slow devices
### when the package being installed is too large, Yarn assumes it's a network problem and throws an error
RUN yarn --ignore-scripts --network-timeout 1000000
### Separate `yarn build` layer as a workaround for devices with low RAM.
### If build fails due to OOM, `yarn install` layer will be already cached.
RUN yarn --ignore-scripts\
&& yarn build
### Nginx or Apache can also be used, Caddy is just smaller in size
FROM caddy:latest
# Install Node.js in the Caddy image
RUN apk add --no-cache nodejs npm
# Copy built website files to Caddy
COPY --from=builder /app/build /usr/share/caddy
# Copy httpServer.js
COPY --from=builder /app/httpServer.js /app/httpServer.js
# Create uploads directory with proper permissions
RUN mkdir -p /app/uploads && \
chmod 755 /app/uploads
# Expose both Caddy (80) and httpServer (8080) ports
EXPOSE 80 8080
# Create startup script to run both services
RUN echo '#!/bin/sh' > /start.sh && \
echo 'cd /app' >> /start.sh && \
echo 'node httpServer.js &' >> /start.sh && \
echo 'caddy run --config /etc/caddy/Caddyfile' >> /start.sh && \
chmod +x /start.sh
# Set default environment variables (can be overridden at runtime)
ENV SERVER_USERNAME=admin
ENV SERVER_PASSWORD=securePass123
ENV SERVER_PASSWORD_FILE=my_secret
# Define volume for uploads directory
VOLUME ["/app/uploads"]
CMD ["/start.sh"]