diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index 6008e85..38d81a0 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -5,8 +5,8 @@ on: [push, pull_request_target, workflow_dispatch] env: GITHUB_REPO: "linuxserver/docker-mods" #don't modify ENDPOINT: "linuxserver/mods" #don't modify - BASEIMAGE: "replace_baseimage" #replace - MODNAME: "replace_modname" #replace + BASEIMAGE: "nextcloud" #replace + MODNAME: "notify-push" #replace MULTI_ARCH: "true" #set to false if not needed jobs: diff --git a/Dockerfile b/Dockerfile index aa66170..0f4db42 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM scratch -LABEL maintainer="username" +LABEL maintainer="melonarc" # copy local files COPY root/ / diff --git a/Dockerfile.complex b/Dockerfile.complex deleted file mode 100644 index eb80898..0000000 --- a/Dockerfile.complex +++ /dev/null @@ -1,33 +0,0 @@ -# syntax=docker/dockerfile:1 - -## Buildstage ## -FROM ghcr.io/linuxserver/baseimage-alpine:3.19 as buildstage - -RUN \ - echo "**** install packages ****" && \ - apk add --no-cache \ - curl && \ - echo "**** grab rclone ****" && \ - mkdir -p /root-layer && \ - if [ $(uname -m) = "x86_64" ]; then \ - echo "Downloading x86_64 tarball" && \ - curl -o \ - /root-layer/rclone.deb -L \ - "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-amd64.deb"; \ - elif [ $(uname -m) = "aarch64" ]; then \ - echo "Downloading aarch64 tarball" && \ - curl -o \ - /root-layer/rclone.deb -L \ - "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-arm64.deb"; \ - fi && \ - -# copy local files -COPY root/ /root-layer/ - -## Single layer deployed image ## -FROM scratch - -LABEL maintainer="username" - -# Add files from buildstage -COPY --from=buildstage /root-layer/ / diff --git a/README.md b/README.md index 1700668..591f019 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,89 @@ -# Rsync - Docker mod for openssh-server +# nextcloud-notify-push - Docker mod for Nextcloud -This mod adds rsync to openssh-server, to be installed/updated during container start. +This mod adds a service to start the [notify-push](https://github.com/nextcloud/notify_push) binary. -In openssh-server docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:openssh-server-rsync` +## Requirements -If adding multiple mods, enter them in an array separated by `|`, such as `DOCKER_MODS=linuxserver/mods:openssh-server-rsync|linuxserver/mods:openssh-server-mod2` +- Redis configured in your config.php -# Mod creation instructions +## Setup -* Fork the repo, create a new branch based on the branch `template`. -* Edit the `Dockerfile` for the mod. `Dockerfile.complex` is only an example and included for reference; it should be deleted when done. -* Inspect the `root` folder contents. Edit, add and remove as necessary. -* After all init scripts and services are created, run `find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print -exec chmod +x {} +` to fix permissions. -* Edit this readme with pertinent info, delete these instructions. -* Finally edit the `.github/workflows/BuildImage.yml`. Customize the vars for `BASEIMAGE` and `MODNAME`. Set the versioning logic and `MULTI_ARCH` if needed. -* Ask the team to create a new branch named `-`. Baseimage should be the name of the image the mod will be applied to. The new branch will be based on the `template` branch. -* Submit PR against the branch created by the team. +1. Download and install the "client-push" (``notify-push``) app from the Nextcloud store. +2. Add ``DOCKER_MODS=linuxserver/mods:nextcloud-notify-push`` to your env. -## Tips and tricks +3. notify_push should be running and ``**** Starting notify-push ****`` appear in the log. Also check for errors. -* Some images have helpers built in, these images are currently: - * [Openvscode-server](https://github.com/linuxserver/docker-openvscode-server/pull/10/files) - * [Code-server](https://github.com/linuxserver/docker-code-server/pull/95) +4. [Configure your reverse proxy for notify push.](https://github.com/nextcloud/notify_push#reverse-proxy) + +5. run ``occ notify_push:setup https://cloud.example.org/push`` to test and enable notify-push, replace "*cloud.example.org*" with your domain. + +### Traefik configuration + +notify-push listens on its own port, therefore we need to to forward all traffic under example.org/push/* to port 7867. + +We need to add an additional router and service to the container. Having more than one router requires to explicitly configure more options. Additionally a new middleware to strip the /push prefix. + +Replace "*cloud.example.org*" for both routers with your domain! + +#### Before + +```yaml +    ... +    labels: +        - "traefik.enable=true" +        - "traefik.http.routers.nextcloud.entryPoints=https" +        - "traefik.http.routers.nextcloud.rule=Host(`cloud.example.org`)" +        - "traefik.http.services.nextcloud.loadbalancer.server.port=443" +``` + +#### After + +```yaml +    ... +    labels: +        # Nextcloud +        - "traefik.enable=true" +        - "traefik.http.routers.nextcloud.entryPoints=https" +        - "traefik.http.routers.nextcloud.rule=Host(`cloud.example.org`)" +        - "traefik.http.services.nextcloud.loadbalancer.server.port=443" +        # add service +        - "traefik.http.routers.nextcloud.service=nextcloud" + +        #Notify-push +        # forward cloud.example.org/push/* +        - "traefik.http.routers.nextcloud_push.rule=Host(`cloud.example.org`) && PathPrefix(`/push`)" +        # entry point +        - "traefik.http.routers.nextcloud_push.entryPoints=https" +        # set protocol to http +        - "traefik.http.services.nextcloud_push.loadbalancer.server.scheme=http" +        # set port +        - "traefik.http.services.nextcloud_push.loadbalancer.server.port=7867" +        # use middleware +        - "traefik.http.routers.nextcloud_push.middlewares=nextcloud_strip_push" +        # define middleware +        - "traefik.http.middlewares.nextcloud_strip_push.stripprefix.prefixes=/push" +        # add service +        - "traefik.http.routers.nextcloud_push.service=nextcloud_push" + +``` + +## Validation + +1. Read the section about the [Test client](https://github.com/nextcloud/notify_push#test-client). Create an app password and connect to your server + + ```sh + test_client https://cloud.example.com username password + ``` + +2. Run ``occ notify_push:metrics``. Step 1 can be skipped if real clients are already connected. + + ```sh + root@1d0f9bf7fff9:/# occ notify_push:metrics + Active connection count: 2 + Active user count: 1 + Total connection count: 5 + Total database query count: 1 + Events received: 13 + Messages sent: 3 + ``` diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run deleted file mode 100755 index 063b570..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is the init file used for adding os or pip packages to install lists. -# It takes advantage of the built-in init-mods-package-install init script that comes with the baseimages. -# If using this, we need to make sure we set this init as a dependency of init-mods-package-install so this one runs first - -if ! command -v apprise; then - echo "**** Adding apprise and its deps to package install lists ****" - echo "apprise" >> /mod-pip-packages-to-install.list - ## Ubuntu - if [ -f /usr/bin/apt ]; then - echo "\ - python3 \ - python3-pip \ - runc" >> /mod-repo-packages-to-install.list - fi - # Alpine - if [ -f /sbin/apk ]; then - echo "\ - cargo \ - libffi-dev \ - openssl-dev \ - python3 \ - python3-dev \ - python3 \ - py3-pip" >> /mod-repo-packages-to-install.list - fi -else - echo "**** apprise already installed, skipping ****" -fi diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up deleted file mode 100644 index 6414139..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up +++ /dev/null @@ -1 +0,0 @@ -/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run deleted file mode 100755 index 59a4b77..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is an install script that is designed to run after init-mods-package-install -# so it can take advantage of packages installed -# init-mods-end depends on this script so that later init and services wait until this script exits - -echo "**** Setting up apprise ****" -apprise blah blah diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type deleted file mode 100644 index 3d92b15..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type +++ /dev/null @@ -1 +0,0 @@ -oneshot \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up deleted file mode 100644 index 03d298d..0000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up +++ /dev/null @@ -1 +0,0 @@ -/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services b/root/etc/s6-overlay/s6-rc.d/init-mod-nextcloud-notify-push/dependencies.d/init-services similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services rename to root/etc/s6-overlay/s6-rc.d/init-mod-nextcloud-notify-push/dependencies.d/init-services diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-nextcloud-notify-push/run b/root/etc/s6-overlay/s6-rc.d/init-mod-nextcloud-notify-push/run new file mode 100755 index 0000000..45a0691 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-nextcloud-notify-push/run @@ -0,0 +1,15 @@ +#!/usr/bin/with-contenv bash + +NEXTCLOUD_BASE="/config/www/nextcloud" +NOTIFY_PUSH_BIN="$NEXTCLOUD_BASE/apps/notify_push/bin/$(arch)/notify_push" + +# Check if notify-push is installed +if [ ! -d "$NEXTCLOUD_BASE/apps/notify_push/" ]; then + echo "**** Notify-push folder not found. Download and install the notify-push/client-push app and restart the container. ****" + exit 1 +fi +# Check cpu arch +if [ ! -f "$NOTIFY_PUSH_BIN" ]; then + echo "**** Did not find a matching notify-push binary for your cpu arch: $(arch) ****" + exit 1 +fi \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type b/root/etc/s6-overlay/s6-rc.d/init-mod-nextcloud-notify-push/type similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type rename to root/etc/s6-overlay/s6-rc.d/init-mod-nextcloud-notify-push/type diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-nextcloud-notify-push/up b/root/etc/s6-overlay/s6-rc.d/init-mod-nextcloud-notify-push/up new file mode 100644 index 0000000..3783c02 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-nextcloud-notify-push/up @@ -0,0 +1 @@ +/etc/s6-overlay/s6-rc.d/init-mod-nextcloud-notify-push/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package b/root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run deleted file mode 100755 index 02ffe39..0000000 --- a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is an example service that would run for the mod -# It depends on init-services, the baseimage hook for start of all longrun services - -exec \ - s6-setuidgid abc run my app diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/dependencies.d/init-mods b/root/etc/s6-overlay/s6-rc.d/svc-mod-nextcloud-notify-push/dependencies.d/init-mod-nextcloud-notify-push similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/dependencies.d/init-mods rename to root/etc/s6-overlay/s6-rc.d/svc-mod-nextcloud-notify-push/dependencies.d/init-mod-nextcloud-notify-push diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-nextcloud-notify-push/run b/root/etc/s6-overlay/s6-rc.d/svc-mod-nextcloud-notify-push/run new file mode 100755 index 0000000..5c0284e --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-mod-nextcloud-notify-push/run @@ -0,0 +1,10 @@ +#!/usr/bin/with-contenv bash + +export NEXTCLOUD_URL="https://localhost" +export ALLOW_SELF_SIGNED=true +NEXTCLOUD_BASE="/config/www/nextcloud" +NOTIFY_PUSH_BIN="$NEXTCLOUD_BASE/apps/notify_push/bin/$(arch)/notify_push" + +# run notify-push binary +echo "**** Starting notify-push ****" +s6-setuidgid abc "$NOTIFY_PUSH_BIN" "$NEXTCLOUD_BASE/config/config.php" \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type b/root/etc/s6-overlay/s6-rc.d/svc-mod-nextcloud-notify-push/type similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type rename to root/etc/s6-overlay/s6-rc.d/svc-mod-nextcloud-notify-push/type diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/dependencies.d/init-mods-package-install b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-nextcloud-notify-push similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/dependencies.d/init-mods-package-install rename to root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-nextcloud-notify-push diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname b/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname deleted file mode 100644 index e69de29..0000000 diff --git a/root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-imagename-modname-install b/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-nextcloud-notify-push similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-imagename-modname-install rename to root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-nextcloud-notify-push