Setup: Add Podman example config and Makefile
Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
parent
15199c4e7f
commit
c39f1b0564
6 changed files with 277 additions and 1 deletions
2
Makefile
2
Makefile
|
@ -40,7 +40,7 @@ else
|
||||||
GOTEST=go test
|
GOTEST=go test
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Compatibility layer to support “docker-compose” and “docker compose”
|
# Ensure compatibility with "docker-compose" (old) and "docker compose" (new).
|
||||||
HAS_DOCKER_COMPOSE_WITH_DASH := $(shell which docker-compose)
|
HAS_DOCKER_COMPOSE_WITH_DASH := $(shell which docker-compose)
|
||||||
|
|
||||||
ifdef HAS_DOCKER_COMPOSE_WITH_DASH
|
ifdef HAS_DOCKER_COMPOSE_WITH_DASH
|
||||||
|
|
33
docker/examples/Makefile
Normal file
33
docker/examples/Makefile
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
MAKEFLAGS += --always-make
|
||||||
|
|
||||||
|
-include .env
|
||||||
|
export
|
||||||
|
|
||||||
|
# Ensure compatibility with "docker-compose" (old) and "docker compose" (new).
|
||||||
|
HAS_DOCKER_COMPOSE_WITH_DASH := $(shell which docker-compose)
|
||||||
|
|
||||||
|
ifdef HAS_DOCKER_COMPOSE_WITH_DASH
|
||||||
|
DOCKER_COMPOSE=docker-compose
|
||||||
|
else
|
||||||
|
DOCKER_COMPOSE=docker compose
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: pull restart
|
||||||
|
uninstall: down remove
|
||||||
|
restart: stop start
|
||||||
|
pull:
|
||||||
|
$(DOCKER_COMPOSE) pull
|
||||||
|
start:
|
||||||
|
$(DOCKER_COMPOSE) up -d --remove-orphans
|
||||||
|
stop:
|
||||||
|
$(DOCKER_COMPOSE) stop
|
||||||
|
reset:
|
||||||
|
$(DOCKER_COMPOSE) exec photoprism photoprism reset
|
||||||
|
down:
|
||||||
|
$(DOCKER_COMPOSE) down -v
|
||||||
|
remove:
|
||||||
|
$(DOCKER_COMPOSE) rm -s -v
|
||||||
|
terminal:
|
||||||
|
$(DOCKER_COMPOSE) exec photoprism bash
|
||||||
|
logs:
|
||||||
|
$(DOCKER_COMPOSE) logs --tail=50 -f
|
24
docker/examples/podman/Makefile
Normal file
24
docker/examples/podman/Makefile
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
MAKEFLAGS += --always-make
|
||||||
|
|
||||||
|
-include .env
|
||||||
|
export
|
||||||
|
|
||||||
|
all: pull restart
|
||||||
|
uninstall: down remove
|
||||||
|
restart: stop start
|
||||||
|
pull:
|
||||||
|
podman-compose pull
|
||||||
|
start:
|
||||||
|
podman-compose up -d --remove-orphans
|
||||||
|
stop:
|
||||||
|
podman-compose stop
|
||||||
|
reset:
|
||||||
|
podman-compose exec photoprism photoprism reset
|
||||||
|
down:
|
||||||
|
podman-compose down -v
|
||||||
|
remove:
|
||||||
|
podman-compose rm -s -v
|
||||||
|
terminal:
|
||||||
|
podman-compose exec photoprism bash
|
||||||
|
logs:
|
||||||
|
podman-compose logs --tail=50 -f
|
47
docker/examples/podman/README.md
Normal file
47
docker/examples/podman/README.md
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
# PhotoPrism Setup (RedHat, CentOS, Fedora, and AlmaLinux / AMD64)
|
||||||
|
|
||||||
|
Running this command will install the required dependencies and download the configuration files:
|
||||||
|
|
||||||
|
```
|
||||||
|
mkdir -p /opt/photoprism
|
||||||
|
cd /opt/photoprism
|
||||||
|
curl -sSf https://dl.photoprism.app/podman/install.sh | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
Users of RedHat-based Linux distributions can substitute the `docker` and `docker compose` commands with `podman` and `podman-compose` as [drop-in replacements](https://docs.photoprism.app/getting-started/troubleshooting/docker/#redhat-linux).
|
||||||
|
|
||||||
|
## Firewall Settings
|
||||||
|
|
||||||
|
### Incoming Requests
|
||||||
|
|
||||||
|
By default, the application is accessible via port 2342 on all network devices. If you use a firewall, please make sure that this port is reachable from other computers on your network.
|
||||||
|
|
||||||
|
### Outgoing Connections
|
||||||
|
|
||||||
|
For the installation script and app to work as expected, we recommend whitelisting requests to the prsm.app, [photoprism.app](https://photoprism.app), and photoprism.xyz domains and their subdomains, e.g.:
|
||||||
|
|
||||||
|
- prsm.app
|
||||||
|
- dl.photoprism.app
|
||||||
|
- my.photoprism.app
|
||||||
|
- api.photoprism.app
|
||||||
|
- cdn.photoprism.app
|
||||||
|
- hub.photoprism.app
|
||||||
|
- setup.photoprism.app
|
||||||
|
- places.photoprism.app
|
||||||
|
- places.photoprism.xyz
|
||||||
|
|
||||||
|
Visit https://docs.photoprism.app/getting-started/#maps-places to learn more.
|
||||||
|
|
||||||
|
In addition, the following domains should be whitelisted so that Docker can pull public images, e.g. for MariaDB:
|
||||||
|
|
||||||
|
- auth.docker.io
|
||||||
|
- registry-1.docker.io
|
||||||
|
- index.docker.io
|
||||||
|
- dseasb33srnrn.cloudfront.net
|
||||||
|
- production.cloudflare.docker.com
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
*PhotoPrism® is a [registered trademark](https://photoprism.app/trademark). By using the software and services we provide, you agree to our [Terms of Service](https://photoprism.app/terms), [Privacy Policy](https://photoprism.app/privacy), and [Code of Conduct](https://photoprism.app/code-of-conduct). Docs are [available](https://link.photoprism.app/github-docs) under the [CC BY-NC-SA 4.0 License](https://creativecommons.org/licenses/by-nc-sa/4.0/); [additional terms](https://github.com/photoprism/photoprism/blob/develop/assets/README.md) may apply.*
|
119
docker/examples/podman/docker-compose.yml
Normal file
119
docker/examples/podman/docker-compose.yml
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
version: '3.5'
|
||||||
|
|
||||||
|
# Example Podman Compose config file for PhotoPrism (Linux / AMD64)
|
||||||
|
#
|
||||||
|
# Note:
|
||||||
|
# - Hardware transcoding is only available for sponsors due to the high maintenance and support effort.
|
||||||
|
# - Running PhotoPrism on a server with less than 4 GB of swap space or setting a memory/swap limit can cause unexpected
|
||||||
|
# restarts ("crashes"), for example, when the indexer temporarily needs more memory to process large files.
|
||||||
|
# - If you install PhotoPrism on a public server outside your home network, please always run it behind a secure
|
||||||
|
# HTTPS reverse proxy such as Traefik or Caddy. Your files and passwords will otherwise be transmitted
|
||||||
|
# in clear text and can be intercepted by anyone, including your provider, hackers, and governments:
|
||||||
|
# https://docs.photoprism.app/getting-started/proxies/traefik/
|
||||||
|
#
|
||||||
|
# Quickstart Guide: https://docs.photoprism.app/getting-started/docker-compose/
|
||||||
|
# Knowledge Base: https://photoprism.app/kb
|
||||||
|
# Docker Image: https://hub.docker.com/r/photoprism/photoprism
|
||||||
|
#
|
||||||
|
# PODMAN COMPOSE COMMAND REFERENCE
|
||||||
|
# --------------------------------------------------------------------------
|
||||||
|
# Start | podman-compose up -d
|
||||||
|
# Stop | podman-compose stop
|
||||||
|
# Update | podman-compose pull
|
||||||
|
# Logs | podman-compose logs --tail=25 -f
|
||||||
|
# Terminal | podman-compose exec photoprism bash
|
||||||
|
# Help | podman-compose exec photoprism photoprism help
|
||||||
|
# Config | podman-compose exec photoprism photoprism config
|
||||||
|
# Reset | podman-compose exec photoprism photoprism reset
|
||||||
|
# Backup | podman-compose exec photoprism photoprism backup -a -i
|
||||||
|
# Restore | podman-compose exec photoprism photoprism restore -a -i
|
||||||
|
# Index | podman-compose exec photoprism photoprism index
|
||||||
|
# Reindex | podman-compose exec photoprism photoprism index -f
|
||||||
|
# Import | podman-compose exec photoprism photoprism import
|
||||||
|
|
||||||
|
services:
|
||||||
|
photoprism:
|
||||||
|
## Use photoprism/photoprism:preview for testing preview builds:
|
||||||
|
image: photoprism/photoprism:latest
|
||||||
|
container_name: photoprism
|
||||||
|
depends_on:
|
||||||
|
- mariadb
|
||||||
|
restart: unless-stopped
|
||||||
|
security_opt:
|
||||||
|
- seccomp:unconfined
|
||||||
|
- apparmor:unconfined
|
||||||
|
user: 1000:1000
|
||||||
|
privileged: true
|
||||||
|
ports:
|
||||||
|
- "2342:2342" # HTTP port (host:container)
|
||||||
|
environment:
|
||||||
|
PHOTOPRISM_ADMIN_USER: "admin" # superadmin username
|
||||||
|
PHOTOPRISM_ADMIN_PASSWORD: "insecure" # initial superadmin password (minimum 8 characters)
|
||||||
|
PHOTOPRISM_AUTH_MODE: "password" # authentication mode (public, password)
|
||||||
|
PHOTOPRISM_SITE_URL: "http://photoprism.me:2342/" # server URL in the format "http(s)://domain.name(:port)/(path)"
|
||||||
|
PHOTOPRISM_ORIGINALS_LIMIT: 5000 # file size limit for originals in MB (increase for high-res video)
|
||||||
|
PHOTOPRISM_HTTP_COMPRESSION: "gzip" # improves transfer speed and bandwidth utilization (none or gzip)
|
||||||
|
PHOTOPRISM_LOG_LEVEL: "info" # log level: trace, debug, info, warning, error, fatal, or panic
|
||||||
|
PHOTOPRISM_READONLY: "false" # do not modify originals directory (reduced functionality)
|
||||||
|
PHOTOPRISM_EXPERIMENTAL: "false" # enables experimental features
|
||||||
|
PHOTOPRISM_DISABLE_CHOWN: "false" # disables updating storage permissions via chmod and chown on startup
|
||||||
|
PHOTOPRISM_DISABLE_WEBDAV: "false" # disables built-in WebDAV server
|
||||||
|
PHOTOPRISM_DISABLE_SETTINGS: "false" # disables settings UI and API
|
||||||
|
PHOTOPRISM_DISABLE_TENSORFLOW: "false" # disables all features depending on TensorFlow
|
||||||
|
PHOTOPRISM_DISABLE_FACES: "false" # disables face detection and recognition (requires TensorFlow)
|
||||||
|
PHOTOPRISM_DISABLE_CLASSIFICATION: "false" # disables image classification (requires TensorFlow)
|
||||||
|
PHOTOPRISM_DISABLE_RAW: "false" # disables indexing and conversion of RAW files
|
||||||
|
PHOTOPRISM_RAW_PRESETS: "false" # enables applying user presets when converting RAW files (reduces performance)
|
||||||
|
PHOTOPRISM_JPEG_QUALITY: 85 # a higher value increases the quality and file size of JPEG images and thumbnails (25-100)
|
||||||
|
PHOTOPRISM_DETECT_NSFW: "false" # automatically flags photos as private that MAY be offensive (requires TensorFlow)
|
||||||
|
PHOTOPRISM_UPLOAD_NSFW: "true" # allows uploads that MAY be offensive (no effect without TensorFlow)
|
||||||
|
# PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that doesn't require a server
|
||||||
|
PHOTOPRISM_DATABASE_DRIVER: "mysql" # use MariaDB 10.5+ or MySQL 8+ instead of SQLite for improved performance
|
||||||
|
PHOTOPRISM_DATABASE_SERVER: "mariadb:3306" # MariaDB or MySQL database server (hostname:port)
|
||||||
|
PHOTOPRISM_DATABASE_NAME: "photoprism" # MariaDB or MySQL database schema name
|
||||||
|
PHOTOPRISM_DATABASE_USER: "photoprism" # MariaDB or MySQL database user name
|
||||||
|
PHOTOPRISM_DATABASE_PASSWORD: "insecure" # MariaDB or MySQL database user password
|
||||||
|
PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App"
|
||||||
|
PHOTOPRISM_SITE_DESCRIPTION: "" # meta site description
|
||||||
|
PHOTOPRISM_SITE_AUTHOR: "" # meta site author
|
||||||
|
## Run/install on first startup (options: update https gpu tensorflow davfs clitools clean):
|
||||||
|
# PHOTOPRISM_INIT: "https gpu tensorflow"
|
||||||
|
## Hardware Video Transcoding:
|
||||||
|
# PHOTOPRISM_FFMPEG_ENCODER: "software" # FFmpeg encoder ("software", "intel", "nvidia", "apple", "raspberry")
|
||||||
|
# PHOTOPRISM_FFMPEG_BITRATE: "32" # FFmpeg encoding bitrate limit in Mbit/s (default: 50)
|
||||||
|
## Run as a non-root user after initialization (supported: 0, 33, 50-99, 500-600, and 900-1200):
|
||||||
|
# PHOTOPRISM_UID: 1000
|
||||||
|
# PHOTOPRISM_GID: 1000
|
||||||
|
# PHOTOPRISM_UMASK: 0000
|
||||||
|
working_dir: "/photoprism" # do not change or remove
|
||||||
|
## Storage Folders: "~" is a shortcut for your home directory, "." for the current directory
|
||||||
|
volumes:
|
||||||
|
- "./originals:/photoprism/originals" # original media files (photos and videos)
|
||||||
|
- "./import:/photoprism/import" # *optional* folder from which files can be imported to originals
|
||||||
|
- "./storage:/photoprism/storage" # *writable* storage folder for cache, database, and sidecar files (never remove)
|
||||||
|
|
||||||
|
## Database Server (recommended)
|
||||||
|
## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
|
||||||
|
mariadb:
|
||||||
|
## If MariaDB gets stuck in a restart loop, this points to a memory or filesystem issue:
|
||||||
|
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
|
||||||
|
restart: unless-stopped
|
||||||
|
image: mariadb:10.10
|
||||||
|
container_name: mariadb
|
||||||
|
user: 1000:1000
|
||||||
|
privileged: true
|
||||||
|
security_opt:
|
||||||
|
- seccomp:unconfined
|
||||||
|
- apparmor:unconfined
|
||||||
|
## --lower-case-table-names=1 stores tables in lowercase and compares names in a case-insensitive manner
|
||||||
|
## see https://mariadb.com/kb/en/server-system-variables/#lower_case_table_names
|
||||||
|
command: mysqld --innodb-buffer-pool-size=2G --lower-case-table-names=1 --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=180
|
||||||
|
volumes:
|
||||||
|
- "./mariadb:/var/lib/mysql"
|
||||||
|
environment:
|
||||||
|
MARIADB_AUTO_UPGRADE: "1"
|
||||||
|
MARIADB_INITDB_SKIP_TZINFO: "1"
|
||||||
|
MARIADB_DATABASE: "photoprism"
|
||||||
|
MARIADB_USER: "photoprism"
|
||||||
|
MARIADB_PASSWORD: "insecure"
|
||||||
|
MARIADB_ROOT_PASSWORD: "insecure"
|
53
docker/examples/podman/install.sh
Executable file
53
docker/examples/podman/install.sh
Executable file
|
@ -0,0 +1,53 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Install dependencies.
|
||||||
|
echo "Installing dependencies..."
|
||||||
|
sudo dnf update -y
|
||||||
|
sudo dnf install nano make netavark aardvark-dns podman podman-docker -y
|
||||||
|
|
||||||
|
# Specify Podman network backend.
|
||||||
|
cat >/etc/containers/containers.conf <<EOL
|
||||||
|
[network]
|
||||||
|
network_backend = "netavark"
|
||||||
|
EOL
|
||||||
|
|
||||||
|
# Install Podman Compose if needed.
|
||||||
|
if ! command -v "podman-compose" &> /dev/null; then
|
||||||
|
sudo dnf install python3 python3-pip python3-devel -y
|
||||||
|
sudo -H pip3 install --upgrade pip
|
||||||
|
sudo pip3 install python-dotenv
|
||||||
|
sudo pip3 install pyyaml
|
||||||
|
sudo pip3 install podman-compose
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start Podman service.
|
||||||
|
sudo systemctl start podman
|
||||||
|
sudo systemctl enable podman
|
||||||
|
|
||||||
|
# Wait 2 seconds.
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
# Reset Podman and show version.
|
||||||
|
podman system reset --force
|
||||||
|
podman --version
|
||||||
|
|
||||||
|
# Download config files.
|
||||||
|
echo "Downloading Makefile and docker-compose.yml..."
|
||||||
|
curl -o Makefile https://dl.photoprism.app/podman/Makefile
|
||||||
|
curl -o docker-compose.yml https://dl.photoprism.app/podman/docker-compose.yml
|
||||||
|
|
||||||
|
# Create storage folders.
|
||||||
|
echo "Creating storage folders..."
|
||||||
|
mkdir -p import mariadb originals storage
|
||||||
|
sudo chown 1000:1000 import mariadb originals storage
|
||||||
|
sudo chmod u+rwx,g+rwx import mariadb originals storage
|
||||||
|
|
||||||
|
# Show further instructions.
|
||||||
|
echo ""
|
||||||
|
echo "Done! You can now customize your settings in the downloaded docker-compose.yml file:"
|
||||||
|
echo ">> nano docker-compose.yml"
|
||||||
|
echo "When you are done with the configuration, run 'make' to download and start PhotoPrism."
|
||||||
|
echo "After waiting a few moments, you should be able to open the UI in a web browser by navigating to:"
|
||||||
|
echo ">> http://localhost:2342/ (or the configured site URL if you have changed it)"
|
Loading…
Reference in a new issue