Merge pull request #852 from melonarc/nextcloud-notify-push

nextcloud-notify-push: initial commit
This commit is contained in:
Homer
2024-04-04 20:14:32 +01:00
committed by GitHub
26 changed files with 95 additions and 103 deletions
+3 -3
View File
@@ -5,9 +5,9 @@ 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
MULTI_ARCH: "false" #set to true if needed
BASEIMAGE: "nextcloud"
MODNAME: "notify-push"
MULTI_ARCH: "false"
jobs:
set-vars:
+1 -1
View File
@@ -2,7 +2,7 @@
FROM scratch
LABEL maintainer="username"
LABEL maintainer="melonarc"
# copy local files
COPY root/ /
-33
View File
@@ -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/ /
+31 -17
View File
@@ -1,25 +1,39 @@
# 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 `<baseimagename>-<modname>`. 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. Add ``DOCKER_MODS=linuxserver/mods:nextcloud-notify-push`` to your env.
2. Make sure that Redis is already configured with Nextcloud.
## 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)
### Reverse Proxy
The reverse proxy of the `notify_push` service at subfolder `/push` is handled within the Nextcloud container's Nginx site conf. Make sure you are on the latest version. If not sure, make sure your Nextcloud container is up to date, then you can delete the existing site conf at `/config/nginx/site-confs/default.conf` and restart the container. A new conf with the reverse proxy support will be created.
## 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
```
@@ -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
@@ -1 +0,0 @@
oneshot
@@ -1 +0,0 @@
/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run
@@ -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
@@ -1 +0,0 @@
oneshot
@@ -1 +0,0 @@
/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run
@@ -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
@@ -0,0 +1,8 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
NOTIFY_PUSH_URL=$(echo "$(occ config:system:get overwrite.cli.url)/push")
echo "**** Setting notify_push server URL to ${NOTIFY_PUSH_URL} ****"
if ! occ notify_push:setup "${NOTIFY_PUSH_URL}"; then
echo "**** There was an error setting the notify_push server URL. Please double check your reverse proxy settings as well as the overwrite.cli.url entry in Nextcloud's config.php ****"
fi
@@ -0,0 +1 @@
oneshot
@@ -0,0 +1 @@
/etc/s6-overlay/s6-rc.d/svc-mod-nextcloud-notify-push-set-url/run
@@ -0,0 +1,48 @@
#!/usr/bin/with-contenv bash
export NEXTCLOUD_URL="https://localhost"
export ALLOW_SELF_SIGNED=true
export NEXTCLOUD_BASE="/config/www/nextcloud"
export NOTIFY_PUSH_BIN="$NEXTCLOUD_BASE/apps/notify_push/bin/$(arch)/notify_push"
installed_version=$(php -r "require '/config/www/nextcloud/config/config.php'; echo \$CONFIG['version'];" 2>/dev/null)
if [ "${installed_version}" = "" ]; then
echo "**** Nextcloud not installed yet. Please go through the wizard and restart the container. Then notify_push will be enabled. ****"
sleep infinity
fi
# Check redis
if ! occ config:system:get redis >/dev/null; then
echo "**** Redis does not seem to be configued. Notify_push will not start ****"
sleep infinity
fi
echo "**** Making sure the Nextcloud Client Push plugin is installed and enabled ****"
occ app:install notify_push
occ app:enable notify_push
# Check if notify-push is installed
if [ ! -d "$NEXTCLOUD_BASE/apps/notify_push/" ]; then
echo "**** Notify-push folder not found. Install the notify-push/client-push app and restart the container. ****"
sleep infinity
fi
# Check cpu arch
if [ ! -f "$NOTIFY_PUSH_BIN" ]; then
echo "**** Did not find a matching notify-push binary for your cpu arch: $(arch) ****"
sleep infinity
fi
# add to trusted proxies
if ! occ config:system:get trusted_proxies | grep -q "127.0.0.1"; then
NO_OF_PROXIES=$(occ config:system:get trusted_proxies --output=json | jq 'length')
if [[ -z "${NO_OF_PROXIES}" ]]; then
NO_OF_PROXIES="0"
fi
echo "**** Adding notify_push to trusted proxies ****"
occ config:system:set trusted_proxies "${NO_OF_PROXIES}" --value=127.0.0.1
fi
# run notify-push binary
echo "**** Starting notify-push ****"
exec \
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost 7867" \
s6-setuidgid abc "$NOTIFY_PUSH_BIN" "$NEXTCLOUD_BASE/config/config.php"