version: '3.5'

## Continuous Integration (CI) Test Environment
services:
  ## App Dev Container
  ## Docs: https://docs.photoprism.app/developer-guide/
  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_SITE_URL: "http://localhost:2342/"
      PHOTOPRISM_SITE_TITLE: "PhotoPrism"
      PHOTOPRISM_SITE_CAPTION: "Browse Your Life"
      PHOTOPRISM_SITE_DESCRIPTION: "Open-Source Photo Management"
      PHOTOPRISM_SITE_AUTHOR: "@photoprism_app"
      PHOTOPRISM_DEBUG: "false"
      PHOTOPRISM_READONLY: "false"
      PHOTOPRISM_PUBLIC: "true"
      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_TEST_DSN: ".test.db"
      PHOTOPRISM_ADMIN_PASSWORD: "photoprism" # the initial admin password (min 4 characters)
      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 storage permission updates on startup
      PHOTOPRISM_DISABLE_BACKUPS: "false"     # don't backup photo and album metadata to YAML files
      PHOTOPRISM_DISABLE_WEBDAV: "false"      # disables built-in WebDAV server
      PHOTOPRISM_DISABLE_SETTINGS: "false"    # disables Settings in Web UI
      PHOTOPRISM_DISABLE_PLACES: "false"      # disables reverse geocoding and maps
      PHOTOPRISM_DISABLE_EXIFTOOL: "false"    # don't create ExifTool JSON files for improved metadata extraction
      PHOTOPRISM_DISABLE_TENSORFLOW: "false"  # don't use TensorFlow for image classification
      PHOTOPRISM_DETECT_NSFW: "false"         # flag photos as private that MAY be offensive (requires TensorFlow)
      PHOTOPRISM_UPLOAD_NSFW: "false"         # allow uploads that may be offensive
      PHOTOPRISM_DARKTABLE_PRESETS: "false"   # enables Darktable presets and disables concurrent RAW conversion
      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: 92             # set to 95 for high-quality 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/cs10.6/
  mariadb:
    image: mariadb:10.6
    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=120
    expose:
      - "4001" # database port (internal)
    volumes:
      - "./scripts/sql/mariadb-init.sql:/docker-entrypoint-initdb.d/init.sql"
    environment:
      MYSQL_ROOT_PASSWORD: photoprism
      MYSQL_USER: photoprism
      MYSQL_PASSWORD: photoprism
      MYSQL_DATABASE: photoprism

  ## Dummy WebDAV Server
  dummy-webdav:
    image: photoprism/dummy-webdav:20211109
    environment:
      WEBDAV_USERNAME: admin
      WEBDAV_PASSWORD: photoprism
