Files
Containr/templates/nextcloud.md
T
2026-04-10 12:02:36 +02:00

12 KiB

Nextcloud Cloud Storage Template

Overview

Nextcloud is a suite of client-server software for creating and using file hosting services.

Quick Start

# Create docker-compose.yml with the content below
docker-compose up -d

Docker Compose

version: '3.8'

services:
  nextcloud-db:
    image: postgres:15-alpine
    container_name: nextcloud-db
    restart: unless-stopped
    environment:
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=nextcloud
    volumes:
      - nextcloud-db:/var/lib/postgresql/data
    networks:
      - nextcloud-network

  nextcloud-redis:
    image: redis:7-alpine
    container_name: nextcloud-redis
    restart: unless-stopped
    volumes:
      - nextcloud-redis:/data
    networks:
      - nextcloud-network

  nextcloud-app:
    image: nextcloud:latest
    container_name: nextcloud
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      - POSTGRES_HOST=nextcloud-db
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=nextcloud
      - REDIS_HOST=nextcloud-redis
      - NEXTCLOUD_ADMIN_USER=admin
      - NEXTCLOUD_ADMIN_PASSWORD=your-secure-password
      - NEXTCLOUD_TRUSTED_DOMAINS=localhost
      - OVERWRITEPROTOCOL=http
      - OVERWRITEHOST=localhost:8080
    volumes:
      - nextcloud-data:/var/www/html
      - nextcloud-config:/var/www/html/config
      - nextcloud-apps:/var/www/html/apps
      - /path/to/nextcloud-data:/var/www/html/data
    depends_on:
      - nextcloud-db
      - nextcloud-redis
    networks:
      - nextcloud-network

  nextcloud-cron:
    image: nextcloud:latest
    container_name: nextcloud-cron
    restart: unless-stopped
    environment:
      - POSTGRES_HOST=nextcloud-db
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=nextcloud
      - REDIS_HOST=nextcloud-redis
    volumes:
      - nextcloud-data:/var/www/html
      - nextcloud-config:/var/www/html/config
      - nextcloud-apps:/var/www/html/apps
    depends_on:
      - nextcloud-db
      - nextcloud-redis
    entrypoint: /cron.sh
    networks:
      - nextcloud-network

volumes:
  nextcloud-data:
  nextcloud-config:
  nextcloud-apps:
  nextcloud-db:
  nextcloud-redis:

networks:
  nextcloud-network:
    driver: bridge

Environment Variables

  • POSTGRES_*: Database configuration
  • REDIS_HOST: Redis server host
  • NEXTCLOUD_ADMIN_*: Admin user credentials
  • NEXTCLOUD_TRUSTED_DOMAINS: Trusted domains
  • OVERWRITEPROTOCOL: Protocol override
  • OVERWRITEHOST: Host override

Setup Guide

  1. Generate Secure Password:

    openssl rand -base64 16
    
  2. Create Directories:

    mkdir -p nextcloud-data
    
  3. Deploy:

    docker-compose up -d
    
  4. Access: Open http://localhost:8080

  5. Initial Setup:

    • Admin account should be auto-created
    • Configure apps and settings
    • Set up user accounts

Configuration Files

config.php (nextcloud-config/config.php)

<?php
$CONFIG = array (
  'instanceid' => 'your-instance-id',
  'passwordsalt' => 'your-password-salt',
  'secret' => 'your-secret',
  'trusted_domains' => 
  array (
    0 => 'localhost',
    1 => 'nextcloud.yourdomain.com',
  ),
  'datadirectory' => '/var/www/html/data',
  'dbtype' => 'pgsql',
  'version' => '27.0.0',
  'dbname' => 'nextcloud',
  'dbhost' => 'nextcloud-db',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'nextcloud',
  'dbpassword' => 'nextcloud',
  'installed' => true,
  'filelocking.enabled' => true,
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'memcache.local' => '\\OC\\Memcache\\Redis',
  'redis' => 
  array (
    'host' => 'nextcloud-redis',
    'port' => 6379,
  ),
  'mail_smtpmode' => 'smtp',
  'mail_sendmailmode' => 'smtp',
  'mail_from_address' => 'nextcloud',
  'mail_domain' => 'yourdomain.com',
  'mail_smtpserver' => 'smtp.gmail.com',
  'mail_smtpport' => '587',
  'mail_smtpsecure' => 'tls',
  'mail_smtpauth' => 1,
  'mail_smtpauthtype' => 'LOGIN',
  'mail_smtpname' => 'your-email@gmail.com',
  'mail_smtppassword' => 'your-app-password',
  'overwrite.cli.url' => 'http://localhost:8080',
  'default_phone_region' => 'US',
  'enabledPreviewProviders' => 
  array (
    0 => 'OC\\Preview\\Image',
    1 => 'OC\\Preview\\Movie',
    2 => 'OC\\Preview\\TXT',
    3 => 'OC\\Preview\\MarkDown',
    4 => 'OC\\Preview\\PDF',
    5 => 'OC\\Preview\\Office',
    6 => 'OC\\Preview\\SVG',
    7 => 'OC\\Preview\\EPUB',
    8 => 'OC\\Preview\\Font',
    9 => 'OC\\Preview\\MP3',
    10 => 'OC\\Preview\\HEIC',
  ),
  'enable_previews' => true,
  'preview_max_x' => 2048,
  'preview_max_y' => 2048,
  'preview_max_scale_factor' => 1,
  'enabledPreviewProviders' => 
  array (
    0 => 'OC\\Preview\\Image',
    1 => 'OC\\Preview\\Movie',
    2 => 'OC\\Preview\\TXT',
    3 => 'OC\\Preview\\MarkDown',
    4 => 'OC\\Preview\\PDF',
    5 => 'OC\\Preview\\Office',
    6 => 'OC\\Preview\\SVG',
    7 => 'OC\\Preview\\EPUB',
    8 => 'OC\\Preview\\Font',
    9 => 'OC\\Preview\\MP3',
    10 => 'OC\\Preview\\HEIC',
  ),
);

Apps Installation

# Install apps via web interface or CLI
docker exec nextcloud-app occ app:install files_external
docker exec nextcloud-app occ app:install calendar
docker exec nextcloud-app occ app:install contacts
docker exec nextcloud-app occ app:install mail
docker exec nextcloud-app occ app:install deck
docker exec nextcloud-app occ app:install notes
docker exec nextcloud-app occ app:install tasks
docker exec nextcloud-app occ app:install talk

External Storage

# Add external storage
docker exec nextcloud-app occ files_external:create admin local /path/to/external/storage

Reverse Proxy (Traefik)

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.yourdomain.com`)"
  - "traefik.http.routers.nextcloud.tls=true"
  - "traefik.http.routers.nextcloud.tls.certresolver=letsencrypt"
  - "traefik.http.services.nextcloud.loadbalancer.server.port=80"

Backup Strategy

# Backup Nextcloud data
docker run --rm -v nextcloud-data:/var/www/html -v $(pwd):/backup alpine tar czf /backup/nextcloud-data-backup.tar.gz -C /var/www/html .

# Backup database
docker exec nextcloud-db pg_dump -U nextcloud nextcloud > nextcloud-db-backup.sql

# Backup Redis
docker exec nextcloud-redis redis-cli BGSAVE
docker cp nextcloud-redis:/data/dump.rdb ./redis-backup.rdb

# Restore database
docker exec -i nextcloud-db psql -U nextcloud nextcloud < nextcloud-db-backup.sql

# Restore Nextcloud data
docker run --rm -v nextcloud-data:/var/www/html -v $(pwd):/backup alpine tar xzf /backup/nextcloud-data-backup.tar.gz -C /var/www/html

# Restart after restore
docker-compose restart nextcloud-app

Performance Optimization

# For better performance
environment:
  - PHP_MEMORY_LIMIT=512M
  - PHP_UPLOAD_LIMIT=512M
  - PHP_MAX_EXECUTION_TIME=300

# Resource limits
deploy:
  resources:
    limits:
      memory: 2G
      cpus: '2.0'
    reservations:
      memory: 1G
      cpus: '1.0'

Security

  • Change default admin password
  • Use HTTPS in production
  • Network access control
  • Regular backups
  • Monitor access logs

User Management

Create User

# Create user via CLI
docker exec nextcloud-app occ user:add --display-name="John Doe" --group="users" john

Groups

# Create group
docker exec nextcloud-app occ group:add team

# Add user to group
docker exec nextcloud-app occ group:adduser john team

Quotas

# Set user quota
docker exec nextcloud-app occ user:setting john quota 5GB

File Sharing

Share Files

# Create share link
docker exec nextcloud-app occ share:create /path/to/file --type=link --permissions=1

External Storage

# Add SMB share
docker exec nextcloud-app occ files_external:create admin smb://server/share --mount=external

Calendar & Contacts

Calendar Setup

# Install calendar app
docker exec nextcloud-app occ app:install calendar

# Create calendar
docker exec nextcloud-app occ calendar:create --name="Work" --color="#ff0000"

Contacts Setup

# Install contacts app
docker exec nextcloud-app occ app:install contacts

# Import contacts
docker exec nextcloud-app occ contacts:import /path/to/contacts.vcf

Talk (Chat & Video)

Enable Talk

# Install talk app
docker exec nextcloud-app occ app:install talk

# Enable signaling server
docker exec nextcloud-app occ talk:signaling:install

Talk Configuration

// In config.php
'allow_local_remote_servers' => true,
'signaling' => [
  'servers' => [
    [
      'server' => 'https://nextcloud.yourdomain.com',
      'verify' => true
    ]
  ]
],

Monitoring

Health Checks

# Check if Nextcloud is running
curl http://localhost:8080/status.php

# Get system info
docker exec nextcloud-app occ status

Logs

# View logs
docker-compose logs -f nextcloud-app

# Check Nextcloud logs
docker exec nextcloud-app occ log:tail

Troubleshooting

  • Database connection: Check PostgreSQL configuration
  • File permissions: Verify volume permissions
  • Performance issues: Monitor resource usage
  • App installation: Check app compatibility
  • Sharing problems: Verify external storage configuration

Maintenance

# Update Nextcloud
docker-compose pull && docker-compose up -d
docker exec nextcloud-app occ upgrade

# Run maintenance tasks
docker exec nextcloud-app occ maintenance:repair
docker exec nextcloud-app occ files:scan --all

# Clean up old files
docker exec nextcloud-app occ trashbin:cleanup
docker exec nextcloud-app occ versions:cleanup

Advanced Features

Collabora Online

collabora:
  image: collabora/code:latest
  container_name: collabora
  restart: unless-stopped
  environment:
    - aliasgroup1=https://nextcloud.yourdomain.com
    - dictionaries=en_US
    - extra_params=--o:ssl.enable=false --o:ssl.termination=true
  ports:
    - "9980:9980"
  networks:
    - nextcloud-network

OnlyOffice

onlyoffice:
  image: onlyoffice/documentserver:latest
  container_name: onlyoffice
  restart: unless-stopped
  environment:
    - JWT_ENABLED=true
    - JWT_SECRET=your-jwt-secret
  ports:
    - "8081:80"
  networks:
    - nextcloud-network
elasticsearch:
  image: elasticsearch:8.11.1
  container_name: nextcloud-elasticsearch
  restart: unless-stopped
  environment:
    - discovery.type=single-node
    - xpack.security.enabled=false
    - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  volumes:
    - elasticsearch-data:/usr/share/elasticsearch/data
  networks:
    - nextcloud-network

Client Apps

Desktop Apps

  • Windows: Nextcloud Desktop Client
  • macOS: Nextcloud Desktop Client
  • Linux: Nextcloud Desktop Client

Mobile Apps

  • iOS: Nextcloud iOS App
  • Android: Nextcloud Android App

WebDAV

# Mount via WebDAV
davfs2 https://nextcloud.yourdomain.com/remote.php/dav/files/username/ /mnt/nextcloud

Integration Examples

Home Assistant

# In Home Assistant configuration.yaml
nextcloud:
  url: https://nextcloud.yourdomain.com
  username: your-username
  password: your-password

LDAP Integration

// In config.php
'ldapProviderFactory' => 'OCA\\User_LDAP\\LDAPProviderFactory',

Best Practices

  1. Regular backups: Backup data and database regularly
  2. Monitor resources: Keep an eye on disk space and memory
  3. Update regularly: Keep Nextcloud and apps updated
  4. Use HTTPS: Always use HTTPS in production
  5. Configure quotas: Set appropriate user quotas
  6. Enable caching: Use Redis for better performance
  7. Monitor logs: Keep an eye on error logs
  8. Test backups: Regularly test backup restoration