From f99bcb0bdf49e74f8a34090b03d514e69b78baf1 Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Sun, 19 Jan 2020 23:28:59 +0100 Subject: [PATCH] Docker: Refactor directory structure for ARM64 #109 Signed-off-by: Michael Mayer --- Makefile | 7 +- docker/darktable/Dockerfile | 97 ------------------- docker/darktable/docker-compose.yml | 7 -- docker/darktable/llvm.gpg.key | 52 ---------- .../Dockerfile} | 85 +++++++++++++--- docker/photoprism-arm64/README.md | 33 +++++++ .../docker-compose.yml} | 2 +- docker/photoprism/Dockerfile | 12 +-- 8 files changed, 109 insertions(+), 186 deletions(-) delete mode 100644 docker/darktable/Dockerfile delete mode 100644 docker/darktable/docker-compose.yml delete mode 100644 docker/darktable/llvm.gpg.key rename docker/{development/Dockerfile.aarch64 => photoprism-arm64/Dockerfile} (60%) create mode 100644 docker/photoprism-arm64/README.md rename docker/{photoprism/docker-compose-aarch64.yml => photoprism-arm64/docker-compose.yml} (97%) diff --git a/Makefile b/Makefile index ff863e9cc..8950c5bac 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,6 @@ BINARY_NAME=photoprism DOCKER_TAG=`date -u +%Y%m%d` TIDB_VERSION=2.1.11 TF_VERSION=1.14.0 -DARKTABLE_VERSION="$(awk '$2 == "DARKTABLE_VERSION" { print $3; exit }' docker/darktable/Dockerfile)" HASRICHGO := $(shell which richgo) ifdef HASRICHGO @@ -121,15 +120,15 @@ docker-development: docker-photoprism: scripts/docker-build.sh photoprism $(DOCKER_TAG) scripts/docker-push.sh photoprism $(DOCKER_TAG) +docker-photoprism-arm64: + scripts/docker-build.sh photoprism-arm64 $(DOCKER_TAG) + scripts/docker-push.sh photoprism-arm64 $(DOCKER_TAG) docker-demo: scripts/docker-build.sh demo $(DOCKER_TAG) scripts/docker-push.sh demo $(DOCKER_TAG) docker-tensorflow: scripts/docker-build.sh tensorflow $(TF_VERSION) scripts/docker-push.sh tensorflow $(TF_VERSION) -docker-darktable: - scripts/docker-build.sh darktable $(DARKTABLE_VERSION) - scripts/docker-push.sh darktable $(DARKTABLE_VERSION) docker-tidb: scripts/docker-build.sh tidb $(TIDB_VERSION) scripts/docker-push.sh tidb $(TIDB_VERSION) diff --git a/docker/darktable/Dockerfile b/docker/darktable/Dockerfile deleted file mode 100644 index cc8267e70..000000000 --- a/docker/darktable/Dockerfile +++ /dev/null @@ -1,97 +0,0 @@ -FROM ubuntu:18.04 - -LABEL maintainer="Michael Mayer " - -WORKDIR "/src" - -ENV DARKTABLE_VERSION 2.5.0 - -ENV LANG C.UTF-8 -ENV LC_ALL C.UTF-8 -ENV LC_MESSAGES C.UTF-8 -ENV LANGUAGE C.UTF-8 -ENV GCC_VER=8 -ENV LLVM_VER=7 -ENV DEBIAN_FRONTEND noninteractive - -# Paper over occasional network flakiness of some mirrors. -RUN echo 'Acquire::Retries "10";' > /etc/apt/apt.conf.d/80retry - -# Do not install recommended packages -RUN echo 'APT::Install-Recommends "false";' > /etc/apt/apt.conf.d/80recommends - -# Do not install suggested packages -RUN echo 'APT::Install-Suggests "false";' > /etc/apt/apt.conf.d/80suggests - -# Assume yes -RUN echo 'APT::Get::Assume-Yes "true";' > /etc/apt/apt.conf.d/80forceyes - -# Fix broken packages -RUN echo 'APT::Get::Fix-Missing "true";' > /etc/apt/apt.conf.d/80fixmissin - -# Install general build dependencies -RUN apt-get update && apt-get install -y --no-install-recommends \ - build-essential \ - curl \ - gpg-agent \ - apt-utils \ - gpg \ - gpgconf \ - gpgv \ - pkg-config \ - nano \ - wget - -# Add llvm repo -RUN echo "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-7 main" | tee /etc/apt/sources.list.d/llvm.list -COPY /docker/darktable/llvm.gpg.key /tmp/llvm.gpg.key -RUN apt-key add /tmp/llvm.gpg.key - -# Install darktable build depenencies -RUN apt-get update && apt-get install appstream-util clang-$LLVM_VER cmake desktop-file-utils \ - g++-$GCC_VER gcc-$GCC_VER gettext git intltool libatk1.0-dev libcairo2-dev \ - libcolord-dev libcolord-gtk-dev libcups2-dev libcurl4-gnutls-dev \ - libexiv2-dev libflickcurl-dev libgdk-pixbuf2.0-dev libglib2.0-dev \ - libgphoto2-dev libgraphicsmagick1-dev libgtk-3-dev libjpeg-dev \ - libjson-glib-dev liblcms2-dev liblensfun-dev liblua5.2-dev liblua5.3-dev \ - libopenexr-dev libopenjp2-7-dev libosmgpsmap-1.0-dev libpango1.0-dev \ - libpng-dev libpugixml-dev librsvg2-dev libsaxon-java libsecret-1-dev \ - libsoup2.4-dev libsqlite3-dev libtiff5-dev libwebp-dev libx11-dev \ - libxml2-dev libxml2-utils make ninja-build perl po4a python3-jsonschema \ - xsltproc zlib1g-dev libxslt1-dev gtk+-3.0 libsoup2.4 libtiff-dev libgtk-3-bin && \ - apt-get clean && rm -rf /var/lib/apt/lists/* - -RUN dpkg-divert --add --rename --divert /usr/bin/ld.original /usr/bin/ld && \ - ln -s /usr/bin/ld.gold /usr/bin/ld - -RUN rm -rf /var/lib/apt/lists/* && apt-get update && \ - apt-get install clang-$LLVM_VER libclang-common-$LLVM_VER-dev \ - llvm-$LLVM_VER-dev && \ - apt-get clean && rm -rf /var/lib/apt/lists/* - -RUN rm -rf /var/lib/apt/lists/* && apt-get update && \ - apt-get install default-jdk-headless default-jre-headless docbook \ - docbook-xml docbook-xsl docbook-xsl-saxon fop gnome-doc-utils imagemagick \ - libsaxon-java xsltproc && apt-get clean && rm -rf /var/lib/apt/lists/* - -# Build and install darktable -RUN git clone https://github.com/darktable-org/darktable.git -WORKDIR "/src/darktable" -RUN git fetch --all --tags --prune && git checkout tags/release-$DARKTABLE_VERSION -RUN git submodule init && git submodule update -RUN ./build.sh --prefix /opt/darktable --build-type Release --install - -# Copy darktable header files -WORKDIR "/src/darktable/src" -RUN mkdir -p /opt/darktable/include/darktable -RUN find . -name '*.h' -exec cp --parents \{\} /opt/darktable/include/darktable \; - -# Configure shell environment -WORKDIR "/opt/darktable" -ENV PATH /opt/darktable/bin:$PATH - -# Configure broadwayd -ENV GDK_BACKEND broadway -ENV BROADWAY_DISPLAY :5 -EXPOSE 8080 -CMD broadwayd -p 8080 -a 0.0.0.0 :5 \ No newline at end of file diff --git a/docker/darktable/docker-compose.yml b/docker/darktable/docker-compose.yml deleted file mode 100644 index 10719a2ca..000000000 --- a/docker/darktable/docker-compose.yml +++ /dev/null @@ -1,7 +0,0 @@ -version: '3.3' - -services: - darktable: - image: photoprism/darktable:latest - ports: - - 8080:8080 \ No newline at end of file diff --git a/docker/darktable/llvm.gpg.key b/docker/darktable/llvm.gpg.key deleted file mode 100644 index aa6b105aa..000000000 --- a/docker/darktable/llvm.gpg.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.12 (GNU/Linux) - -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 -bXb5c6gCHESH5PXwPU4jQEE7Ib9J6sbk7ZT2Mw== -=j+4q ------END PGP PUBLIC KEY BLOCK----- diff --git a/docker/development/Dockerfile.aarch64 b/docker/photoprism-arm64/Dockerfile similarity index 60% rename from docker/development/Dockerfile.aarch64 rename to docker/photoprism-arm64/Dockerfile index 0be084777..27bbb6da7 100644 --- a/docker/development/Dockerfile.aarch64 +++ b/docker/photoprism-arm64/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:18.04 +FROM ubuntu:18.04 as build LABEL maintainer="Michael Mayer " @@ -48,24 +48,18 @@ RUN apt-get update && apt-get upgrade && \ chromium-browser \ firefox \ libheif-examples \ + darktable \ exiftool -# Install RAW to JPEG converter -RUN add-apt-repository ppa:pmjdebruijn/darktable-release && \ - apt-get update && \ - apt-get install darktable && \ - apt-get upgrade && \ - apt-get dist-upgrade - # Install & configure TensorFlow for C # -# Please use other build if processor does not support AVX2: -# https://dl.photoprism.org/tensorflow/linux/ +# Big thank you to Guy Sheffer for building this! +# https://github.com/guysoft # ENV LD_LIBRARY_PATH /root/.local/lib:/usr/local/lib:/usr/lib:/lib ENV TF_CPP_MIN_LOG_LEVEL 0 RUN curl -L \ - "http://unofficialpi.org/photoprisim/libtensorflow-aarch64-1.14.0.tar.gz" | \ + "https://dl.photoprism.org/tensorflow/arm64/libtensorflow-arm64-1.14.0.tar.gz" | \ tar -C "/usr" -xz RUN ldconfig @@ -113,9 +107,70 @@ RUN echo "alias go=richgo" > /root/.bash_aliases # Set up project directory WORKDIR "/go/src/github.com/photoprism/photoprism" +COPY . . -# Expose HTTP port 2342 plus 4000 for TiDB and 9515 for chromedriver -EXPOSE 2342 4000 9515 +# Build PhotoPrism +RUN make dep build-js install -# Keep container running (services can be started manually using a terminal) -CMD tail -f /dev/null +# Same base image as photoprism/development +FROM ubuntu:18.04 + +# Set environment variables +ENV DEBIAN_FRONTEND noninteractive + +# Install additional distribution packages +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl \ + unzip \ + nano \ + wget \ + ca-certificates \ + tzdata \ + libheif-examples \ + darktable \ + exiftool && \ + apt-get update && \ + apt-get upgrade && \ + apt-get dist-upgrade && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Copy dependencies +COPY --from=build /usr/lib/libtensorflow.so /usr/lib/libtensorflow.so +COPY --from=build /usr/lib/libtensorflow_framework.so /usr/lib/libtensorflow_framework.so + +RUN ldconfig + +# Create and configure photoprism user +RUN useradd -ms /bin/bash photoprism +USER photoprism + +WORKDIR /home/photoprism +ENV PATH /home/photoprism/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +ENV TF_CPP_MIN_LOG_LEVEL 2 +ENV PHOTOPRISM_CONFIG_FILE /home/photoprism/.config/photoprism/photoprism.yml + +# Copy assets to /home/photoprism +COPY --chown=photoprism --from=build /root/.local/bin/photoprism /home/photoprism/.local/bin/photoprism +COPY --chown=photoprism --from=build /root/.local/share/photoprism /home/photoprism/.local/share/photoprism +COPY --chown=photoprism --from=build /root/.config/photoprism /home/photoprism/.config/photoprism + +# Create directories +RUN mkdir -p /home/photoprism/.cache/photoprism \ + /home/photoprism/Pictures/Originals \ + /home/photoprism/Pictures/Import \ + /home/photoprism/Pictures/Export + +# Fix permissions +USER root +RUN chown -R photoprism:photoprism /home/photoprism +USER photoprism + +# Show photoprism version +RUN photoprism -v + +# Expose http and database ports +EXPOSE 2342 4000 + +# Run server +CMD photoprism start diff --git a/docker/photoprism-arm64/README.md b/docker/photoprism-arm64/README.md new file mode 100644 index 000000000..4d3a5a490 --- /dev/null +++ b/docker/photoprism-arm64/README.md @@ -0,0 +1,33 @@ +PhotoPrism for Raspberry Pi (64bit) +=================================== + +Big thank you to [Guy Sheffer](https://github.com/guysoft) for +[building](https://github.com/photoprism/photoprism/issues/109) this! + +Simply download `docker-compose.yml` (edit to change directories) and run `docker-compose up` to start PhotoPrism: + +``` +wget https://raw.githubusercontent.com/photoprism/photoprism/develop/docker/photoprism-arm64/docker-compose.yml +sudo docker-compose up +``` + +*Note: This is work in progress and we'll shorten the URL as soon as possible. +Please read the following OS and hardware requirements before starting the app.* + +## Operating System and Hardware Requirements ## + +You need to boot your Raspberry Pi 3/4 with the parameter `arm_64bit=1` in `config.txt` +to be able to use this image. +A fast SD card and 4 GB of RAM are recommended, in addition you might want to add swap for large photo collections. + +Make sure your docker compose configuration contains the following setting: + +``` + photoprism: + security_opt: + - seccomp:unconfined +``` + +You can also use [UbuntuDockerPi](https://github.com/guysoft/UbuntuDockerPi) to run the image. + + diff --git a/docker/photoprism/docker-compose-aarch64.yml b/docker/photoprism-arm64/docker-compose.yml similarity index 97% rename from docker/photoprism/docker-compose-aarch64.yml rename to docker/photoprism-arm64/docker-compose.yml index f6b2fb2af..4ddb430fa 100644 --- a/docker/photoprism/docker-compose-aarch64.yml +++ b/docker/photoprism-arm64/docker-compose.yml @@ -8,9 +8,9 @@ version: '3.3' services: photoprism: + image: photoprism/photoprism-arm64:latest security_opt: - seccomp:unconfined - image: guysoft/photoprisimpi:latest ports: - 2342:2342 # [local port]:[container port] environment: # Run "photoprism help" and "photoprism config" too see all config options and current values diff --git a/docker/photoprism/Dockerfile b/docker/photoprism/Dockerfile index b19bbfc37..a81ed58e2 100644 --- a/docker/photoprism/Dockerfile +++ b/docker/photoprism/Dockerfile @@ -22,9 +22,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ tzdata \ libheif-examples \ - exiftool && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* + exiftool # Copy dependencies COPY --from=build /usr/lib/libtensorflow.so /usr/lib/libtensorflow.so @@ -35,18 +33,12 @@ RUN ldconfig RUN sh -c "echo 'deb http://download.opensuse.org/repositories/graphics:/darktable:/master/xUbuntu_18.04/ /' > /etc/apt/sources.list.d/graphics:darktable:master.list" && \ wget -qO - https://download.opensuse.org/repositories/graphics:darktable:master/xUbuntu_18.04/Release.key | apt-key add - && \ apt-get update && \ - apt-get install darktable && \ + apt-get install -y --no-install-recommends darktable && \ apt-get upgrade && \ apt-get dist-upgrade && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* -# Install darktable (RAW to JPEG converter) -RUN apt-get update && \ - apt-get install -y --no-install-recommends darktable && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - # Create and configure photoprism user RUN useradd -ms /bin/bash photoprism USER photoprism