21 Commits

Author SHA1 Message Date
96bdd83385 Merge pull request '1.0.0' (#1) from develop into main
Reviewed-on: #1
2023-05-27 16:53:07 +00:00
7d94621192 tweak build behaviour [CI SKIP] 2023-05-27 16:49:13 +00:00
b5d80d90a0 updated readme [CI SKIP] 2023-05-27 16:46:47 +00:00
06f5e5d27a add .gitignore [CI SKIP] 2023-05-27 15:37:58 +00:00
3f239e2527 redesign around s6-overlay 2023-05-27 13:43:46 +00:00
056748f20c update readme [CI SKIP] 2023-05-27 13:42:38 +00:00
d4846a0ccf add goreleaser [CI SKIP] 2023-05-27 13:40:53 +00:00
52460f8741 update drone behaviour [CI SKIP] 2023-05-27 13:40:44 +00:00
d1c1cfd46f create cronicle user at build 2022-12-29 23:49:45 +00:00
bfd684f06f Merge branch 'main' of https://git.mrmeeb.stream/MrMeeb/cronicle-docker 2022-12-29 20:36:16 +00:00
c6007e71f8 logic fixes 2022-12-29 20:36:15 +00:00
4485b53801 Update '.drone.yml' 2022-12-29 19:41:42 +00:00
0f96656929 Update '.drone.yml' 2022-12-29 19:03:26 +00:00
74a1e3f206 drone notify on failure 2022-12-29 17:51:38 +00:00
a611ceff70 Add logic to detect if config is missing as worker 2022-12-29 17:46:57 +00:00
7f98dc08ce Update '.drone.yml' 2022-12-27 11:48:39 +00:00
8cc55e3bf8 Merge branch 'main' of https://git.mrmeeb.stream/MrMeeb/cronicle-docker 2022-12-27 11:44:58 +00:00
6c6395097f add drone, add logic for init scripts 2022-12-27 11:44:51 +00:00
821dbf140c Update 'README.md' 2022-12-26 22:31:41 +00:00
22f4727800 more dev 2022-12-26 22:30:42 +00:00
113839c359 first commit 2022-12-26 18:21:10 +00:00
6 changed files with 38 additions and 60 deletions

View File

@ -1,60 +1,46 @@
FROM alpine:latest as base FROM alpine:latest
ARG TARGETARCH
FROM base AS base-amd64
ENV S6_OVERLAY_ARCH=x86_64
FROM base AS base-arm64
ENV S6_OVERLAY_ARCH=aarch64
FROM base-${TARGETARCH}${TARGETVARIANT}
ARG S6_OVERLAY_VERSION=3.1.5.0 ARG S6_OVERLAY_VERSION=3.1.5.0
ARG CRONICLE_EDGE_VERSION=1.6.2
ENV CRONICLE_foreground=1 ENV CRONICLE_foreground=1
ENV CRONICLE_echo=1 ENV CRONICLE_echo=1
ENV CRONICLE_color=1 ENV CRONICLE_color=1
ENV EDITOR=nano ENV EDITOR=vi
ENV MODE=manager ENV MODE=manager
ENV PUID=1000 ENV PUID=1000
ENV PGID=1000 ENV PGID=1000
ENV TZ=UTC ENV TZ=UTC
ENV LOG_LEVEL=9
#Get required packages #Get required packages
RUN apk update && apk add tzdata curl shadow bash xz git procps nodejs npm nano RUN apk update && apk add tzdata curl shadow bash xz git procps nodejs npm
#Make folders #Make folders
RUN mkdir /config && \ RUN mkdir /config && \
mkdir /app && \ mkdir /app && \
#Create default user #Create default user
useradd -u 1000 -U -d /config -s /bin/false cronicle && \ useradd -u 1000 -U -d /config -s /bin/false mrmeeb && \
usermod -G users cronicle usermod -G users mrmeeb
#Install s6-overlay #Install s6-overlay
RUN curl -fsSL "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz" | tar Jpxf - -C / && \ RUN curl -fsSL "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz" | tar Jpxf - -C / && \
curl -fsSL "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_OVERLAY_ARCH}.tar.xz" | tar Jpxf - -C / && \ curl -fsSL "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-x86_64.tar.xz" | tar Jpxf - -C / && \
curl -fsSL "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch.tar.xz" | tar Jpxf - -C / && \ curl -fsSL "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch.tar.xz" | tar Jpxf - -C / && \
curl -fsSL "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz" | tar Jpxf - -C / curl -fsSL "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz" | tar Jpxf - -C /
ENV S6_BEHAVIOUR_IF_STAGE2_FAILS=2 S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 S6_VERBOSITY=1 ENV S6_BEHAVIOUR_IF_STAGE2_FAILS=2 S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 S6_VERBOSITY=1
#Install Cronicle #Install Cronicle
RUN mkdir /app/cronicle && \ RUN git clone https://github.com/cronicle-edge/cronicle-edge.git /app/cronicle
cd /app/cronicle && \
wget https://github.com/cronicle-edge/cronicle-edge/archive/refs/tags/v${CRONICLE_EDGE_VERSION}.tar.gz && \
tar -xf v${CRONICLE_EDGE_VERSION}.tar.gz --strip-components 1 && \
rm -rf Docker* .gitignore Readme.md .vscode && \
rm -rf v${CRONICLE_EDGE_VERSION}.tar.gz
WORKDIR /app/cronicle WORKDIR /app/cronicle
RUN npm install && \ RUN npm install && \
node bin/build dist node bin/build dist
RUN rm -rf /app/cronicle/Docker* .vscode
#Create Cronicle user, necessary for SSH plugin with default settings
RUN adduser --disabled-password --no-create-home cronicle
COPY root/ / COPY root/ /
RUN chmod +x /cronicle-prepare.sh && \ RUN chmod +x /cronicle-prepare.sh && \
chmod +x /container-init.sh && \ chmod +x /container-init.sh
chown -R ${PUID}:${PGID} /app /config
EXPOSE 3012 EXPOSE 3012

View File

@ -6,13 +6,6 @@ Dockerised Cronicle, based on the [Cronicle-Edge](https://github.com/cronicle-ed
Can function in both the **manager** and **worker** role. Can function in both the **manager** and **worker** role.
*This repo is mirrored to GitHub*
## Links
- :tea: [Gitea Repo (source)](https://git.mrmeeb.stream/MrMeeb/cronicle-docker)
- :whale2: [Containers](https://git.mrmeeb.stream/MrMeeb/-/packages/container/cronicle/latest) - since I'm currently not also publishing them to ghcr.io
- :mirror: [GitHub mirror](https://github.com/MrMeeb/cronicle-docker)
## Tags ## Tags
|Tag |Description| |Tag |Description|
@ -26,9 +19,9 @@ Tags relating to releases are also available, for locking in on a specific versi
`config.json`, located in `/config/cronicle/conf/config.json`, is automatically generated on the first run of Cronicle in 'manager' mode. This file must be kept identical between the manager and any workers it controls. `config.json`, located in `/config/cronicle/conf/config.json`, is automatically generated on the first run of Cronicle in 'manager' mode. This file must be kept identical between the manager and any workers it controls.
If you want to configure Cronicle before first run (e.g to use a different storage engine), download `config_sample.json` and adjust accordingly before placing in `/config/cronicle/conf/config.json`. Make sure to change the `secret`! If you want to configure Cronicle before first run (e.g to use a different storage engine), download `config_sample.json` and adjust accordingly before placing in `/config/cronicle/conf/config.json`.
:exclamation: You must define the hostname of the container. Cronicle expects the hostname to remain the same, so the randomly-generated container hostname can cause problems if it changes. :exclamation: :exclamation: NOTE: You must define the hostname of the container. Cronicle expects the hostname to remain the same, so the randomly-generated container hostname can cause problems if it changes. :exclamation:
### Docker CLI ### Docker CLI
``` ```
@ -87,4 +80,3 @@ This container automatically checks for scripts in `/config/init` and runs them
|PUID |int |1000 |Sets the UID of the user Cronicle runs under |PUID |int |1000 |Sets the UID of the user Cronicle runs under
|PGID |int |1000 |Sets the GID of the user Cronicle runs under |PGID |int |1000 |Sets the GID of the user Cronicle runs under
|TZ |[List of valid TZs](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List) |UTC |Sets the timezone of the container and by extension Cronicle |TZ |[List of valid TZs](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List) |UTC |Sets the timezone of the container and by extension Cronicle
|LOG_LEVEL|1-10 |9 |Sets log level from `1` (quietest) to `10` (loudest)|

View File

@ -21,7 +21,6 @@ PUID=${PUID}
PGID=${PGID} PGID=${PGID}
TZ=${TZ} TZ=${TZ}
MODE=${MODE} MODE=${MODE}
LOG_LEVEL=${LOG_LEVEL}
---------------------------------------------------------------------- ----------------------------------------------------------------------
" "
@ -29,26 +28,26 @@ LOG_LEVEL=${LOG_LEVEL}
if [[ ! "${PUID}" -eq 0 ]] && [[ ! "${PGID}" -eq 0 ]]; then if [[ ! "${PUID}" -eq 0 ]] && [[ ! "${PGID}" -eq 0 ]]; then
echo "Executing usermod..." echo "Executing usermod..."
mkdir "/tmp/temphome" mkdir "/tmp/temphome"
usermod -d "/tmp/temphome" cronicle usermod -d "/tmp/temphome" mrmeeb
usermod -o -u "${PUID}" cronicle usermod -o -u "${PUID}" mrmeeb
usermod -d /config cronicle usermod -d /config mrmeeb
rm -rf "/tmp/temphome" rm -rf "/tmp/temphome"
groupmod -o -g "${PGID}" cronicle groupmod -o -g "${PGID}" mrmeeb
else else
echo "Running as root is not supported, please fix your PUID and PGID!" echo "Running as root is not supported, please fix your PUID and PGID!"
exit 1 exit 1
fi fi
echo "Checking permissions in /config and /app." echo "Checking permissions in /config and /app (this can take some time)."
if [ ! "$(stat -c %u /app)" -eq "${PUID}" ] || [ ! "$(stat -c %g /app)" -eq "${PGID}" ] if [ ! "$(stat -c %u /app)" -eq "${PUID}" ] || [ ! "$(stat -c %g /app)" -eq "${PGID}" ]
then then
echo "Fixing permissions for /app (this can take some time)." echo "Fixing permissions for /app."
chown -R cronicle:cronicle /app chown -R mrmeeb:mrmeeb /app
fi fi
if [ ! "$(stat -c %u /config)" -eq "${PUID}" ] || [ ! "$(stat -c %g /config)" -eq "${PGID}" ] if [ ! "$(stat -c %u /config)" -eq "${PUID}" ] || [ ! "$(stat -c %g /config)" -eq "${PGID}" ]
then then
echo "Fixing permissions for /config (this can take some time)." echo "Fixing permissions for /config."
chown -R cronicle:cronicle /config chown -R mrmeeb:mrmeeb /config
fi fi

View File

@ -42,19 +42,9 @@ then
#Copying config directory to /config/cronicle/conf if not already there, then linking back into Cronicle #Copying config directory to /config/cronicle/conf if not already there, then linking back into Cronicle
if [ ! -d /config/cronicle/conf ] if [ ! -d /config/cronicle/conf ]
then then
echo "Config dir is missing, creating."
cp -r /app/cronicle/conf /config/cronicle/conf cp -r /app/cronicle/conf /config/cronicle/conf
rm -rf /app/cronicle/conf rm -rf /app/cronicle/conf
ln -s /config/cronicle/conf /app/cronicle/conf ln -s /config/cronicle/conf /app/cronicle/conf
else
echo "Config dir already exists. Doesn't need creating."
echo "Linking persistent config dir back into Cronicle."
rm -rf /app/cronicle/conf
ln -s /config/cronicle/conf /app/cronicle/conf
fi fi
if [ ! -f /config/cronicle/data/.setup_done ] if [ ! -f /config/cronicle/data/.setup_done ]
@ -70,6 +60,8 @@ then
rm -rf /app/cronicle/data rm -rf /app/cronicle/data
ln -s /config/cronicle/data /app/cronicle/data ln -s /config/cronicle/data /app/cronicle/data
#exec node /app/cronicle/lib/main.js --color 1
else else
echo "Setup already completed." echo "Setup already completed."
@ -77,6 +69,8 @@ then
rm -rf /app/cronicle/data rm -rf /app/cronicle/data
ln -s /config/cronicle/data /app/cronicle/data ln -s /config/cronicle/data /app/cronicle/data
#exec node /app/cronicle/lib/main.js --color 1
fi fi
elif [ $MODE == "worker" ] elif [ $MODE == "worker" ]
@ -95,7 +89,9 @@ then
#Removing default config.json and linking provided one back into Cronicle #Removing default config.json and linking provided one back into Cronicle
rm -rf /app/cronicle/conf/config.json rm -rf /app/cronicle/conf/config.json
ln -s /config/cronicle/conf/config.json /app/cronicle/conf/config.json ln -s /config/config.json /app/cronicle/conf/config.json
#exec node /app/cronicle/lib/main.js --color 1
fi fi
@ -103,4 +99,9 @@ else
echo "'$MODE' is not a recognised appion for the MODE environment variable. Accepted appions are 'manager' and 'worker'." echo "'$MODE' is not a recognised appion for the MODE environment variable. Accepted appions are 'manager' and 'worker'."
fi fi
#echo "Applying permissions to /config and /app (this can take a while on first run or after PUID/PGID changes)"
#chmod "=rwx" /config
#chown -R mrmeeb:mrmeeb /config
#chown -R mrmeeb:mrmeeb /app

View File

@ -1 +1 @@
exec s6-setuidgid cronicle /cronicle-prepare.sh exec s6-setuidgid mrmeeb /cronicle-prepare.sh

View File

@ -1,3 +1,3 @@
#!/command/with-contenv bash #!/command/with-contenv bash
# shellcheck shell=bash # shellcheck shell=bash
exec s6-setuidgid cronicle node /app/cronicle/lib/main.js --debug_level ${LOG_LEVEL} --color ${CRONICLE_color} exec s6-setuidgid mrmeeb node /app/cronicle/lib/main.js --color 1