diff --git a/.gitignore b/.gitignore index 14da8a03..a4b97f90 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,6 @@ vendor/ .pylint.d # calibre-web -*.db *.log cps/cache diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..d3aa9468 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,11 @@ +build_image: + image: docker + stage: build + services: + - docker:dind + script: + - echo $CI_REGISTRY_USER + - echo $CI_REGISTRY + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker build --no-cache -t $CI_REGISTRY/jafner/calibre-web/calibre-web:$CI_COMMIT_SHORT_SHA -t $CI_REGISTRY/jafner/calibre-web/calibre-web:latest . + - docker push $CI_REGISTRY/jafner/calibre-web/calibre-web --all-tags diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..27cd359f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,67 @@ +FROM ghcr.io/linuxserver/baseimage-ubuntu:focal + +RUN \ + echo "**** install build packages ****" && \ + apt-get update && \ + apt-get install -y \ + git \ + libldap2-dev \ + libsasl2-dev \ + python3-pip + +RUN \ + echo "**** install runtime packages ****" && \ + apt-get install -y \ + imagemagick \ + libnss3 \ + libxcomposite1 \ + libxi6 \ + libxslt1.1 \ + libldap-2.4-2 \ + libsasl2-2 \ + libxrandr2 \ + python3-minimal \ + python3-pkg-resources \ + unrar + +RUN \ + echo "**** install kepubify ****" && \ + if [ -z ${KEPUBIFY_RELEASE+x} ]; then \ + KEPUBIFY_RELEASE=$(curl -sX GET "https://api.github.com/repos/pgaskin/kepubify/releases/latest" \ + | awk '/tag_name/{print $4;exit}' FS='[""]'); \ + fi && \ + curl -o \ + /usr/bin/kepubify -L \ + https://github.com/pgaskin/kepubify/releases/download/${KEPUBIFY_RELEASE}/kepubify-linux-64bit + +COPY . /app/calibre-web + +RUN \ + echo "**** install calibre-web (a worse way than LSIO's method) ****" && \ + cd /app/calibre-web && \ + pip3 install --no-cache-dir -U \ + pip && \ + pip install --no-cache-dir -U --ignore-installed --find-links https://wheel-index.linuxserver.io/ubuntu/ -r \ + requirements.txt -r \ + optional-requirements.txt + +RUN \ + echo "**** cleanup ****" && \ + apt-get -y purge \ + git \ + libldap2-dev \ + libsasl2-dev \ + python3-pip && \ + apt-get -y autoremove && \ + rm -rf \ + /tmp/* \ + /var/lib/apt/lists/* \ + /var/tmp/* \ + /root/.cache + +# add local files +COPY root/ / + +# ports and volumes +EXPOSE 8083 +VOLUME /config diff --git a/root/defaults/app.db b/root/defaults/app.db new file mode 100644 index 00000000..752e6916 Binary files /dev/null and b/root/defaults/app.db differ diff --git a/root/defaults/policy.xml b/root/defaults/policy.xml new file mode 100644 index 00000000..5ec3385c --- /dev/null +++ b/root/defaults/policy.xml @@ -0,0 +1,80 @@ + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/etc/cont-init.d/30-config b/root/etc/cont-init.d/30-config new file mode 100644 index 00000000..4ca17b9e --- /dev/null +++ b/root/etc/cont-init.d/30-config @@ -0,0 +1,49 @@ +#!/usr/bin/with-contenv bash + +# create symlinks for imagemagick policy.xml +[[ -f /etc/ImageMagick-6/policy.xml ]] && \ + rm /etc/ImageMagick-6/policy.xml +[[ ! -L /etc/ImageMagick-6/policy.xml ]] && \ + ln -s /defaults/policy.xml /etc/ImageMagick-6/policy.xml + +# create symlinks for database and log +[[ ! -f /config/app.db ]] && \ + cp /defaults/app.db /config/app.db +[[ -f /app/calibre-web/app.db ]] && \ + rm /app/calibre-web/app.db +[[ ! -L /app/calibre-web/app.db ]] && \ + ln -s /config/app.db /app/calibre-web/app.db + +# create symlinks for log +[[ ! -f /config/calibre-web.log ]] && \ + touch /config/calibre-web.log +[[ -f /app/calibre-web/calibre-web.log ]] && \ + rm /app/calibre-web/calibre-web.log +[[ ! -L /app/calibre-web/calibre-web.log ]] && \ + ln -s /config/calibre-web.log /app/calibre-web/calibre-web.log + +# create Google drive client_secrets.json file +[[ ! -f /config/client_secrets.json ]] && \ + echo "{}" > /config/client_secrets.json +[[ -f /app/calibre-web/client_secrets.json ]] && + rm /app/calibre-web/client_secrets.json +[[ ! -L /app/calibre-web/client_secrets.json ]] && + ln -s /config/client_secrets.json /app/calibre-web/client_secrets.json + +# create Google drive symlinks for database +[[ ! -f /config/gdrive.db ]] && \ + cp /app/calibre-web/gdrive.db /config/gdrive.db +[[ -f /app/calibre-web/gdrive.db ]] && \ + rm /app/calibre-web/gdrive.db +[[ ! -L /app/calibre-web/gdrive.db ]] && \ + ln -s /config/gdrive.db /app/calibre-web/gdrive.db + +# check if kepubify is present and if so make executable +[[ -f /usr/bin/kepubify ]] && \ +[[ ! -x /usr/bin/kepubify ]] && \ + chmod +x /usr/bin/kepubify + +# permissions +chown -R abc:abc \ + /config \ + /app/calibre-web diff --git a/root/etc/services.d/calibre-web/run b/root/etc/services.d/calibre-web/run new file mode 100644 index 00000000..98523a39 --- /dev/null +++ b/root/etc/services.d/calibre-web/run @@ -0,0 +1,6 @@ +#!/usr/bin/with-contenv bash + +cd /app/calibre-web || exit + +exec \ + s6-setuidgid abc python3 /app/calibre-web/cps.py