docker.recipes

Nextcloud Talk Communication

intermediate

Private video calls, chat, and file sharing with Nextcloud Talk.

Overview

Nextcloud is an open-source, self-hosted productivity platform that began as a fork of ownCloud in 2016, designed to give organizations complete control over their data while providing enterprise-grade collaboration features. At its core, Nextcloud serves as a private cloud solution offering file synchronization, sharing, and collaborative editing capabilities, positioning itself as a privacy-focused alternative to Google Workspace or Microsoft 365. The Talk application transforms Nextcloud into a comprehensive communication hub, enabling encrypted video calls, instant messaging, and screen sharing directly within your private cloud infrastructure. This communication-focused stack combines Nextcloud with MariaDB for robust data persistence, Redis for high-performance caching and session management, Collabora Online for real-time document collaboration during meetings, and Coturn as a TURN server for NAT traversal in video calls. The architecture ensures that video calls can establish connections even through firewalls and NATs, while the High Performance Backend (HPB) component handles signaling efficiently for larger conference calls. MariaDB provides the reliability needed for user management and chat history, while Redis accelerates the real-time messaging and presence features that make Talk responsive. This stack is ideal for privacy-conscious organizations, educational institutions, and remote teams who need professional video conferencing without relying on external services like Zoom or Teams. The combination delivers enterprise-grade communication features while maintaining complete data sovereignty, making it particularly valuable for healthcare organizations, legal firms, government agencies, and European companies subject to GDPR requirements who cannot risk data leaving their infrastructure.

Key Features

  • End-to-end encrypted video calls and instant messaging through Nextcloud Talk
  • Real-time collaborative document editing with Collabora Online integration during calls
  • TURN server support via Coturn for reliable video connections through firewalls and NATs
  • High Performance Backend signaling for improved call quality and reduced server load
  • Screen sharing and presentation capabilities within video conferences
  • File sharing directly in chat conversations with Nextcloud's advanced permission controls
  • MariaDB's Galera clustering support for high-availability communication infrastructure
  • Redis pub/sub messaging for real-time chat delivery and user presence indicators

Common Use Cases

  • 1Remote teams requiring secure video conferencing without third-party service dependencies
  • 2Healthcare organizations needing HIPAA-compliant communication platforms with document sharing
  • 3Educational institutions providing students with private video learning environments
  • 4Legal firms conducting confidential client consultations with document collaboration
  • 5European companies ensuring GDPR compliance by keeping all communication data on-premises
  • 6Government agencies requiring air-gapped communication systems with full audit trails
  • 7Family or community groups wanting WhatsApp/Telegram alternatives with file storage integration

Prerequisites

  • Minimum 4GB RAM recommended for smooth video calling with document collaboration
  • Open ports 3478 (TCP/UDP) for TURN server and 8080-8081 for web interfaces
  • SSL certificate setup for production use to enable WebRTC video calling
  • Basic understanding of Nextcloud app installation and Talk configuration
  • Network configuration knowledge for TURN server setup in complex network environments
  • Docker host with sufficient storage for video call recordings and shared files

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 mariadb:
3 image: mariadb:10.11
4 environment:
5 - MYSQL_DATABASE=nextcloud
6 - MYSQL_USER=nextcloud
7 - MYSQL_PASSWORD=${MYSQL_PASSWORD}
8 - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
9 volumes:
10 - mariadb_data:/var/lib/mysql
11 networks:
12 - nextcloud_net
13
14 redis:
15 image: redis:7-alpine
16 volumes:
17 - redis_data:/data
18 networks:
19 - nextcloud_net
20
21 nextcloud:
22 image: nextcloud:latest
23 ports:
24 - "8080:80"
25 environment:
26 - MYSQL_HOST=mariadb
27 - MYSQL_DATABASE=nextcloud
28 - MYSQL_USER=nextcloud
29 - MYSQL_PASSWORD=${MYSQL_PASSWORD}
30 - REDIS_HOST=redis
31 - NEXTCLOUD_ADMIN_USER=${NC_ADMIN_USER}
32 - NEXTCLOUD_ADMIN_PASSWORD=${NC_ADMIN_PASSWORD}
33 volumes:
34 - nextcloud_data:/var/www/html
35 depends_on:
36 - mariadb
37 - redis
38 networks:
39 - nextcloud_net
40
41 collabora:
42 image: collabora/code:latest
43 ports:
44 - "9980:9980"
45 environment:
46 - domain=localhost
47 - extra_params=--o:ssl.enable=false
48 cap_add:
49 - MKNOD
50 networks:
51 - nextcloud_net
52
53 coturn:
54 image: coturn/coturn:latest
55 ports:
56 - "3478:3478"
57 - "3478:3478/udp"
58 environment:
59 - TURN_REALM=localhost
60 - TURN_SECRET=${TURN_SECRET}
61 networks:
62 - nextcloud_net
63
64 hpb:
65 image: nextcloud/aio-talk:latest
66 ports:
67 - "8081:8081"
68 environment:
69 - NC_DOMAIN=localhost:8080
70 depends_on:
71 - nextcloud
72 networks:
73 - nextcloud_net
74
75volumes:
76 mariadb_data:
77 redis_data:
78 nextcloud_data:
79
80networks:
81 nextcloud_net:

.env Template

.env
1# Nextcloud Talk
2MYSQL_PASSWORD=secure_mysql_password
3MYSQL_ROOT_PASSWORD=secure_root_password
4NC_ADMIN_USER=admin
5NC_ADMIN_PASSWORD=secure_admin_password
6TURN_SECRET=secure_turn_secret
7
8# Nextcloud at http://localhost:8080
9# Install Talk app from app store

