version: "3.8" services: minio: image: quay.io/minio/minio:latest command: server /data1 /data2 --console-address ":9001" environment: MINIO_ROOT_USER: * MINIO_ROOT_PASSWORD: * MINIO_PROMETHEUS_AUTH_TYPE: public MINIO_REGION: ru-1 ports: - "9000:9000" - "9110:9001" volumes: - /mnt/disk2/minio1:/data1 - /mnt/disk1/minio2:/data2 restart: unless-stopped minio-init: image: quay.io/minio/mc:latest depends_on: [minio] environment: MC_HOST_minio: "http://minio-root:minio-root-pass@minio:9000" entrypoint: > /bin/sh -c " mc alias set minio http://minio:9000 minio-root minio-root-pass && mc mb -p minio/nextcloud || true && mc admin user add minio nextcloud nextcloud-secret && mc admin policy attach minio readwrite --user nextcloud || true && exit 0 " restart: "no" postgres: image: postgres:16 environment: POSTGRES_DB: nextcloud POSTGRES_USER: * POSTGRES_PASSWORD: * volumes: - /data/postgres:/var/lib/postgresql/data restart: unless-stopped redis: image: redis:7 command: ["redis-server", "--save", "", "--appendonly", "no"] restart: unless-stopped nextcloud: build: ./nextcloud image: nextcloud:30-apache-ffmpeg depends_on: [postgres, redis, minio, minio-init] ports: - "80:80" dns: - 1.1.1.1 - 8.8.8.8 dns_opt: - use-vc environment: POSTGRES_HOST: postgres POSTGRES_DB: nextcloud POSTGRES_USER: * POSTGRES_PASSWORD: * NEXTCLOUD_TRUSTED_DOMAINS: * NEXTCLOUD_ADMIN_USER: * NEXTCLOUD_ADMIN_PASSWORD: * OVERWRITEHOST: * OVERWRITEPROTOCOL: * TRUSTED_PROXIES: * MAGICK_THREAD_LIMIT: * OMP_NUM_THREADS: * volumes: - /data/nextcloud/html:/var/www/html nextcloud-cron: image: nextcloud:30-apache restart: unless-stopped volumes: - /data/nextcloud/html:/var/www/html entrypoint: /cron.sh depends_on: - nextcloud # --- IMMICH AND REQ-S --- immich-server: image: ghcr.io/immich-app/immich-server:release container_name: immich-server environment: # URL, по которому клиенты будут подключаться PUBLIC_URL: https://photos.g4st3r.ru UPLOAD_LOCATION: /usr/src/app/upload # база данных DB_HOSTNAME: immich-db DB_PORT: 5432 DB_USERNAME: * DB_PASSWORD: * DB_DATABASE_NAME: * # Redis REDIS_HOSTNAME: immich-redis REDIS_PORT: 6379 # ML сервис MACHINE_LEARNING_URL: http://immich-ml:3003 volumes: - /mnt/disk3/immich/uploads:/usr/src/app/upload depends_on: - immich-db - immich-redis - immich-ml ports: - 2283:2283 restart: unless-stopped immich-ml: image: ghcr.io/immich-app/immich-machine-learning:release container_name: immich-ml ports: - "3003:3003" environment: - TRANSFORMERS_CACHE=/cache volumes: - /mnt/disk2/immich/ml-cache:/cache restart: unless-stopped immich-db: image: pgvector/pgvector:pg16 container_name: immich-db environment: - POSTGRES_USER=${DB_USERNAME:-immich} - POSTGRES_PASSWORD=${DB_PASSWORD:-immich_strong_pass} - POSTGRES_DB=${DB_DATABASE_NAME:-immich} volumes: - /mnt/disk2/immich/db:/var/lib/postgresql/data restart: unless-stopped immich-redis: image: redis:7-alpine container_name: immich-redis command: ["redis-server", "--save", "60", "1"] volumes: - /mnt/disk2/immich/redis:/data restart: unless-stopped # --- EXPORTERS & MONITORING --- node-exporter: image: prom/node-exporter:latest container_name: node-exporter restart: unless-stopped ports: - "9100:9100" command: - '--path.rootfs=/host' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($|/)' volumes: - '/:/host:ro,rslave' postgres-exporter: image: quay.io/prometheuscommunity/postgres-exporter:latest container_name: postgres-exporter restart: unless-stopped environment: # у тебя Postgres с юзером nc и БД nextcloud DATA_SOURCE_NAME: "postgresql://nc:*@postgres:5432/nextcloud?sslmode=disable" ports: - "9187:9187" depends_on: - postgres prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped command: - '--config.file=/etc/prometheus/prometheus.yml' volumes: - /srv/monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - prometheus-data:/prometheus ports: - "9090:9090" depends_on: - node-exporter - cadvisor - postgres-exporter - minio smartctl-exporter: image: prometheuscommunity/smartctl-exporter:v0.9.1 container_name: smartctl-exporter privileged: true # нужно, чтобы читать SMART с устройств volumes: - /dev:/dev:ro - /run/udev:/run/udev:ro environment: - SMARTCTL_INTERVAL=300 # каждые 5 минут ports: - "9633:9633" restart: unless-stopped grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=* - GF_SERVER_DOMAIN=* - GF_SERVER_ROOT_URL=* volumes: - /srv/monitoring/grafana:/var/lib/grafana - /srv/monitoring/grafana/provisioning:/etc/grafana/provisioning:ro ports: - "3000:3000" depends_on: - prometheus alertmanager: image: prom/alertmanager:latest container_name: alertmanager command: - --config.file=/etc/alertmanager/alertmanager.yml - --web.external-url=https://alert.g4st3r.ru volumes: - ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro - ./alertmanager/templates:/etc/alertmanager/templates:ro ports: - "9093:9093" restart: unless-stopped environment: - TELEGRAM_BOT_TOKEN=* - TELEGRAM_CHAT_ID=* volumes: prometheus-data: