44 lines
1.3 KiB
Docker
44 lines
1.3 KiB
Docker
ARG CADDY_IMAGE=caddy:2.8.4-alpine
|
||
ARG NODE_IMAGE=node:21-alpine3.20
|
||
|
||
# ── Stage 1: Install server deps (tiny – only express+cors) ──────────────────
|
||
FROM $NODE_IMAGE AS server-deps
|
||
WORKDIR /srv
|
||
COPY server/package.json server/package-lock.json* ./
|
||
RUN npm install --omit=dev --no-audit --prefer-offline
|
||
|
||
# ── Stage 2: Production image (Caddy + Node.js) ───────────────────────────────
|
||
FROM $CADDY_IMAGE
|
||
|
||
# Install Node.js to run the Facebook OAuth2 microserver
|
||
RUN apk add --no-cache nodejs
|
||
|
||
# Copy pre-built React app (built on host with: npm run build / yarn build)
|
||
COPY build /ui/build
|
||
|
||
# Copy Caddy config
|
||
COPY Caddyfile /ui/Caddyfile
|
||
|
||
# Copy Node.js FB server + its deps
|
||
COPY server /ui/server
|
||
COPY --from=server-deps /srv/node_modules /ui/server/node_modules
|
||
|
||
# Copy entrypoint script
|
||
COPY docker-entrypoint.sh /ui/docker-entrypoint.sh
|
||
RUN chmod +x /ui/docker-entrypoint.sh
|
||
|
||
# Persistent volume for FB OAuth2 tokens (config.json)
|
||
VOLUME ["/data/fb"]
|
||
|
||
WORKDIR /ui
|
||
|
||
EXPOSE 3000
|
||
|
||
# Runtime environment variables (overridden at runtime via -e or docker-compose)
|
||
ENV CORE_ADDRESS=""
|
||
ENV YTDLP_URL=""
|
||
ENV FB_SERVER_URL=""
|
||
ENV YTDLP_HOST="192.168.1.20:8282"
|
||
|
||
CMD ["/ui/docker-entrypoint.sh"]
|