# Docker Compose стек Nextcloud (серверная часть) # Состав: MariaDB + Redis + Nextcloud (Apache) + cron-задачи # # Запуск: ./install.sh или docker compose up -d # Остановка: ./stop.sh или docker compose down services: # База данных MariaDB — хранит метаданные файлов, пользователей, настроек db: image: mariadb:11.4 container_name: nextcloud-db restart: unless-stopped command: > --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW --innodb-read-only-compressed=OFF volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_PASSWORD: ${MYSQL_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} networks: - nextcloud_internal healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s timeout: 5s retries: 5 start_period: 30s # Redis — кэширование и блокировки (существенно ускоряет Nextcloud) redis: image: redis:7-alpine container_name: nextcloud-redis restart: unless-stopped command: redis-server --requirepass ${REDIS_PASSWORD} volumes: - redis_data:/data networks: - nextcloud_internal healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] interval: 10s timeout: 3s retries: 5 # Основной контейнер Nextcloud (веб-сервер Apache + PHP) app: image: nextcloud:${NEXTCLOUD_VERSION:-apache} container_name: nextcloud-app restart: unless-stopped depends_on: db: condition: service_healthy redis: condition: service_healthy ports: - "${NEXTCLOUD_PORT:-8080}:80" volumes: - nextcloud_data:/var/www/html - ${NEXTCLOUD_CONFIG_DIR}:/var/www/html/config # Файлы пользователей (hgfs / большой диск) - ${NEXTCLOUD_DATADIR:-/mnt/hgfs/nextcloud_data}:/var/www/html/data # appdata (кэш App Store, превью) — локальный диск, не hgfs - ${NEXTCLOUD_APPDATA:-/var/nextcloud/appdata}:/var/www/html/data/appdata_${NEXTCLOUD_INSTANCEID} # приложения из магазина — локальный диск - ${NEXTCLOUD_CUSTOM_APPS:-/var/nextcloud/custom_apps}:/var/www/html/custom_apps environment: MYSQL_HOST: db MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} REDIS_HOST: redis REDIS_HOST_PASSWORD: ${REDIS_PASSWORD} NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER} NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD} NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_TRUSTED_DOMAINS} PHP_MEMORY_LIMIT: ${PHP_MEMORY_LIMIT:-512M} PHP_UPLOAD_LIMIT: ${PHP_UPLOAD_LIMIT:-10G} networks: - nextcloud_internal # Фоновые задачи Nextcloud (cron) cron: image: nextcloud:${NEXTCLOUD_VERSION:-apache} container_name: nextcloud-cron restart: unless-stopped depends_on: - app volumes: - nextcloud_data:/var/www/html - ${NEXTCLOUD_CONFIG_DIR}:/var/www/html/config - ${NEXTCLOUD_DATADIR:-/mnt/hgfs/nextcloud_data}:/var/www/html/data - ${NEXTCLOUD_APPDATA:-/var/nextcloud/appdata}:/var/www/html/data/appdata_${NEXTCLOUD_INSTANCEID} - ${NEXTCLOUD_CUSTOM_APPS:-/var/nextcloud/custom_apps}:/var/www/html/custom_apps entrypoint: /cron.sh networks: - nextcloud_internal volumes: db_data: name: nextcloud_db_data redis_data: name: nextcloud_redis_data nextcloud_data: name: nextcloud_app_data networks: nextcloud_internal: name: nextcloud_internal driver: bridge