diff --git a/.gitignore b/.gitignore index d7d4d83..fef05e8 100644 --- a/.gitignore +++ b/.gitignore @@ -113,5 +113,8 @@ ENV/ # mkdocs build dir site/ +# Docker mounted volumes +config/ +data/ .envrc diff --git a/Dockerfile b/Dockerfile index 59dcbad..98ff54c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,24 +1,53 @@ # To build run: # $ poetry build # $ docker build -t ghcr.io/ep1cman/unifi-protect-backup . -FROM python:3.9-alpine + +FROM ghcr.io/linuxserver/baseimage-alpine:3.15 + +LABEL maintainer="ep1cman" WORKDIR /app -RUN apk add gcc musl-dev zlib-dev jpeg-dev rclone ffmpeg -COPY dist/unifi-protect-backup-0.5.1.tar.gz sdist.tar.gz -RUN pip install sdist.tar.gz +RUN \ + echo "**** install build packages ****" && \ + apk add --no-cache --virtual=build-dependencies \ + shadow \ + gcc \ + musl-dev \ + jpeg-dev \ + zlib-dev && \ + echo "**** install packages ****" && \ + apk add --no-cache \ + rclone \ + ffmpeg \ + py3-pip \ + python3-dev + +# Install unifi-protect-backup +RUN echo "**** install unifi-protect-backup ****" +COPY dist/unifi-protect-backup-0.5.0.tar.gz sdist.tar.gz +RUN \ + pip install sdist.tar.gz && \ + echo "**** cleanup ****" && \ + apk del --purge \ + build-dependencies && \ + rm -rf \ + /tmp/* \ + /app/sdist.tar.gz + +# Settings ENV UFP_USERNAME=unifi_protect_user ENV UFP_PASSWORD=unifi_protect_password ENV UFP_ADDRESS=127.0.0.1 ENV UFP_PORT=443 ENV UFP_SSL_VERIFY=true ENV RCLONE_RETENTION=7d -ENV RCLONE_DESTINATION=my_remote:/unifi_protect_backup +ENV RCLONE_DESTINATION=local:/data ENV VERBOSITY="v" ENV TZ=UTC ENV IGNORE_CAMERAS="" -VOLUME [ "/root/.config/rclone/" ] +COPY docker_root/ / -CMD ["sh", "-c", "unifi-protect-backup -${VERBOSITY}"] +VOLUME [ "/config" ] +VOLUME [ "/data" ] diff --git a/docker_root/defaults/rclone.conf b/docker_root/defaults/rclone.conf new file mode 100644 index 0000000..f8d51be --- /dev/null +++ b/docker_root/defaults/rclone.conf @@ -0,0 +1,2 @@ +[local] +type = local diff --git a/docker_root/etc/cont-init.d/30-config b/docker_root/etc/cont-init.d/30-config new file mode 100644 index 0000000..c413a10 --- /dev/null +++ b/docker_root/etc/cont-init.d/30-config @@ -0,0 +1,23 @@ +#!/usr/bin/with-contenv bash + +mkdir -p /config/rclone + +# For backwards compatibility +[[ -f "/root/.config/rclone/rclone.conf" ]] && \ + echo "DEPRECATED: Copying rclone conf from /root/.config/rclone/rclone.conf, please change your mount to /config/rclone.conf" + cp \ + /root/.config/rclone/rclone.conf \ + /config/rclone/rclone.conf + +# default config file +[[ ! -f "/config/rclone/rclone.conf" ]] && \ + mkdir -p /config/rclone && \ + cp \ + /defaults/rclone.conf \ + /config/rclone/rclone.conf + +chown -R abc:abc \ + /config + +chown -R abc:abc \ + /data diff --git a/docker_root/etc/services.d/unifi-protect-backup/run b/docker_root/etc/services.d/unifi-protect-backup/run new file mode 100644 index 0000000..4bad612 --- /dev/null +++ b/docker_root/etc/services.d/unifi-protect-backup/run @@ -0,0 +1,6 @@ +#!/usr/bin/with-contenv bash + + +export RCLONE_CONFIG=/config/rclone/rclone.conf +exec \ + s6-setuidgid abc unifi-protect-backup -${VERBOSITY}