115 lines
3.9 KiB
YAML
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
|