version: '3.5' ## FOR TEST AND DEVELOPMENT ONLY, DO NOT USE IN PRODUCTION ## ## Setup: https://docs.photoprism.app/developer-guide/setup/ ## services: ## Continuous Integration (CI) Environment photoprism: build: . image: photoprism/photoprism:develop security_opt: - seccomp:unconfined - apparmor:unconfined depends_on: - mariadb - dummy-webdav volumes: - "~/.cache/npm:/root/.cache/npm" - "~/.cache/go-mod:/go/pkg/mod" environment: PHOTOPRISM_INIT: "https" PHOTOPRISM_ADMIN_USER: "admin" # admin login username PHOTOPRISM_ADMIN_PASSWORD: "photoprism" # initial admin password (8-72 characters) PHOTOPRISM_AUTH_MODE: "public" # authentication mode (public, password) PHOTOPRISM_SITE_URL: "http://localhost:2342/" PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App" PHOTOPRISM_SITE_DESCRIPTION: "Open-Source Photo Management" PHOTOPRISM_SITE_AUTHOR: "@photoprism_app" PHOTOPRISM_DEBUG: "false" PHOTOPRISM_READONLY: "false" PHOTOPRISM_PID_FILENAME: "photoprism.pid" PHOTOPRISM_LOG_FILENAME: "photoprism.log" PHOTOPRISM_DETACH_SERVER: "true" PHOTOPRISM_HTTP_HOST: "0.0.0.0" PHOTOPRISM_HTTP_PORT: 2342 PHOTOPRISM_HTTP_COMPRESSION: "gzip" # improves transfer speed and bandwidth utilization (none or gzip) PHOTOPRISM_DATABASE_DRIVER: "mysql" PHOTOPRISM_DATABASE_SERVER: "mariadb:4001" PHOTOPRISM_DATABASE_NAME: "photoprism" PHOTOPRISM_DATABASE_USER: "root" PHOTOPRISM_DATABASE_PASSWORD: "photoprism" PHOTOPRISM_TEST_DRIVER: "sqlite" PHOTOPRISM_ASSETS_PATH: "/go/src/github.com/photoprism/photoprism/assets" PHOTOPRISM_STORAGE_PATH: "/go/src/github.com/photoprism/photoprism/storage" PHOTOPRISM_ORIGINALS_PATH: "/go/src/github.com/photoprism/photoprism/storage/originals" PHOTOPRISM_IMPORT_PATH: "/go/src/github.com/photoprism/photoprism/storage/import" PHOTOPRISM_DISABLE_CHOWN: "true" # disables updating storage permissions via chmod and chown on startup PHOTOPRISM_DISABLE_BACKUPS: "false" # disables backing up albums and photo metadata to YAML files PHOTOPRISM_DISABLE_WEBDAV: "false" # disables built-in WebDAV server PHOTOPRISM_DISABLE_SETTINGS: "false" # disables settings UI and API PHOTOPRISM_DISABLE_PLACES: "false" # disables reverse geocoding and maps PHOTOPRISM_DISABLE_EXIFTOOL: "false" # disables creating JSON metadata sidecar files with ExifTool PHOTOPRISM_DISABLE_TENSORFLOW: "false" # disables all features depending on TensorFlow PHOTOPRISM_DETECT_NSFW: "false" # automatically flags photos as private that MAY be offensive (requires TensorFlow) PHOTOPRISM_UPLOAD_NSFW: "false" # allow uploads that may be offensive PHOTOPRISM_RAW_PRESETS: "false" # enables applying user presets when converting RAW images (reduces performance) PHOTOPRISM_THUMB_FILTER: "lanczos" # resample filter, best to worst: blackman, lanczos, cubic, linear PHOTOPRISM_THUMB_UNCACHED: "true" # enables on-demand thumbnail rendering (high memory and cpu usage) PHOTOPRISM_THUMB_SIZE: 2048 # pre-rendered thumbnail size limit (default 2048, min 720, max 7680) # PHOTOPRISM_THUMB_SIZE: 4096 # retina 4K, DCI 4K (requires more storage); 7680 for 8K Ultra HD 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_QUALITY: 85 # a higher value increases the quality and file size of JPEG images and thumbnails (25-100) CODECOV_TOKEN: CODECOV_ENV: CODECOV_URL: CODECOV_SLUG: VCS_COMMIT_ID: VCS_BRANCH_NAME: VCS_PULL_REQUEST: VCS_SLUG: VCS_TAG: CI_BUILD_URL: CI_BUILD_ID: CI_JOB_ID: CI: DRONE: DRONE_BRANCH: DRONE_BUILD_ACTION: DRONE_BUILD_CREATED: DRONE_BUILD_EVENT: DRONE_BUILD_FINISHED: DRONE_BUILD_NUMBER: DRONE_BUILD_PARENT: DRONE_BUILD_STARTED: DRONE_BUILD_STATUS: DRONE_CALVER: DRONE_COMMIT: DRONE_COMMIT_AFTER: DRONE_COMMIT_AUTHOR: DRONE_COMMIT_AUTHOR_AVATAR: DRONE_COMMIT_AUTHOR_EMAIL: DRONE_COMMIT_AUTHOR_NAME: DRONE_COMMIT_BEFORE: DRONE_COMMIT_BRANCH: DRONE_COMMIT_LINK: DRONE_COMMIT_MESSAGE: DRONE_COMMIT_REF: DRONE_COMMIT_SHA: DRONE_DEPLOY_TO: DRONE_FAILED_STAGES: DRONE_FAILED_STEPS: DRONE_GIT_HTTP_URL: DRONE_GIT_SSH_URL: DRONE_PULL_REQUEST: DRONE_REMOTE_URL: DRONE_REPO: DRONE_REPO_BRANCH: DRONE_REPO_LINK: DRONE_REPO_NAME: DRONE_REPO_NAMESPACE: DRONE_REPO_OWNER: DRONE_REPO_PRIVATE: DRONE_REPO_SCM: DRONE_REPO_VISIBILITY: DRONE_SEMVER: DRONE_SEMVER_BUILD: DRONE_SEMVER_ERROR: DRONE_SEMVER_MAJOR: DRONE_SEMVER_MINOR: DRONE_SEMVER_PATCH: DRONE_SEMVER_PRERELEASE: DRONE_SEMVER_SHORT: DRONE_SOURCE_BRANCH: DRONE_STAGE_ARCH: DRONE_STAGE_DEPENDS_ON: DRONE_STAGE_FINISHED: DRONE_STAGE_KIND: DRONE_STAGE_MACHINE: DRONE_STAGE_NAME: DRONE_STAGE_NUMBER: DRONE_STAGE_OS: DRONE_STAGE_STARTED: DRONE_STAGE_STATUS: DRONE_STAGE_TYPE: DRONE_STAGE_VARIANT: DRONE_STEP_NAME: DRONE_STEP_NUMBER: DRONE_SYSTEM_HOST: DRONE_SYSTEM_HOSTNAME: DRONE_SYSTEM_PROTO: DRONE_SYSTEM_VERSION: DRONE_TAG: DRONE_TARGET_BRANCH: ## MariaDB Database Server ## Docs: https://mariadb.com/docs/reference/ mariadb: image: mariadb:11 security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239 - seccomp:unconfined - apparmor:unconfined command: --port=4001 --innodb-buffer-pool-size=256M --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=120 expose: - "4001" # database port (internal) volumes: - "./scripts/sql/mariadb-init.sql:/docker-entrypoint-initdb.d/init.sql" environment: MARIADB_AUTO_UPGRADE: "1" MARIADB_INITDB_SKIP_TZINFO: "1" MARIADB_DATABASE: "photoprism" MARIADB_USER: "photoprism" MARIADB_PASSWORD: "photoprism" MARIADB_ROOT_PASSWORD: "photoprism" ## Dummy OpenID Connect Provider dummy-oidc: image: photoprism/dummy-oidc:231015 ## Dummy WebDAV Server dummy-webdav: image: photoprism/dummy-webdav:231015 environment: WEBDAV_USERNAME: admin WEBDAV_PASSWORD: photoprism