Usage Notes

  1. 1Nextcloud at http://localhost:8080
  2. 2Install Talk app from admin panel
  3. 3Collabora for document editing
  4. 4Configure TURN in Talk settings
  5. 5HPB for signaling performance

Individual Services(6 services)

Copy individual services to mix and match with your existing compose files.

mariadb
mariadb:
  image: mariadb:10.11
  environment:
    - MYSQL_DATABASE=nextcloud
    - MYSQL_USER=nextcloud
    - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
  volumes:
    - mariadb_data:/var/lib/mysql
  networks:
    - nextcloud_net
redis
redis:
  image: redis:7-alpine
  volumes:
    - redis_data:/data
  networks:
    - nextcloud_net
nextcloud
nextcloud:
  image: nextcloud:latest
  ports:
    - "8080:80"
  environment:
    - MYSQL_HOST=mariadb
    - MYSQL_DATABASE=nextcloud
    - MYSQL_USER=nextcloud
    - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    - REDIS_HOST=redis
    - NEXTCLOUD_ADMIN_USER=${NC_ADMIN_USER}
    - NEXTCLOUD_ADMIN_PASSWORD=${NC_ADMIN_PASSWORD}
  volumes:
    - nextcloud_data:/var/www/html
  depends_on:
    - mariadb
    - redis
  networks:
    - nextcloud_net
collabora
collabora:
  image: collabora/code:latest
  ports:
    - "9980:9980"
  environment:
    - domain=localhost
    - extra_params=--o:ssl.enable=false
  cap_add:
    - MKNOD
  networks:
    - nextcloud_net
coturn
coturn:
  image: coturn/coturn:latest
  ports:
    - "3478:3478"
    - 3478:3478/udp
  environment:
    - TURN_REALM=localhost
    - TURN_SECRET=${TURN_SECRET}
  networks:
    - nextcloud_net
hpb
hpb:
  image: nextcloud/aio-talk:latest
  ports:
    - "8081:8081"
  environment:
    - NC_DOMAIN=localhost:8080
  depends_on:
    - nextcloud
  networks:
    - nextcloud_net

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 mariadb:
5 image: mariadb:10.11
6 environment:
7 - MYSQL_DATABASE=nextcloud
8 - MYSQL_USER=nextcloud
9 - MYSQL_PASSWORD=${MYSQL_PASSWORD}
10 - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
11 volumes:
12 - mariadb_data:/var/lib/mysql
13 networks:
14 - nextcloud_net
15
16 redis:
17 image: redis:7-alpine
18 volumes:
19 - redis_data:/data
20 networks:
21 - nextcloud_net
22
23 nextcloud:
24 image: nextcloud:latest
25 ports:
26 - "8080:80"
27 environment:
28 - MYSQL_HOST=mariadb
29 - MYSQL_DATABASE=nextcloud
30 - MYSQL_USER=nextcloud
31 - MYSQL_PASSWORD=${MYSQL_PASSWORD}
32 - REDIS_HOST=redis
33 - NEXTCLOUD_ADMIN_USER=${NC_ADMIN_USER}
34 - NEXTCLOUD_ADMIN_PASSWORD=${NC_ADMIN_PASSWORD}
35 volumes:
36 - nextcloud_data:/var/www/html
37 depends_on:
38 - mariadb
39 - redis
40 networks:
41 - nextcloud_net
42
43 collabora:
44 image: collabora/code:latest
45 ports:
46 - "9980:9980"
47 environment:
48 - domain=localhost
49 - extra_params=--o:ssl.enable=false
50 cap_add:
51 - MKNOD
52 networks:
53 - nextcloud_net
54
55 coturn:
56 image: coturn/coturn:latest
57 ports:
58 - "3478:3478"
59 - "3478:3478/udp"
60 environment:
61 - TURN_REALM=localhost
62 - TURN_SECRET=${TURN_SECRET}
63 networks:
64 - nextcloud_net
65
66 hpb:
67 image: nextcloud/aio-talk:latest
68 ports:
69 - "8081:8081"
70 environment:
71 - NC_DOMAIN=localhost:8080
72 depends_on:
73 - nextcloud
74 networks:
75 - nextcloud_net
76
77volumes:
78 mariadb_data:
79 redis_data:
80 nextcloud_data:
81
82networks:
83 nextcloud_net:
84EOF
85
86# 2. Create the .env file
87cat > .env << 'EOF'
88# Nextcloud Talk
89MYSQL_PASSWORD=secure_mysql_password
90MYSQL_ROOT_PASSWORD=secure_root_password
91NC_ADMIN_USER=admin
92NC_ADMIN_PASSWORD=secure_admin_password
93TURN_SECRET=secure_turn_secret
94
95# Nextcloud at http://localhost:8080
96# Install Talk app from app store
97EOF
98
99# 3. Start the services
100docker compose up -d
101
102# 4. View logs
103docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/nextcloud-talk-complete/run | bash

Troubleshooting

  • Video calls fail to connect: Verify Coturn TURN server is accessible and TURN_SECRET matches Nextcloud Talk settings
  • Collabora documents won't load: Ensure collabora container domain setting matches your Nextcloud URL exactly
  • Chat messages delayed: Check Redis connectivity and increase Redis memory limit if hitting maxmemory
  • HPB signaling errors: Confirm NC_DOMAIN environment variable matches your actual Nextcloud domain and port
  • MariaDB connection refused: Verify MYSQL_PASSWORD environment variables match between nextcloud and mariadb services
  • Screen sharing not working: Enable camera and microphone permissions in browser and ensure HTTPS is configured for WebRTC

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space