Dockerfile
Rama main · réplica de lectura del repositorio original.
ARG BUILDPLATFORM=linux/amd64
FROM --platform=$BUILDPLATFORM node:24-bookworm-slim AS dashboard
WORKDIR /build/frontend
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci
COPY frontend/ ./
COPY lang/ /build/lang/
RUN npm run build
FROM --platform=$BUILDPLATFORM rust:1.97.1-bookworm AS build
ARG TARGETARCH
WORKDIR /build
RUN apt-get update && apt-get install -y --no-install-recommends \
cmake gcc-aarch64-linux-gnu g++-aarch64-linux-gnu gcc-x86-64-linux-gnu \
&& rm -rf /var/lib/apt/lists/*
COPY Cargo.toml Cargo.lock rust-toolchain.toml ./
COPY src/ ./src/
COPY crates/ ./crates/
COPY desktop/ ./desktop/
COPY lang/ ./lang/
COPY --from=dashboard /build/web/ ./web/
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=x86_64-linux-gnu-gcc \
CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc \
CC_x86_64_unknown_linux_gnu=x86_64-linux-gnu-gcc \
CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++
RUN case "${TARGETARCH:-amd64}" in \
amd64) target=x86_64-unknown-linux-gnu ;; \
arm64) target=aarch64-unknown-linux-gnu ;; \
*) echo "Unsupported architecture" >&2; exit 1 ;; \
esac \
&& rustup target add "$target" \
&& cargo build --release --locked --bin twitch-drops-miner --target "$target" \
&& cp "target/$target/release/twitch-drops-miner" /twitch-drops-miner
FROM debian:bookworm-slim
ARG BUILD_DATE
ARG VCS_REF
ARG VERSION
LABEL org.opencontainers.image.created="${BUILD_DATE}" \
org.opencontainers.image.authors="rangermix, ohne-b" \
org.opencontainers.image.source="https://github.com/ohne-b/twitch-drops-miner" \
org.opencontainers.image.version="${VERSION}" \
org.opencontainers.image.revision="${VCS_REF}" \
org.opencontainers.image.licenses="PolyForm-Noncommercial-1.0.0" \
org.opencontainers.image.title="Twitch Drops Miner"
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /app/data /app/logs \
&& chown 1000:1000 /app/data /app/logs
COPY --from=build /twitch-drops-miner /usr/local/bin/twitch-drops-miner
COPY LICENSE.md NOTICE.md /usr/share/licenses/twitch-drops-miner/
COPY frontend/public/assets/licenses/ /usr/share/licenses/twitch-drops-miner/dashboard/
WORKDIR /app
ENV HOST=0.0.0.0 PORT=8080 DATA_DIR=/app/data LOG_DIR=/app/logs
USER 1000:1000
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD ["/usr/local/bin/twitch-drops-miner", "healthcheck"]
ENTRYPOINT ["/usr/local/bin/twitch-drops-miner"]