46 Commits

Author SHA1 Message Date
MrMeeb 1286d2053a add reverse-proxy details [CI SKIP] 2023-06-26 20:11:19 +00:00
MrMeeb 1a9addf796 Merge pull request 'update to cronicle-edge 1.6.3' (#6) from develop into main
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
Reviewed-on: #6
2023-06-25 13:33:44 +00:00
MrMeeb 4019df3cce add period to cronicle-edge version
continuous-integration/drone/push Build is passing
2023-06-25 13:28:58 +00:00
MrMeeb 0774624fbc update to cronicle-edge 1.6.3
continuous-integration/drone/push Build is failing
2023-06-25 13:25:25 +00:00
MrMeeb 8c21c43bfd add new pipeline for better building [CI SKIP] 2023-06-05 21:52:50 +00:00
MrMeeb 504aa38362 Merge pull request 'typo correction on readme [CI SKIP]' (#5) from develop into main [CI SKIP]
continuous-integration/drone/tag Build is passing
Reviewed-on: #5
2023-06-05 21:19:16 +00:00
MrMeeb 5fcb0c0e08 typo correction on readme [CI SKIP] 2023-06-05 21:18:31 +00:00
MrMeeb aace951501 Merge pull request 'fix drone release build dependency graph' (#4) from develop into main
continuous-integration/drone/push Build is passing
Reviewed-on: #4
2023-06-05 21:09:47 +00:00
MrMeeb 193f104408 fix drone release build dependency graph
continuous-integration/drone/push Build is passing
2023-06-05 21:04:42 +00:00
MrMeeb c4e8faff3b Merge pull request '1.0.2' (#3) from develop into main
continuous-integration/drone/push Build was killed
Reviewed-on: #3
2023-06-05 20:50:04 +00:00
MrMeeb 0080d188ab update readme [CI SKIP] 2023-06-05 20:49:35 +00:00
MrMeeb eefaba12cb fix drone dependency graph
continuous-integration/drone/push Build is passing
2023-06-05 20:43:23 +00:00
MrMeeb 114c87fefe drone build and public to ghcr also 2023-06-05 20:43:23 +00:00
MrMeeb a8eb04c76b expose log dir to /config volume 2023-06-05 20:43:23 +00:00
MrMeeb debd509868 add cronicle info to readme [CI SKIP] 2023-06-05 20:43:23 +00:00
MrMeeb e8d9f7c8cd add LOG_LEVEL env var 2023-06-05 20:43:23 +00:00
MrMeeb 98ab91f73f update readme [CI SKIP] 2023-06-05 20:43:23 +00:00
MrMeeb 694ba8f5ce add nano, change editor to it 2023-06-05 20:43:23 +00:00
MrMeeb c232595f36 Merge pull request '1.0.1' (#2) from develop into main
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
Reviewed-on: #2
2023-05-27 22:10:46 +00:00
MrMeeb 6ac07ec9a0 cleanup misc files in app dir
continuous-integration/drone/push Build is passing
2023-05-27 22:05:58 +00:00
MrMeeb ab73132553 set permissions to 1000 at build
continuous-integration/drone/push Build is passing
2023-05-27 21:58:31 +00:00
MrMeeb 76cdb2640e fix to defined cronicle version 2023-05-27 21:53:40 +00:00
MrMeeb f1f322d58a rename user to cronicle 2023-05-27 18:46:23 +00:00
MrMeeb bfbc0e22d7 fix not hooking conf in if already setup
continuous-integration/drone/push Build is passing
2023-05-27 18:15:12 +00:00
MrMeeb f3dc829111 get correct s6 for architecture
continuous-integration/drone/push Build is passing
2023-05-27 17:49:19 +00:00
MrMeeb 9c3caf751e Merge pull request '1.0.0' (#1) from develop into main
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
Reviewed-on: #1
2023-05-27 16:53:07 +00:00
MrMeeb 1ac78908ad tweak build behaviour [CI SKIP] 2023-05-27 16:49:13 +00:00
MrMeeb f990871798 updated readme [CI SKIP] 2023-05-27 16:46:47 +00:00
MrMeeb 2ecac58414 add .gitignore [CI SKIP] 2023-05-27 15:37:58 +00:00
MrMeeb 613393f328 redesign around s6-overlay
continuous-integration/drone/push Build is passing
2023-05-27 13:43:46 +00:00
MrMeeb 30026b4e17 update readme [CI SKIP] 2023-05-27 13:42:38 +00:00
MrMeeb 580845afe0 add goreleaser [CI SKIP] 2023-05-27 13:40:53 +00:00
MrMeeb d4aa8ff410 update drone behaviour [CI SKIP] 2023-05-27 13:40:44 +00:00
MrMeeb b3436f3b2c create cronicle user at build
continuous-integration/drone/push Build is passing
2022-12-29 23:49:45 +00:00
MrMeeb 4541df4c8a Merge branch 'main' of https://git.mrmeeb.stream/MrMeeb/cronicle-docker
continuous-integration/drone/push Build is passing
2022-12-29 20:36:16 +00:00
MrMeeb 26c3a15c81 logic fixes 2022-12-29 20:36:15 +00:00
MrMeeb e10acf4e46 Update '.drone.yml'
continuous-integration/drone/push Build is passing
2022-12-29 19:41:42 +00:00
MrMeeb 2d8fb52b23 Update '.drone.yml'
continuous-integration/drone/push Build is failing
2022-12-29 19:03:26 +00:00
MrMeeb 511704a90f drone notify on failure
continuous-integration/drone/push Build was killed
2022-12-29 17:51:38 +00:00
MrMeeb 70d6215ca3 Add logic to detect if config is missing as worker
continuous-integration/drone/push Build is failing
2022-12-29 17:46:57 +00:00
MrMeeb d759db2bb0 Update '.drone.yml'
continuous-integration/drone/push Build is passing
2022-12-27 11:48:39 +00:00
MrMeeb c04d6febad Merge branch 'main' of https://git.mrmeeb.stream/MrMeeb/cronicle-docker
continuous-integration/drone/push Build was killed
2022-12-27 11:44:58 +00:00
MrMeeb cad9b48ab9 add drone, add logic for init scripts 2022-12-27 11:44:51 +00:00
MrMeeb 327208391b Update 'README.md' 2022-12-26 22:31:41 +00:00
MrMeeb ee7034cba3 more dev 2022-12-26 22:30:42 +00:00
MrMeeb 78f681fb41 first commit 2022-12-26 18:21:10 +00:00
9 changed files with 254 additions and 36 deletions
+140 -26
View File
@@ -1,12 +1,11 @@
kind: pipeline
type: docker
name: build-main-images
name: build-release-images
trigger:
event:
exclude:
- pull_request
ref:
- refs/heads/main
- refs/tags/**
platform:
@@ -19,29 +18,17 @@ steps:
image: docker:git
commands:
- git fetch --tags
when:
ref:
- refs/tags/**
depends_on:
- clone
# Set tags for main branch
- name: make-tags
image: node
commands:
- echo -n "${DRONE_COMMIT_SHA:0:8}, latest" > .tags
when:
ref:
- refs/heads/main
- name: make-tags-release
image: node
commands:
- echo -n "${DRONE_TAG}, latest" > .tags
when:
ref:
- refs/tags/**
depends_on:
- get-tags
# Build containers from main branch
- name: build
- name: build-gitea
image: thegeeklab/drone-docker-buildx
privileged: true
settings:
@@ -55,17 +42,45 @@ steps:
platforms:
- linux/arm64
- linux/amd64
depends_on:
- make-tags
- name: release
- name: build-github
image: thegeeklab/drone-docker-buildx
privileged: true
settings:
provenance: false
registry: ghcr.io
username:
from_secret: docker_username
password:
from_secret: github_token
repo: ghcr.io/mrmeeb/cronicle
platforms:
- linux/arm64
- linux/amd64
depends_on:
- make-tags
- name: release-gitea
image: goreleaser/goreleaser
environment:
GITEA_TOKEN:
from_secret: gitea_token
commands:
- goreleaser release
when:
ref:
- refs/tags/**
- goreleaser release -f .goreleaser-gitea.yaml
depends_on:
- build-gitea
- name: release-github
image: goreleaser/goreleaser
environment:
GITHUB_TOKEN:
from_secret: github_token
commands:
- goreleaser release -f .goreleaser-github.yaml
depends_on:
- build-github
- name: notify
image: plugins/slack
@@ -76,6 +91,83 @@ steps:
settings:
webhook:
from_secret: slack_webhook
depends_on:
- release-gitea
- release-github
---
kind: pipeline
type: docker
name: build-main-images
trigger:
event:
exclude:
- pull_request
ref:
- refs/heads/main
platform:
os: linux
arch: amd64
steps:
- name: make-tags
image: node
commands:
- echo -n "${DRONE_COMMIT_SHA:0:8}, latest" > .tags
when:
ref:
- refs/heads/main
depends_on:
- clone
- name: build-gitea
image: thegeeklab/drone-docker-buildx
privileged: true
settings:
provenance: false
registry: git.mrmeeb.stream
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: git.mrmeeb.stream/mrmeeb/cronicle
platforms:
- linux/arm64
- linux/amd64
depends_on:
- make-tags
- name: build-github
image: thegeeklab/drone-docker-buildx
privileged: true
settings:
provenance: false
registry: ghcr.io
username:
from_secret: docker_username
password:
from_secret: github_token
repo: ghcr.io/mrmeeb/cronicle
platforms:
- linux/arm64
- linux/amd64
depends_on:
- make-tags
- name: notify
image: plugins/slack
when:
status:
- success
- failure
settings:
webhook:
from_secret: slack_webhook
depends_on:
- build-github
- build-gitea
---
kind: pipeline
@@ -100,7 +192,7 @@ steps:
- echo -n "develop-${DRONE_COMMIT_SHA:0:8}, develop" > .tags
# Build containers from develop branch
- name: build
- name: build-gitea
image: thegeeklab/drone-docker-buildx
privileged: true
settings:
@@ -114,6 +206,25 @@ steps:
platforms:
- linux/arm64
- linux/amd64
depends_on:
- make-tags
- name: build-github
image: thegeeklab/drone-docker-buildx
privileged: true
settings:
provenance: false
registry: ghcr.io
username:
from_secret: docker_username
password:
from_secret: github_token
repo: ghcr.io/mrmeeb/cronicle
platforms:
- linux/arm64
- linux/amd64
depends_on:
- make-tags
- name: notify
image: plugins/slack
@@ -123,4 +234,7 @@ steps:
- failure
settings:
webhook:
from_secret: slack_webhook
from_secret: slack_webhook
depends_on:
- build-gitea
- build-github
+2 -1
View File
@@ -1,2 +1,3 @@
dist/
dist-gitea/
dist-github/
.tags
@@ -1,3 +1,5 @@
dist: dist-gitea
build:
skip: true
+20
View File
@@ -0,0 +1,20 @@
dist: dist-github
build:
skip: true
archives:
- format: binary
release:
draft: true
github:
owner: MrMeeb
name: cronicle-docker
changelog:
sort: asc
filters:
exclude:
- '^docs:'
- '^test:'
+4 -3
View File
@@ -10,19 +10,20 @@ ENV S6_OVERLAY_ARCH=aarch64
FROM base-${TARGETARCH}${TARGETVARIANT}
ARG S6_OVERLAY_VERSION=3.1.5.0
ARG CRONICLE_EDGE_VERSION=1.6.2
ARG CRONICLE_EDGE_VERSION=.1.6.3
ENV CRONICLE_foreground=1
ENV CRONICLE_echo=1
ENV CRONICLE_color=1
ENV EDITOR=vi
ENV EDITOR=nano
ENV MODE=manager
ENV PUID=1000
ENV PGID=1000
ENV TZ=UTC
ENV LOG_LEVEL=9
#Get required packages
RUN apk update && apk add tzdata curl shadow bash xz git procps nodejs npm
RUN apk update && apk add tzdata curl shadow bash xz git procps nodejs npm nano
#Make folders
RUN mkdir /config && \
+66 -5
View File
@@ -1,10 +1,41 @@
# Cronicle Docker
![Drone (self-hosted) with branch](https://img.shields.io/drone/build/MrMeeb/cronicle-docker/main?label=main&server=https%3A%2F%2Fdrone.mrmeeb.stream&style=for-the-badge) ![Drone (self-hosted) with branch](https://img.shields.io/drone/build/MrMeeb/cronicle-docker/develop?label=develop&server=https%3A%2F%2Fdrone.mrmeeb.stream&style=for-the-badge)
![Drone (self-hosted) with branch](https://img.shields.io/drone/build/MrMeeb/cronicle-docker/main?label=latest&server=https%3A%2F%2Fdrone.mrmeeb.stream&style=for-the-badge) ![Drone (self-hosted) with branch](https://img.shields.io/drone/build/MrMeeb/cronicle-docker/develop?label=develop&server=https%3A%2F%2Fdrone.mrmeeb.stream&style=for-the-badge)
Dockerised Cronicle, based on the [Cronicle-Edge](https://github.com/cronicle-edge/cronicle-edge) fork.
Dockerised Cronicle, based on the [Cronicle-Edge](https://github.com/cronicle-edge/cronicle-edge) fork of [Cronicle](https://github.com/jhuckaby/Cronicle). This container was built to include features I value in containers, namely logging to `stdout` and configurable `PUID` and `PGID`.
Can function in both the **manager** and **worker** role.
This container can function in both the **manager** and **worker** role.
## Links
- :tea: [Gitea Repo (source)](https://git.mrmeeb.stream/MrMeeb/cronicle-docker)
- :whale2: [Containers](https://git.mrmeeb.stream/MrMeeb/-/packages/container/cronicle/latest) (also published to GHCR)
- :mirror: [GitHub mirror](https://github.com/MrMeeb/cronicle-docker)
- :package: [Cronicle Repo](https://github.com/jhuckaby/Cronicle)
- :package: [Cronicle-Edge Repo](https://github.com/cronicle-edge/cronicle-edge)
*This repo is mirrored to GitHub*
## Overview
[**Cronicle**](https://github.com/jhuckaby/Cronicle) is a multi-server task scheduler and runner, with a web based front-end UI. It handles both scheduled, repeating and on-demand jobs, targeting any number of worker servers, with real-time stats and live log viewer. It's basically a fancy [Cron](https://en.wikipedia.org/wiki/Cron) replacement written in [Node.js](https://nodejs.org/). You can give it simple shell commands, or write Plugins in virtually any language.
![Main Screenshot](https://pixlcore.com/software/cronicle/screenshots-new/job-details-complete.png)
## Features at a Glance
* Single or multi-server setup.
* Automated failover to backup servers.
* Auto-discovery of nearby servers.
* Real-time job status with live log viewer.
* Plugins can be written in any language.
* Schedule events in multiple timezones.
* Optionally queue up long-running events.
* Track CPU and memory usage for each job.
* Historical stats with performance graphs.
* Simple JSON messaging system for Plugins.
* Web hooks for external notification systems.
* Simple REST API for scheduling and running events.
* API Keys for authenticating remote apps.
## Tags
@@ -19,9 +50,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.
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`.
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`!
: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:
: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:
### Docker CLI
```
@@ -61,6 +92,35 @@ services:
This container automatically checks for scripts in `/config/init` and runs them at startup. This could be useful if you need to install additional applications into a worker container so it can execute jobs.
## Reverse Proxying
For a single manager behind a reverse proxy, you may need to specify a specific route for the web-socket connections.
An example using nginx:
```
location /socket.io/ {
client_max_body_size 2048m;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://localhost:3012/socket.io/;
}
```
Source: https://github.com/jhuckaby/Cronicle/issues/535
Load-balancing between multiple managers, as described [here](https://github.com/jhuckaby/Cronicle/blob/master/docs/Setup.md#load-balancers), has not been tested, and could behave strangely due to docker DNS.
## Ports
|Port |Description|
@@ -80,3 +140,4 @@ This container automatically checks for scripts in `/config/init` and runs them
|PUID |int |1000 |Sets the UID 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
|LOG_LEVEL|1-10 |9 |Sets log level from `1` (quietest) to `10` (loudest)|
+1
View File
@@ -21,6 +21,7 @@ PUID=${PUID}
PGID=${PGID}
TZ=${TZ}
MODE=${MODE}
LOG_LEVEL=${LOG_LEVEL}
----------------------------------------------------------------------
"
+18
View File
@@ -103,4 +103,22 @@ else
echo "'$MODE' is not a recognised appion for the MODE environment variable. Accepted appions are 'manager' and 'worker'."
fi
#Expose log directory
if [ ! -d /config/cronicle/logs ]
then
echo "Logs dir is missing, creating."
cp -r /app/cronicle/logs /config/cronicle/logs
rm -rf /app/cronicle/logs
ln -s /config/cronicle/logs /app/cronicle/logs
else
echo "Logs dir already exists. Doesn't need creating."
echo "Linking persistent logs dir back into Cronicle."
rm -rf /app/cronicle/logs
ln -s /config/cronicle/logs /app/cronicle/logs
fi
+1 -1
View File
@@ -1,3 +1,3 @@
#!/command/with-contenv bash
# shellcheck shell=bash
exec s6-setuidgid cronicle node /app/cronicle/lib/main.js --color 1
exec s6-setuidgid cronicle node /app/cronicle/lib/main.js --debug_level ${LOG_LEVEL} --color ${CRONICLE_color}