version: "3.9" services: nextcloud: image: nextcloud:${NEXTCLOUD_VERSION:-32-apache} restart: unless-stopped depends_on: - db - redis - onlyoffice environment: MYSQL_HOST: db MYSQL_DATABASE: ${MARIADB_DATABASE:-nextcloud} MYSQL_USER: ${MARIADB_USER:-nextcloud} MYSQL_PASSWORD: ${MARIADB_PASSWORD?set_mariadb_password} NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER:-ncadmin} NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD?set_nextcloud_admin_password} NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_DOMAIN:-cloud.example.com} OVERWRITEHOST: ${NEXTCLOUD_DOMAIN:-cloud.example.com} OVERWRITEPROTOCOL: https REDIS_HOST: redis REDIS_HOST_PASSWORD: ${REDIS_PASSWORD?generate_redis_password} PHP_MEMORY_LIMIT: 1G PHP_UPLOAD_LIMIT: 2G volumes: - nextcloud_data:/var/www/html - nextcloud_apps:/var/www/html/custom_apps - nextcloud_config:/var/www/html/config nextcloud-cron: image: nextcloud:${NEXTCLOUD_VERSION:-32-apache} restart: unless-stopped entrypoint: /cron.sh depends_on: - db - redis environment: MYSQL_HOST: db MYSQL_DATABASE: ${MARIADB_DATABASE:-nextcloud} MYSQL_USER: ${MARIADB_USER:-nextcloud} MYSQL_PASSWORD: ${MARIADB_PASSWORD?set_mariadb_password} NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER:-ncadmin} NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD?set_nextcloud_admin_password} NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_DOMAIN:-cloud.example.com} OVERWRITEHOST: ${NEXTCLOUD_DOMAIN:-cloud.example.com} OVERWRITEPROTOCOL: https REDIS_HOST: redis REDIS_HOST_PASSWORD: ${REDIS_PASSWORD?generate_redis_password} PHP_MEMORY_LIMIT: 1G PHP_UPLOAD_LIMIT: 2G volumes: - nextcloud_data:/var/www/html - nextcloud_apps:/var/www/html/custom_apps - nextcloud_config:/var/www/html/config db: image: mariadb:${MARIADB_VERSION:-11.4} restart: unless-stopped command: - --transaction-isolation=READ-COMMITTED - --binlog-format=ROW - --innodb_read_only_compressed=OFF environment: MYSQL_DATABASE: ${MARIADB_DATABASE:-nextcloud} MYSQL_USER: ${MARIADB_USER:-nextcloud} MYSQL_PASSWORD: ${MARIADB_PASSWORD?set_mariadb_password} MYSQL_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD?set_mariadb_root_password} volumes: - db_data:/var/lib/mysql healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 30s timeout: 5s retries: 5 redis: image: redis:${REDIS_VERSION:-7-alpine} restart: unless-stopped command: ["redis-server", "--requirepass", "${REDIS_PASSWORD?generate_redis_password}"] volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD?generate_redis_password}", "ping"] interval: 30s timeout: 5s retries: 5 onlyoffice: image: onlyoffice/documentserver:${ONLYOFFICE_VERSION:-8.0} restart: unless-stopped environment: JWT_ENABLED: "true" JWT_SECRET: ${ONLYOFFICE_JWT_SECRET?generate_onlyoffice_jwt_secret} JWT_HEADER: Authorization depends_on: - redis volumes: - onlyoffice_data:/var/www/onlyoffice/Data - onlyoffice_logs:/var/log/onlyoffice healthcheck: test: ["CMD-SHELL", "curl -f http://localhost/healthcheck || exit 1"] interval: 30s timeout: 10s retries: 5 volumes: nextcloud_data: nextcloud_apps: nextcloud_config: db_data: redis_data: onlyoffice_data: onlyoffice_logs: