Docker: Update multi-arch development image and config #1158

Now comes with Go 1.17 pre-installed. To match production
docker-compose.yml examples, the development database was
renamed from "photoprism-db" to "mariadb".
This commit is contained in:
Michael Mayer
2021-08-31 18:08:37 +02:00
parent e5bfa6d78e
commit feb0c557c1
23 changed files with 89 additions and 72 deletions

View File

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

View File

@@ -26,9 +26,9 @@ dep: dep-tensorflow dep-js dep-go
build: generate build-js build-go build: generate build-js build-go
install: install-bin install-assets install: install-bin install-assets
test: test-js test-go test: test-js test-go
test-go: reset-test-db run-test-go test-go: reset-test-databases run-test-go
test-api: reset-test-db run-test-api test-api: reset-test-databases run-test-api
test-short: reset-test-db run-test-short test-short: reset-test-databases run-test-short
acceptance-private-run-chromium: acceptance-private-restart acceptance-private acceptance-private-stop acceptance-private-run-chromium: acceptance-private-restart acceptance-private acceptance-private-stop
acceptance-public-run-chromium: acceptance-restart acceptance acceptance-stop acceptance-public-run-chromium: acceptance-restart acceptance acceptance-stop
acceptance-private-run-firefox: acceptance-private-restart acceptance-private-firefox acceptance-private-stop acceptance-private-run-firefox: acceptance-private-restart acceptance-private-firefox acceptance-private-stop
@@ -152,12 +152,12 @@ acceptance-private:
acceptance-private-firefox: acceptance-private-firefox:
$(info Running JS acceptance-private tests in Firefox...) $(info Running JS acceptance-private tests in Firefox...)
(cd frontend && npm run acceptance-private-firefox && cd ..) (cd frontend && npm run acceptance-private-firefox && cd ..)
reset-photoprism-db: reset-mariadb:
$(info Purging photoprism database...) $(info Resetting photoprism database...)
mysql < scripts/reset-photoprism-db.sql mysql < scripts/sql/reset-mariadb.sql
reset-test-db: reset-test-databases:
$(info Purging test databases...) $(info Resetting test databases...)
mysql < scripts/reset-test-db.sql mysql < scripts/sql/init-test-databases.sql
find ./internal -type f -name '.test.*' -delete find ./internal -type f -name '.test.*' -delete
run-test-short: run-test-short:
$(info Running short Go unit tests in parallel mode...) $(info Running short Go unit tests in parallel mode...)

View File

@@ -8,7 +8,8 @@ services:
- seccomp:unconfined - seccomp:unconfined
- apparmor:unconfined - apparmor:unconfined
depends_on: depends_on:
- photoprism-db - mariadb
- webdav-dummy
volumes: volumes:
- "~/.cache/npm:/root/.cache/npm" - "~/.cache/npm:/root/.cache/npm"
- "~/.cache/go-mod:/go/pkg/mod" - "~/.cache/go-mod:/go/pkg/mod"
@@ -28,7 +29,7 @@ services:
PHOTOPRISM_HTTP_PORT: 2342 PHOTOPRISM_HTTP_PORT: 2342
PHOTOPRISM_HTTP_COMPRESSION: "gzip" # Improves transfer speed and bandwidth utilization (none or gzip) PHOTOPRISM_HTTP_COMPRESSION: "gzip" # Improves transfer speed and bandwidth utilization (none or gzip)
PHOTOPRISM_DATABASE_DRIVER: "mysql" PHOTOPRISM_DATABASE_DRIVER: "mysql"
PHOTOPRISM_DATABASE_SERVER: "photoprism-db:4001" PHOTOPRISM_DATABASE_SERVER: "mariadb:4001"
PHOTOPRISM_DATABASE_NAME: "photoprism" PHOTOPRISM_DATABASE_NAME: "photoprism"
PHOTOPRISM_DATABASE_USER: "root" PHOTOPRISM_DATABASE_USER: "root"
PHOTOPRISM_DATABASE_PASSWORD: "photoprism" PHOTOPRISM_DATABASE_PASSWORD: "photoprism"
@@ -137,13 +138,13 @@ services:
DRONE_TAG: DRONE_TAG:
DRONE_TARGET_BRANCH: DRONE_TARGET_BRANCH:
photoprism-db: mariadb:
image: mariadb:10.5 image: mariadb:10.5
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50 command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50
expose: expose:
- "4001" - "4001"
volumes: volumes:
- "./scripts/reset-test-db.sql:/docker-entrypoint-initdb.d/reset-test-db.sql" - "./scripts/sql/init-test-databases.sql:/docker-entrypoint-initdb.d/init-test-databases.sql"
environment: environment:
MYSQL_ROOT_PASSWORD: photoprism MYSQL_ROOT_PASSWORD: photoprism
MYSQL_USER: photoprism MYSQL_USER: photoprism

