diff --git a/cronicle/Dockerfile b/cronicle/Dockerfile new file mode 100644 index 0000000..1309ddf --- /dev/null +++ b/cronicle/Dockerfile @@ -0,0 +1,52 @@ +ARG NODE_VERSION=25 +FROM node:${NODE_VERSION}-bookworm-slim AS build + +ARG CRONICLE_VERSION=v0.9.105 + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bash \ + ca-certificates \ + curl \ + python3 \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /opt/cronicle + +RUN curl -L https://github.com/jhuckaby/Cronicle/archive/${CRONICLE_VERSION}.tar.gz | tar zxvf - --strip-components 1 \ + && npm install \ + && node bin/build.js dist \ + && npm cache clean --force + +RUN mkdir -p /opt/cronicle/data /opt/cronicle/logs /opt/cronicle/plugins + +# --- + +FROM node:${NODE_VERSION}-bookworm-slim + +ARG CRONICLE_VERSION +ENV CRONICLE_VERSION=${CRONICLE_VERSION} +ENV CRONICLE_foreground=1 +ENV CRONICLE_echo=1 + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bash \ + ca-certificates \ + procps \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /opt/cronicle + +COPY --from=build /opt/cronicle /opt/cronicle +COPY entrypoint.sh /opt/cronicle/entrypoint.sh + +RUN chmod +x /opt/cronicle/entrypoint.sh + +USER node + +VOLUME ["/opt/cronicle/data", "/opt/cronicle/logs", "/opt/cronicle/plugins", "/opt/cronicle/queue"] +EXPOSE 3012 + +ENTRYPOINT ["/opt/cronicle/entrypoint.sh"] diff --git a/cronicle/entrypoint.sh b/cronicle/entrypoint.sh new file mode 100644 index 0000000..10e9d34 --- /dev/null +++ b/cronicle/entrypoint.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR=/opt/cronicle +BIN_DIR=${ROOT_DIR}/bin +DATA_DIR=${ROOT_DIR}/data + +mkdir -p "${DATA_DIR}" + +# Optional one-time config import +if [ -f "${DATA_DIR}/config.json.import" ] && [ ! -f "${DATA_DIR}/.setup_done" ]; then + cp "${DATA_DIR}/config.json.import" "${CONF_DIR}/config.json" +fi + +# Run setup once to initialize storage +if [ ! -f "${DATA_DIR}/.setup_done" ]; then + "${BIN_DIR}/control.sh" setup + touch "${DATA_DIR}/.setup_done" +fi + +exec "${BIN_DIR}/control.sh" start