Update Docker images: new directory structure

This commit is contained in:
Michael Mayer 2019-06-29 23:27:42 +02:00
parent 243795c7d5
commit 5e37cd54fc
9 changed files with 75 additions and 65 deletions

View file

@ -1,4 +1,4 @@
FROM photoprism/development:20190626
FROM photoprism/development:20190629
# Set up project directory
WORKDIR "/go/src/github.com/photoprism/photoprism"

View file

@ -4,7 +4,7 @@ FROM photoprism/photoprism:latest as build
ENV TF_CPP_MIN_LOG_LEVEL 2
RUN mkdir -p /srv/photoprism/photos/import && \
wget -qO- https://dl.photoprism.org/fixtures/demo.tar.gz | tar xvz -C /srv/photoprism/photos/import
wget -qO- https://dl.photoprism.org/fixtures/demo.tar.gz | tar xvz -C Pictures/Import
# Import example photos
RUN photoprism import

View file

@ -43,7 +43,6 @@ RUN apt-get update && apt-get upgrade && \
wget \
git \
mysql-client \
libgtk-3-bin \
tzdata \
gconf-service \
chromium-browser \
@ -58,15 +57,14 @@ RUN add-apt-repository ppa:pmjdebruijn/darktable-release && \
apt-get upgrade && \
apt-get dist-upgrade
# Install TensorFlow C library
# Install & configure TensorFlow for C
ENV LD_LIBRARY_PATH /root/.local/lib:/usr/local/lib:/usr/lib:/lib
ENV TF_CPP_MIN_LOG_LEVEL 0
RUN curl -L \
"https://dl.photoprism.org/tensorflow/linux/libtensorflow-linux-avx-1.14.0.tar.gz" | \
tar -C "/usr" -xz
RUN ldconfig
# Show TensorFlow debug log
ENV TF_CPP_MIN_LOG_LEVEL 0
# Install NodeJS
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get update && \
@ -94,7 +92,7 @@ RUN set -eux; \
# Configure Go environment
ENV GOPATH /go
ENV GOBIN $GOPATH/bin
ENV PATH $GOBIN:/usr/local/go/bin:$PATH
ENV PATH $GOBIN:/usr/local/go/bin:/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV GO111MODULE on
RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
@ -108,16 +106,11 @@ RUN env GO111MODULE=off /usr/local/go/bin/go get -u golang.org/x/tools/cmd/goimp
RUN env GO111MODULE=off /usr/local/go/bin/go get -u github.com/kyoh86/richgo
RUN echo "alias go=richgo" > /root/.bash_aliases
# Configure broadwayd (HTML5 display server)
# Command: broadwayd -p 8080 -a 0.0.0.0 :5
ENV GDK_BACKEND broadway
ENV BROADWAY_DISPLAY :5
# Set up project directory
WORKDIR "/go/src/github.com/photoprism/photoprism"
# Expose HTTP port plus 4000 for TiDB, 8080 for broadwayd and 9515 for chromedriver
EXPOSE 80 2342 4000 8080 9515
# Expose HTTP port 2342 plus 4000 for TiDB and 9515 for chromedriver
EXPOSE 2342 4000 9515
# Keep container running (services can be started manually using a terminal)
CMD tail -f /dev/null

View file

@ -1,21 +1,17 @@
FROM photoprism/development:20190626 as build
FROM photoprism/development:20190629 as build
# Set up project directory
WORKDIR "/go/src/github.com/photoprism/photoprism"
COPY . .
# Build PhotoPrism
RUN make all install
RUN make dep build-js install
# Base base image as photoprism/development
FROM ubuntu:18.04
# Set environment variables
ENV DEBIAN_FRONTEND noninteractive
ENV TF_CPP_MIN_LOG_LEVEL 2
ENV PHOTOPRISM_CONFIG_FILE /srv/photoprism/config/photoprism.yml
WORKDIR /srv/photoprism
# Install additional distribution packages
RUN apt-get update && apt-get install -y --no-install-recommends \
@ -30,15 +26,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Copy built binaries and assets to this image
# Copy dependencies
COPY --from=build /etc/apt/sources.list.d/pmjdebruijn-ubuntu-darktable-release-bionic.list /etc/apt/sources.list.d/pmjdebruijn-ubuntu-darktable-release-bionic.list
COPY --from=build /etc/apt/trusted.gpg.d/pmjdebruijn_ubuntu_darktable-release.gpg /etc/apt/trusted.gpg.d/pmjdebruijn_ubuntu_darktable-release.gpg
COPY --from=build /usr/local/bin/photoprism /usr/local/bin/photoprism
COPY --from=build /usr/lib/libtensorflow.so /usr/lib/libtensorflow.so
COPY --from=build /usr/lib/libtensorflow_framework.so /usr/lib/libtensorflow_framework.so
COPY --from=build /srv/photoprism /srv/photoprism
# Configure dynamic linker run-time bindings
RUN ldconfig
# Install darktable (RAW to JPEG converter)
@ -47,12 +39,36 @@ RUN apt-get update && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 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 & TiDB port
EXPOSE 80
EXPOSE 4000
# Expose http and database ports
EXPOSE 2342 4000
# Start PhotoPrism server
# Run server
CMD photoprism start

View file

@ -1,22 +1,22 @@
version: '3.3'
# Example docker-compose config file for production use
# Container image on Docker Hub: https://hub.docker.com/r/photoprism/photoprism/
# To keep photoprism running, add "restart: always"
#
# Usage: docker-compose up
services:
photoprism: # change if needed
image: photoprism/photoprism:latest # use pre-built image from docker hub: https://hub.docker.com/r/photoprism/photoprism/
restart: always
photoprism:
image: photoprism/photoprism:latest
ports:
- 2342:80 # left side is your local port (change if port 2342 is already used or you want to use port 80)
- 2342:2342 # [local port]:[container port]
volumes:
- "~/Photos:/srv/photoprism/photos" # change ~/Photos to whatever directory you want to use on your local computer
- "photoprism-cache:/srv/photoprism/cache" # keep this (thumbnail cache)
- "photoprism-database:/srv/photoprism/database" # keep this (database files)
environment:
PHOTOPRISM_IMPORT_PATH: /srv/photoprism/photos/Import # ~/Photos/Import (files to be imported to originals)
PHOTOPRISM_EXPORT_PATH: /srv/photoprism/photos/Export # ~/Photos/Export (files exported from originals)
PHOTOPRISM_ORIGINALS_PATH: /srv/photoprism/photos/Originals # ~/Photos/Originals (original jpeg, raw and meta files)
- "~/Pictures/Originals:/home/photoprism/Pictures/Originals" # [local path]:[container path]
- "~/Pictures/Import:/home/photoprism/Pictures/Import" # [local path]:[container path] (optional)
- "~/Pictures/Export:/home/photoprism/Pictures/Export" # [local path]:[container path] (optional)
- "photoprism-cache:/home/photoprism/.cache/photoprism" # keep thumbnail cache
- "photoprism-database:/home/photoprism/.local/share/photoprism/resources/database" # keep database files
volumes: # keep this
photoprism-cache:

View file

@ -102,7 +102,7 @@ func startAction(ctx *cli.Context) error {
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Info("Shutting down...")
log.Info("shutting down...")
conf.Shutdown()
cancel()
err := dctx.Release()

View file

@ -31,6 +31,7 @@ var GlobalFlags = []cli.Flag{
cli.StringFlag{
Name: "config-path",
Usage: "config `PATH`",
Value: "~/.config/photoprism",
EnvVar: "PHOTOPRISM_CONFIG_PATH",
},
cli.StringFlag{
@ -41,31 +42,31 @@ var GlobalFlags = []cli.Flag{
cli.StringFlag{
Name: "originals-path",
Usage: "originals `PATH`",
Value: "/srv/photoprism/photos/originals",
Value: "~/Pictures/Originals",
EnvVar: "PHOTOPRISM_ORIGINALS_PATH",
},
cli.StringFlag{
Name: "import-path",
Usage: "import `PATH`",
Value: "/srv/photoprism/photos/import",
Value: "~/Pictures/Import",
EnvVar: "PHOTOPRISM_IMPORT_PATH",
},
cli.StringFlag{
Name: "export-path",
Usage: "export `PATH`",
Value: "/srv/photoprism/photos/export",
Value: "~/Pictures/Export",
EnvVar: "PHOTOPRISM_EXPORT_PATH",
},
cli.StringFlag{
Name: "cache-path",
Usage: "cache `PATH`",
Value: "/srv/photoprism/cache",
Value: "~/.cache/photoprism",
EnvVar: "PHOTOPRISM_CACHE_PATH",
},
cli.StringFlag{
Name: "assets-path",
Usage: "assets `PATH`",
Value: "/srv/photoprism",
Value: "~/.local/share/photoprism",
EnvVar: "PHOTOPRISM_ASSETS_PATH",
},
cli.StringFlag{
@ -83,7 +84,7 @@ var GlobalFlags = []cli.Flag{
cli.IntFlag{
Name: "http-port, p",
Usage: "HTTP server port",
Value: 80,
Value: 2342,
EnvVar: "PHOTOPRISM_HTTP_PORT",
},
cli.StringFlag{
@ -156,13 +157,13 @@ var GlobalFlags = []cli.Flag{
Name: "daemon-pid-path",
Usage: "File path to store daemon PID",
EnvVar: "PHOTOPRISM_DAEMON_PID_PATH",
Value: "/srv/photoprism/photoprism.pid",
Value: "~/.local/share/photoprism/photoprism.pid",
},
cli.StringFlag{
Name: "daemon-log-path",
Usage: "File path for daemon logs.",
EnvVar: "PHOTOPRISM_DAEMON_LOG_PATH",
Value: "/srv/photoprism/photoprism.log",
Value: "~/.local/share/photoprism/photoprism.log",
},
cli.BoolFlag{
Name: "daemonize, d",

View file

@ -8,42 +8,44 @@ import (
)
func InitDatabase(port uint, password string) error {
log.Info("init database: trying login without password")
log.Info("initializing database...")
db, err := sql.Open("mysql", fmt.Sprintf("root:@tcp(localhost:%d)/", port))
defer db.Close()
if err != nil {
log.Debugf("init database: %s", err)
log.Debug("init database: login as root with password")
log.Debug(err.Error())
log.Debug("database login as root with password")
db, err = sql.Open("mysql", fmt.Sprintf("root:%s@tcp(localhost:%d)/", password, port))
}
if err != nil {
log.Error(err)
log.Error(err.Error())
return err
}
log.Debug("init database: login was successful")
log.Debug("set database password")
_, err = db.Exec(fmt.Sprintf("SET PASSWORD FOR 'root'@'%%' = '%s'", password))
if err != nil {
log.Error(err)
log.Error(err.Error())
} else {
log.Debug("init database: FLUSH PRIVILEGES")
log.Debug("flush database privileges")
_, err = db.Exec("FLUSH PRIVILEGES")
}
log.Debug("init database: CREATE DATABASE IF NOT EXISTS photoprism")
log.Debug("create database if not exists")
_, err = db.Exec("CREATE DATABASE IF NOT EXISTS photoprism")
if err != nil {
log.Error(err)
log.Error(err.Error())
}
log.Info("database created")
return nil
}

View file

@ -1,13 +1,11 @@
#!/usr/bin/env bash
if [[ -z $DOCKER_PASSWORD ]] || [[ -z $DOCKER_USERNAME ]]; then
echo "DOCKER_PASSWORD and DOCKER_USERNAME not set in your environment";
exit 1
docker login
else
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
fi
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
if [[ -z $1 ]] || [[ -z $2 ]]; then
echo "Please provide a container image name and version" 1>&2
exit 1
@ -16,4 +14,4 @@ else
docker push photoprism/$1:latest
docker push photoprism/$1:$2
echo "Done"
fi
fi