View File

@@ -4,11 +4,12 @@ services:
photoprism: photoprism:
build: . build: .
image: photoprism/photoprism:develop image: photoprism/photoprism:develop
depends_on:
- postgres
- webdav-dummy
security_opt: security_opt:
- seccomp:unconfined - seccomp:unconfined
- apparmor:unconfined - apparmor:unconfined
depends_on:
- postgres
ports: ports:
- "2342:2342" # Web Server (PhotoPrism) - "2342:2342" # Web Server (PhotoPrism)
- "2343:2343" # Acceptance Tests - "2343:2343" # Acceptance Tests
@@ -64,7 +65,7 @@ services:
postgres: postgres:
image: postgres:12-alpine image: postgres:12-alpine
ports: ports:
- "5432:5432" - "5432:5432" # Exposes port 5432 on host
environment: environment:
POSTGRES_DB: photoprism POSTGRES_DB: photoprism
POSTGRES_USER: photoprism POSTGRES_USER: photoprism

View File

@@ -17,11 +17,12 @@ services:
photoprism: photoprism:
build: . build: .
image: photoprism/photoprism:develop image: photoprism/photoprism:develop
depends_on:
- mariadb
- webdav-dummy
security_opt: security_opt:
- seccomp:unconfined - seccomp:unconfined
- apparmor:unconfined - apparmor:unconfined
depends_on:
- photoprism-db
ports: ports:
- "2342:2342" # Web Server (PhotoPrism) - "2342:2342" # Web Server (PhotoPrism)
- "2343:2343" # Acceptance Tests - "2343:2343" # Acceptance Tests
@@ -47,7 +48,7 @@ services:
PHOTOPRISM_HTTP_PORT: 2342 PHOTOPRISM_HTTP_PORT: 2342
PHOTOPRISM_HTTP_COMPRESSION: "gzip" # Improves transfer speed and bandwidth utilization (none or gzip) PHOTOPRISM_HTTP_COMPRESSION: "gzip" # Improves transfer speed and bandwidth utilization (none or gzip)
PHOTOPRISM_DATABASE_DRIVER: "mysql" PHOTOPRISM_DATABASE_DRIVER: "mysql"
PHOTOPRISM_DATABASE_SERVER: "photoprism-db:4001" PHOTOPRISM_DATABASE_SERVER: "mariadb:4001"
PHOTOPRISM_DATABASE_NAME: "photoprism" PHOTOPRISM_DATABASE_NAME: "photoprism"
PHOTOPRISM_DATABASE_USER: "root" PHOTOPRISM_DATABASE_USER: "root"
PHOTOPRISM_DATABASE_PASSWORD: "photoprism" PHOTOPRISM_DATABASE_PASSWORD: "photoprism"
@@ -74,15 +75,16 @@ services:
PHOTOPRISM_THUMB_SIZE_UNCACHED: 7680 # On-demand rendering size limit (default 7680, min 720, max 7680) PHOTOPRISM_THUMB_SIZE_UNCACHED: 7680 # On-demand rendering size limit (default 7680, min 720, max 7680)
PHOTOPRISM_JPEG_SIZE: 7680 # Size limit for converted image files in pixels (720-30000) PHOTOPRISM_JPEG_SIZE: 7680 # Size limit for converted image files in pixels (720-30000)
PHOTOPRISM_JPEG_QUALITY: 92 # Set to 95 for high-quality thumbnails (25-100) PHOTOPRISM_JPEG_QUALITY: 92 # Set to 95 for high-quality thumbnails (25-100)
photoprism-db:
mariadb:
image: mariadb:10.5 image: mariadb:10.5
command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50 command: mysqld --port=4001 --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=50
expose: expose:
- "4001" - "4001"
ports: ports:
- "4001:4001" # MySQL (for tests) - "4001:4001" # Exposes port 4001 on host
volumes: volumes:
- "./scripts/reset-test-db.sql:/docker-entrypoint-initdb.d/reset-test-db.sql" - "./scripts/sql/init-test-databases.sql:/docker-entrypoint-initdb.d/init-test-databases.sql"
environment: environment:
MYSQL_ROOT_PASSWORD: photoprism MYSQL_ROOT_PASSWORD: photoprism
MYSQL_USER: photoprism MYSQL_USER: photoprism

View File

@@ -1,5 +1,5 @@
[client] [client]
user=root user=root
password=photoprism password=photoprism
host=photoprism-db host=mariadb
port=4001 port=4001

View File

@@ -21,8 +21,7 @@ RUN echo 'Acquire::Retries "10";' > /etc/apt/apt.conf.d/80retry && \
COPY --chown=root:root --chmod=755 /docker/scripts/*.sh /root/.local/bin/ COPY --chown=root:root --chmod=755 /docker/scripts/*.sh /root/.local/bin/
# Install dev / build dependencies # Install dev / build dependencies
RUN apt-get update && apt-get -qq dist-upgrade && \ RUN apt-get update && apt dist-upgrade 2>/dev/null && apt-get -qq install -y --no-install-recommends \
apt-get -qq install -y --no-install-recommends \
build-essential \ build-essential \
ca-certificates \ ca-certificates \
wget \ wget \
@@ -94,7 +93,6 @@ RUN /root/.local/bin/install-tensorflow.sh $TARGETARCH
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN add-apt-repository -y ppa:saiarcot895/chromium-beta && \ RUN add-apt-repository -y ppa:saiarcot895/chromium-beta && \
apt-get update && \ apt-get update && \
apt-get -qq dist-upgrade && \
apt-get -qq install chromium-browser chromium-codecs-ffmpeg-extra nodejs && \ apt-get -qq install chromium-browser chromium-codecs-ffmpeg-extra nodejs && \
apt-get -y autoremove && \ apt-get -y autoremove && \
apt-get -y autoclean && \ apt-get -y autoclean && \

View File

@@ -33,6 +33,8 @@ services:
# Use photoprism/photoprism:preview instead for testing preview builds: # Use photoprism/photoprism:preview instead for testing preview builds:
image: photoprism/photoprism:latest image: photoprism/photoprism:latest
container_name: photoprism container_name: photoprism
depends_on:
- mariadb
# Only enable automatic restarts once your installation is properly # Only enable automatic restarts once your installation is properly
# configured as it otherwise may get stuck in a restart loop: # configured as it otherwise may get stuck in a restart loop:
# https://docs.photoprism.org/getting-started/faq/#why-is-photoprism-getting-stuck-in-a-restart-loop # https://docs.photoprism.org/getting-started/faq/#why-is-photoprism-getting-stuck-in-a-restart-loop
@@ -92,9 +94,9 @@ services:
- "./storage:/photoprism/storage" - "./storage:/photoprism/storage"
mariadb: mariadb:
restart: unless-stopped
image: arm64v8/mariadb:10.5 image: arm64v8/mariadb:10.5
container_name: mariadb container_name: mariadb
restart: unless-stopped
security_opt: security_opt:
- seccomp:unconfined - seccomp:unconfined
- apparmor:unconfined - apparmor:unconfined
@@ -110,9 +112,9 @@ services:
# Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available: # Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available:
# #
# watchtower: # watchtower:
# restart: unless-stopped
# image: containrrr/watchtower # image: containrrr/watchtower
# container_name: watchtower # container_name: watchtower
# restart: unless-stopped
# environment: # environment:
# WATCHTOWER_CLEANUP: "true" # WATCHTOWER_CLEANUP: "true"
# WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours # WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours

View File

@@ -45,7 +45,7 @@
"echo 'APT::Get::Assume-Yes \"true\";' > /etc/apt/apt.conf.d/80forceyes", "echo 'APT::Get::Assume-Yes \"true\";' > /etc/apt/apt.conf.d/80forceyes",
"echo 'APT::Get::Fix-Missing \"true\";' > /etc/apt/apt.conf.d/80fixmissing", "echo 'APT::Get::Fix-Missing \"true\";' > /etc/apt/apt.conf.d/80fixmissing",
"apt-get -qqy update", "apt-get -qqy update",
"apt dist-upgrade", "apt dist-upgrade 2>/dev/null",
"apt-get -qqy install {{user `apt_packages`}}", "apt-get -qqy install {{user `apt_packages`}}",
"apt-get -qqy autoclean", "apt-get -qqy autoclean",
"apt-get -qqy autoremove", "apt-get -qqy autoremove",

View File

@@ -91,10 +91,12 @@ version: '3.5'
services: services:
photoprism: photoprism:
restart: always
# Use photoprism/photoprism:preview instead for testing preview builds: # Use photoprism/photoprism:preview instead for testing preview builds:
image: photoprism/photoprism:latest image: photoprism/photoprism:latest
container_name: photoprism container_name: photoprism
restart: always depends_on:
- mariadb
security_opt: security_opt:
- seccomp:unconfined - seccomp:unconfined
- apparmor:unconfined - apparmor:unconfined
@@ -151,9 +153,9 @@ services:
- "./backup:/var/lib/photoprism" - "./backup:/var/lib/photoprism"
traefik: traefik:
restart: always
image: traefik:v2.4 image: traefik:v2.4
container_name: traefik container_name: traefik
restart: always
ports: ports:
- "80:80" - "80:80"
- "443:443" - "443:443"
@@ -167,9 +169,9 @@ services:
- "./certs/:/certs/" - "./certs/:/certs/"
mariadb: mariadb:
restart: always
image: mariadb:10.5 image: mariadb:10.5
container_name: mariadb container_name: mariadb
restart: always
security_opt: security_opt:
- seccomp:unconfined - seccomp:unconfined
- apparmor:unconfined - apparmor:unconfined
@@ -183,17 +185,17 @@ services:
MYSQL_PASSWORD: "_admin_password_" MYSQL_PASSWORD: "_admin_password_"
ofelia: ofelia:
restart: always
image: mcuadros/ofelia:latest image: mcuadros/ofelia:latest
container_name: ofelia container_name: ofelia
restart: always
volumes: volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro" - "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./jobs.ini:/etc/ofelia/config.ini" - "./jobs.ini:/etc/ofelia/config.ini"
watchtower: watchtower:
restart: always
image: containrrr/watchtower image: containrrr/watchtower
container_name: watchtower container_name: watchtower
restart: always
environment: environment:
WATCHTOWER_CLEANUP: "true" WATCHTOWER_CLEANUP: "true"
WATCHTOWER_POLL_INTERVAL: 86400 # Checks for updates every day WATCHTOWER_POLL_INTERVAL: 86400 # Checks for updates every day

View File

@@ -36,7 +36,7 @@ echo 'APT::Get::Fix-Missing "true";' > /etc/apt/apt.conf.d/80fixmissing
# update operating system # update operating system
apt-get update apt-get update
apt-get dist-upgrade apt dist-upgrade 2>/dev/null
# install dependencies # install dependencies
apt-get -qq install --no-install-recommends apt-transport-https ca-certificates \ apt-get -qq install --no-install-recommends apt-transport-https ca-certificates \

View File

@@ -33,6 +33,8 @@ services:
# Use photoprism/photoprism:preview instead for testing preview builds: # Use photoprism/photoprism:preview instead for testing preview builds:
image: photoprism/photoprism:latest image: photoprism/photoprism:latest
container_name: photoprism container_name: photoprism
depends_on:
- mariadb
# Only enable automatic restarts once your installation is properly # Only enable automatic restarts once your installation is properly
# configured as it otherwise may get stuck in a restart loop: # configured as it otherwise may get stuck in a restart loop:
# https://docs.photoprism.org/getting-started/faq/#why-is-photoprism-getting-stuck-in-a-restart-loop # https://docs.photoprism.org/getting-started/faq/#why-is-photoprism-getting-stuck-in-a-restart-loop
@@ -86,9 +88,9 @@ services:
- "./storage:/photoprism/storage" - "./storage:/photoprism/storage"
mariadb: mariadb:
restart: unless-stopped
image: mariadb:10.5 image: mariadb:10.5
container_name: mariadb container_name: mariadb
restart: unless-stopped
security_opt: security_opt:
- seccomp:unconfined - seccomp:unconfined
- apparmor:unconfined - apparmor:unconfined
@@ -104,9 +106,9 @@ services:
# Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available: # Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available:
# #
# watchtower: # watchtower:
# restart: unless-stopped
# image: containrrr/watchtower # image: containrrr/watchtower
# container_name: watchtower # container_name: watchtower
# restart: unless-stopped
# environment: # environment:
# WATCHTOWER_CLEANUP: "true" # WATCHTOWER_CLEANUP: "true"
# WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours # WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours

View File

@@ -31,6 +31,8 @@ services:
# Use photoprism/photoprism:preview instead for testing preview builds: # Use photoprism/photoprism:preview instead for testing preview builds:
image: photoprism/photoprism:latest image: photoprism/photoprism:latest
container_name: photoprism container_name: photoprism
depends_on:
- mariadb
# Only enable automatic restarts once your installation is properly # Only enable automatic restarts once your installation is properly
# configured as it otherwise may get stuck in a restart loop: # configured as it otherwise may get stuck in a restart loop:
# https://docs.photoprism.org/getting-started/faq/#why-is-photoprism-getting-stuck-in-a-restart-loop # https://docs.photoprism.org/getting-started/faq/#why-is-photoprism-getting-stuck-in-a-restart-loop
@@ -76,9 +78,9 @@ services:
- "./storage:/photoprism/storage" - "./storage:/photoprism/storage"
mariadb: mariadb:
restart: unless-stopped
image: mariadb:10.5 image: mariadb:10.5
container_name: mariadb container_name: mariadb
restart: unless-stopped
security_opt: security_opt:
- seccomp:unconfined - seccomp:unconfined
- apparmor:unconfined - apparmor:unconfined
@@ -94,9 +96,9 @@ services:
# Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available: # Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available:
# #
# watchtower: # watchtower:
# restart: unless-stopped
# image: containrrr/watchtower # image: containrrr/watchtower
# container_name: watchtower # container_name: watchtower
# restart: unless-stopped
# environment: # environment:
# WATCHTOWER_CLEANUP: "true" # WATCHTOWER_CLEANUP: "true"
# WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours # WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours

View File

@@ -35,6 +35,8 @@ services:
# Use photoprism/photoprism:preview instead for testing preview builds: # Use photoprism/photoprism:preview instead for testing preview builds:
image: photoprism/photoprism:latest image: photoprism/photoprism:latest
container_name: photoprism container_name: photoprism
depends_on:
- mariadb
# Only enable automatic restarts once your installation is properly # Only enable automatic restarts once your installation is properly
# configured as it otherwise may get stuck in a restart loop: # configured as it otherwise may get stuck in a restart loop:
# https://docs.photoprism.org/getting-started/faq/#why-is-photoprism-getting-stuck-in-a-restart-loop # https://docs.photoprism.org/getting-started/faq/#why-is-photoprism-getting-stuck-in-a-restart-loop
@@ -88,9 +90,9 @@ services:
- "./storage:/photoprism/storage" - "./storage:/photoprism/storage"
mariadb: mariadb:
restart: unless-stopped
image: mariadb:10.5 image: mariadb:10.5
container_name: mariadb container_name: mariadb
restart: unless-stopped
security_opt: security_opt:
- seccomp:unconfined - seccomp:unconfined
- apparmor:unconfined - apparmor:unconfined
@@ -104,9 +106,9 @@ services:
MYSQL_PASSWORD: insecure MYSQL_PASSWORD: insecure
ofelia: ofelia:
restart: unless-stopped
image: mcuadros/ofelia:latest image: mcuadros/ofelia:latest
container_name: ofelia container_name: ofelia
restart: unless-stopped
volumes: volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro" - "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./jobs.ini:/etc/ofelia/config.ini" - "./jobs.ini:/etc/ofelia/config.ini"
@@ -114,9 +116,9 @@ services:
# Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available: # Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available:
# #
# watchtower: # watchtower:
# restart: unless-stopped
# image: containrrr/watchtower # image: containrrr/watchtower
# container_name: watchtower # container_name: watchtower
# restart: unless-stopped
# environment: # environment:
# WATCHTOWER_CLEANUP: "true" # WATCHTOWER_CLEANUP: "true"
# WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours # WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours

View File

@@ -83,9 +83,9 @@ services:
# Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available: # Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available:
# #
# watchtower: # watchtower:
# restart: unless-stopped
# image: containrrr/watchtower # image: containrrr/watchtower
# container_name: watchtower # container_name: watchtower
# restart: unless-stopped
# environment: # environment:
# WATCHTOWER_CLEANUP: "true" # WATCHTOWER_CLEANUP: "true"
# WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours # WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours

View File

@@ -34,6 +34,8 @@ services:
# Use photoprism/photoprism:preview instead for testing preview builds: # Use photoprism/photoprism:preview instead for testing preview builds:
image: photoprism/photoprism:latest image: photoprism/photoprism:latest
container_name: photoprism container_name: photoprism
depends_on:
- mariadb
# Only enable automatic restarts once your installation is properly # Only enable automatic restarts once your installation is properly
# configured as it otherwise may get stuck in a restart loop: # configured as it otherwise may get stuck in a restart loop:
# https://docs.photoprism.org/getting-started/faq/#why-is-photoprism-getting-stuck-in-a-restart-loop # https://docs.photoprism.org/getting-started/faq/#why-is-photoprism-getting-stuck-in-a-restart-loop
@@ -79,9 +81,9 @@ services:
- "./storage:/photoprism/storage" - "./storage:/photoprism/storage"
mariadb: mariadb:
restart: unless-stopped
image: mariadb:10.5 image: mariadb:10.5
container_name: mariadb container_name: mariadb
restart: unless-stopped
security_opt: security_opt:
- seccomp:unconfined - seccomp:unconfined
- apparmor:unconfined - apparmor:unconfined
@@ -97,9 +99,9 @@ services:
# Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available: # Uncomment the following lines to upgrade automatically, whenever there is a new Docker image available:
# #
# watchtower: # watchtower:
# restart: unless-stopped
# image: containrrr/watchtower # image: containrrr/watchtower
# container_name: watchtower # container_name: watchtower
# restart: unless-stopped
# environment: # environment:
# WATCHTOWER_CLEANUP: "true" # WATCHTOWER_CLEANUP: "true"
# WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours # WATCHTOWER_POLL_INTERVAL: 7200 # Checks for updates every two hours

View File

@@ -1,4 +1,4 @@
FROM photoprism/development:20210716 as build FROM photoprism/development:20210831 as build
ARG TARGETARCH ARG TARGETARCH
ARG TARGETPLATFORM ARG TARGETPLATFORM
@@ -8,10 +8,10 @@ ARG BUILD_TAG
WORKDIR "/go/src/github.com/photoprism/photoprism" WORKDIR "/go/src/github.com/photoprism/photoprism"
COPY . . COPY . .
# Build PhotoPrism # Build frontend and backend
RUN make dep build-js install RUN make dep build-js install
# Same base image as photoprism/development # Should be the same as used for photoprism/development!
FROM ubuntu:21.04 FROM ubuntu:21.04
LABEL maintainer="Michael Mayer <hello@photoprism.org>" LABEL maintainer="Michael Mayer <hello@photoprism.org>"
@@ -31,8 +31,7 @@ RUN echo 'Acquire::Retries "10";' > /etc/apt/apt.conf.d/80retry && \
echo 'APT::Get::Fix-Missing "true";' > /etc/apt/apt.conf.d/80fixmissing echo 'APT::Get::Fix-Missing "true";' > /etc/apt/apt.conf.d/80fixmissing
# Install additional distribution packages # Install additional distribution packages
RUN apt-get update && apt-get -qq dist-upgrade && \ RUN apt-get update && apt dist-upgrade 2>/dev/null && apt-get -qq install -y --no-install-recommends \
apt-get -qq install -y --no-install-recommends \
gpgv \ gpgv \
wget \ wget \
curl \ curl \
@@ -56,8 +55,7 @@ RUN apt-get update && apt-get -qq dist-upgrade && \
[ "$TARGETARCH" = "arm" ] || apt-get install darktable; \ [ "$TARGETARCH" = "arm" ] || apt-get install darktable; \
apt-get -y autoremove && apt-get -y autoclean && apt-get clean && rm -rf /var/lib/apt/lists/* apt-get -y autoremove && apt-get -y autoclean && apt-get clean && rm -rf /var/lib/apt/lists/*
# Set environment variables # Set environment variables, see https://docs.photoprism.org/getting-started/config-options/
# see https://docs.photoprism.org/getting-started/config-options/
ENV TF_CPP_MIN_LOG_LEVEL="2" \ ENV TF_CPP_MIN_LOG_LEVEL="2" \
PATH="/photoprism/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \ PATH="/photoprism/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
PHOTOPRISM_ASSETS_PATH="/photoprism/assets" \ PHOTOPRISM_ASSETS_PATH="/photoprism/assets" \

View File

@@ -1,23 +1,25 @@
#!/usr/bin/env bash #!/usr/bin/env bash
GOLANG_VERSION=1.16.6 set -e
GOLANG_VERSION=1.17
if [[ -z $1 ]]; then if [[ -z $1 ]]; then
echo "Please define architecture and version" 1>&2 echo "architecture required: amd64, arm64, or arm" 1>&2
exit 1 exit 1
else else
set -eux; set -eux;
if [[ $1 == "amd64" ]]; then if [[ $1 == "amd64" ]]; then
URL="https://golang.org/dl/go${GOLANG_VERSION}.linux-$1.tar.gz" URL="https://golang.org/dl/go${GOLANG_VERSION}.linux-$1.tar.gz"
CHECKSUM="be333ef18b3016e9d7cb7b1ff1fdb0cac800ca0be4cf2290fe613b3d069dfe0d *go.tgz" CHECKSUM="6bf89fc4f5ad763871cf7eac80a2d594492de7a818303283f1366a7f6a30372d *go.tgz"
elif [[ $1 == "arm64" ]]; then elif [[ $1 == "arm64" ]]; then
URL="https://golang.org/dl/go${GOLANG_VERSION}.linux-$1.tar.gz" URL="https://golang.org/dl/go${GOLANG_VERSION}.linux-$1.tar.gz"
CHECKSUM="9e38047463da6daecab9017cd0599f33f84991e68263752cfab49253bbc98c30 *go.tgz" CHECKSUM="01a9af009ada22122d3fcb9816049c1d21842524b38ef5d5a0e2ee4b26d7c3e7 *go.tgz"
elif [[ $1 == "arm" ]]; then elif [[ $1 == "arm" ]]; then
URL="https://golang.org/dl/go${GOLANG_VERSION}.linux-armv6l.tar.gz" URL="https://golang.org/dl/go${GOLANG_VERSION}.linux-armv6l.tar.gz"
CHECKSUM="b1ca342e81897da3f25da4e75ae29b267db1674fe7222d9bfc4c666bcf6fce69 *go.tgz" CHECKSUM="ae89d33f4e4acc222bdb04331933d5ece4ae71039812f6ccd7493cb3e8ddfb4e *go.tgz"
else else
echo "cpu architecture not supported by now" 1>&2 echo "unsupported architecture" 1>&2
exit 1 exit 1
fi fi
wget -O go.tgz $URL wget -O go.tgz $URL

View File

@@ -44,7 +44,7 @@ func NewTestOptions() *Options {
// Config example for MySQL / MariaDB: // Config example for MySQL / MariaDB:
// dbDriver = MySQL, // dbDriver = MySQL,
// dbDsn = "photoprism:photoprism@tcp(photoprism-db:4001)/photoprism?parseTime=true", // dbDsn = "photoprism:photoprism@tcp(mariadb:4001)/photoprism?parseTime=true",
if dbDriver == "test" || dbDriver == "sqlite" || dbDriver == "" || dbDsn == "" { if dbDriver == "test" || dbDriver == "sqlite" || dbDriver == "" || dbDsn == "" {
dbDriver = SQLite dbDriver = SQLite

View File

@@ -2,16 +2,21 @@
set -e set -e
# see https://docs.docker.com/develop/develop-images/build_enhancements/#to-enable-buildkit-builds # https://docs.docker.com/develop/develop-images/build_enhancements/#to-enable-buildkit-builds
export DOCKER_BUILDKIT=1 export DOCKER_BUILDKIT=1
if [[ -z $1 ]] || [[ -z $2 ]]; then if [[ -z $1 ]] || [[ -z $2 ]]; then
echo "Please provide a container image name and architecture string (eg. linux/amd64,linux/arm64,linux/arm)" 1>&2 echo "Please provide the image name, and a list of target architectures e.g. linux/amd64,linux/arm64,linux/arm" 1>&2
exit 1 exit 1
elif [[ $1 ]] && [[ $2 ]] && [[ -z $3 ]]; then fi
echo "Recreating multibuilder..."
docker buildx rm multibuilder 2>/dev/null || true
docker buildx create --name multibuilder --use
if [[ $1 ]] && [[ $2 ]] && [[ -z $3 ]]; then
echo "Building 'photoprism/$1:preview'..."
DOCKER_TAG=$(date -u +%Y%m%d) DOCKER_TAG=$(date -u +%Y%m%d)
echo "Building 'photoprism/$1:preview'...";
docker buildx create --name multibuilder --use
docker buildx build \ docker buildx build \
--platform $2 \ --platform $2 \
--no-cache \ --no-cache \
@@ -19,11 +24,8 @@ elif [[ $1 ]] && [[ $2 ]] && [[ -z $3 ]]; then
-f docker/$1/Dockerfile \ -f docker/$1/Dockerfile \
-t photoprism/$1:preview \ -t photoprism/$1:preview \
--push . --push .
docker buildx rm multibuilder
echo "Done"
else else
echo "Building 'photoprism/$1:$3'..."; echo "Building 'photoprism/$1:$3'..."
docker buildx create --name multibuilder --use
docker buildx build \ docker buildx build \
--platform $2 \ --platform $2 \
--no-cache \ --no-cache \
@@ -32,6 +34,7 @@ else
-t photoprism/$1:latest \ -t photoprism/$1:latest \
-t photoprism/$1:$3 \ -t photoprism/$1:$3 \
--push . --push .
docker buildx rm multibuilder
echo "Done"
fi fi
docker buildx rm multibuilder
echo "Done"

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
apt-get update && apt-get -qq install -y qemu binfmt-support qemu-user-static qemu-system-arm qemu-efi-aarch64 sudo apt-get update && sudo apt-get -qq install -y qemu binfmt-support qemu-user-static qemu-system-arm qemu-efi-aarch64
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes docker run --rm --privileged multiarch/qemu-user-static --reset -p yes