- Playbooks Ansible avec rôles (common, cockpit, docker, services) - 30+ stacks Docker Compose avec reverse proxy Traefik - Ansible Vault pour gestion secrets - Intégration CrowdSec pour détection intrusions - Versions images Docker fixées pour reproductibilité
91 lines
3.4 KiB
YAML
91 lines
3.4 KiB
YAML
services:
|
|
photoprism:
|
|
image: photoprism/photoprism:241021
|
|
stop_grace_period: 10s
|
|
depends_on:
|
|
- mariadb
|
|
restart: unless-stopped
|
|
security_opt:
|
|
- seccomp:unconfined
|
|
- apparmor:unconfined
|
|
working_dir: "/photoprism"
|
|
volumes:
|
|
- "/mnt/storage/photos:/photoprism/import"
|
|
- "/mnt/storage/photoprism/originals:/photoprism/originals"
|
|
- "/mnt/storage/photoprism/storage:/photoprism/storage"
|
|
environment:
|
|
- PHOTOPRISM_DATABASE_DRIVER=mysql
|
|
- PHOTOPRISM_DATABASE_SERVER=mariadb:3306
|
|
- PHOTOPRISM_DATABASE_NAME=photoprism
|
|
- PHOTOPRISM_DATABASE_USER=${MARIADB_USER}
|
|
- PHOTOPRISM_DATABASE_PASSWORD=${PHOTOPRISM_DATABASE_PASSWORD}
|
|
- PHOTOPRISM_ADMIN_USER=${PHOTOPRISM_ADMIN_USER}
|
|
- PHOTOPRISM_ADMIN_PASSWORD=${PHOTOPRISM_ADMIN_PASSWORD}
|
|
- PHOTOPRISM_AUTH_MODE=password
|
|
- PHOTOPRISM_SITE_URL=https://photoprism.tellserv.fr/
|
|
- PHOTOPRISM_DISABLE_TLS=true
|
|
- PHOTOPRISM_ORIGINALS_LIMIT=5000
|
|
- PHOTOPRISM_HTTP_COMPRESSION=gzip
|
|
- PHOTOPRISM_LOG_LEVEL=info
|
|
- PHOTOPRISM_READONLY=false
|
|
- PHOTOPRISM_EXPERIMENTAL=false
|
|
- PHOTOPRISM_DISABLE_CHOWN=false
|
|
- PHOTOPRISM_DISABLE_WEBDAV=false
|
|
- PHOTOPRISM_DISABLE_SETTINGS=false
|
|
- PHOTOPRISM_DISABLE_TENSORFLOW=false
|
|
- PHOTOPRISM_DISABLE_FACES=false
|
|
- PHOTOPRISM_DISABLE_CLASSIFICATION=false
|
|
- PHOTOPRISM_DISABLE_VECTORS=false
|
|
- PHOTOPRISM_DISABLE_RAW=false
|
|
- PHOTOPRISM_RAW_PRESETS=false
|
|
- PHOTOPRISM_JPEG_QUALITY=85
|
|
- PHOTOPRISM_DETECT_NSFW=false
|
|
- PHOTOPRISM_UPLOAD_NSFW=true
|
|
- PHOTOPRISM_SITE_CAPTION=AI-Powered Photos App
|
|
- PHOTOPRISM_SITE_DESCRIPTION=
|
|
- PHOTOPRISM_SITE_AUTHOR=
|
|
networks:
|
|
- traefik_network
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}-local.rule=Host(`${COMPOSE_PROJECT_NAME}.local.tellserv.fr`)"
|
|
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}-local.entryPoints=local"
|
|
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}-local.tls.certresolver=cloudflare-local"
|
|
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}-local.tls=true"
|
|
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}-prod.rule=Host(`${COMPOSE_PROJECT_NAME}.tellserv.fr`)"
|
|
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}-prod.entryPoints=websecure"
|
|
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}-prod.tls=true"
|
|
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}-prod.tls.certResolver=cloudflare"
|
|
- "traefik.http.services.${COMPOSE_PROJECT_NAME}.loadbalancer.server.port=2342"
|
|
- "com.centurylinklabs.watchtower.enable=true"
|
|
|
|
mariadb:
|
|
image: mariadb:11
|
|
restart: unless-stopped
|
|
stop_grace_period: 5s
|
|
security_opt:
|
|
- seccomp:unconfined
|
|
- apparmor:unconfined
|
|
command: >
|
|
--innodb-buffer-pool-size=512M
|
|
--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
|
|
volumes:
|
|
- ./database:/var/lib/mysql
|
|
environment:
|
|
- MARIADB_AUTO_UPGRADE=1
|
|
- MARIADB_INITDB_SKIP_TZINFO=1
|
|
- MARIADB_DATABASE=photoprism
|
|
- MARIADB_USER=${MARIADB_USER}
|
|
- MARIADB_PASSWORD=${MARIADB_PASSWORD}
|
|
- MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
|
|
networks:
|
|
- traefik_network
|
|
|
|
networks:
|
|
traefik_network:
|
|
external: true
|