nextcloud-install/docker/docker-compose.yml
2026-06-24 09:23:58 +03:00

115 lines
3.9 KiB
YAML

# 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