All apps · 0 apps
nextcloud-sync
Docker app from missinggap's Repository
Overview
Readme
View on GitHubNextcloud Sync Container
A security-optimized Docker container for automated Nextcloud synchronization with enterprise-grade reliability and modern package support. Built on Debian Trixie for enhanced compatibility and latest features.
🌟 Key Features
🔒 Security-First Architecture
- Debian Trixie - Latest stable packages with enhanced security features
- Modern Nextcloud Client - nextcloud-desktop-cmd 3.16.4 for optimal compatibility
- Non-root execution - Container runs as unprivileged user (UID/GID 1001)
- Minimal package installation - Only essential packages (
nextcloud-desktop-cmd,ca-certificates) - Security-hardened - Removal of setuid/setgid binaries and unnecessary system files
⚡ Advanced Synchronization
- Continuous synchronization - Configurable sync intervals for automated data management
- Intelligent retry logic - Exponential backoff strategy for connection failures
- Graceful shutdown - Proper signal handling for clean container stops
- Comprehensive logging - Timestamped logs for monitoring and debugging
🛠️ Operational Excellence
- Health checks - Pre-sync connectivity and permission validation
- Flexible operation modes - One-time sync or continuous operation
- Robust error recovery - Configurable retry attempts with smart backoff
- Resource optimization - Minimal memory and CPU footprint
🚀 Quick Start
Basic Usage
docker run -d \
--name nextcloud-sync \
-e NEXTCLOUD_USER="your_username" \
-e NEXTCLOUD_PASS="your_password" \
-e NEXTCLOUD_URL="your-nextcloud.example.com" \
-v /path/to/local/data:/media/nextclouddata \
ghcr.io/dkuhnke/nextcloud-sync
Docker Compose
version: '3.8'
services:
nextcloud-sync:
image: ghcr.io/dkuhnke/nextcloud-sync
container_name: nextcloud-sync
restart: unless-stopped
environment:
- NEXTCLOUD_USER=your_username
- NEXTCLOUD_PASS=your_password
- NEXTCLOUD_URL=your-nextcloud.example.com
- NEXTCLOUD_SLEEP=300
- NEXTCLOUD_SYNC_RETRIES=4
- NEXTCLOUD_RUN_ONCE=false
volumes:
- ./data:/media/nextclouddata
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
⚙️ Environment Variables
Required Variables
| Variable | Description | Example |
|---|---|---|
NEXTCLOUD_USER |
Nextcloud username | john.doe |
NEXTCLOUD_PASS |
Nextcloud app password | your-secure-password |
NEXTCLOUD_URL |
Nextcloud server URL | cloud.example.com |
Optional Variables
| Variable | Description | Default | Example |
|---|---|---|---|
NEXTCLOUD_SLEEP |
Sleep interval between syncs (seconds) | 300 |
600 |
NEXTCLOUD_SYNC_RETRIES |
Number of retry attempts on failure | 4 |
10 |
NEXTCLOUD_RUN_ONCE |
Run sync once and exit | false |
true |
NEXTCLOUD_DEBUG |
Enable verbose debug logging | false |
true |
📁 Volume Mapping
The container expects your local data directory to be mounted at /media/nextclouddata:
-v /your/local/path:/media/nextclouddata
This directory will be synchronized with your Nextcloud instance.
🔧 Advanced Configuration
One-time Sync
For a single synchronization without continuous operation:
docker run --rm \
-e NEXTCLOUD_USER="your_username" \
-e NEXTCLOUD_PASS="your_password" \
-e NEXTCLOUD_URL="your-nextcloud.example.com" \
-e NEXTCLOUD_RUN_ONCE=true \
-v /path/to/local/data:/media/nextclouddata \
ghcr.io/dkuhnke/nextcloud-sync
Custom Sync Interval
Set a custom sync interval (e.g., every 10 minutes):
docker run -d \
-e NEXTCLOUD_SLEEP=600 \
# ... other environment variables
ghcr.io/dkuhnke/nextcloud-sync
Increased Retry Attempts
For unstable connections, increase retry attempts:
docker run -d \
-e NEXTCLOUD_SYNC_RETRIES=10 \
# ... other environment variables
ghcr.io/dkuhnke/nextcloud-sync
🔒 Security Improvements
Debian Trixie Base
- Modern Package Support: Debian Trixie provides access to the latest stable packages
- Enhanced Compatibility: nextcloud-desktop-cmd 3.16.4 vs older 3.7.3 in Debian Bookworm
- Security Hardening: Systematic removal of setuid/setgid binaries and unnecessary files
- Minimal Installation: Only essential packages installed for reduced attack surface
Non-root Execution
The container runs as unprivileged nextcloud user (UID/GID 1001):
# Container automatically runs as nextcloud user
USER nextcloud
🛡️ Security Considerations
App Tokens (Recommended)
Instead of using your main password, create an app-specific password in Nextcloud:
- Go to Nextcloud Settings → Security
- Create a new app password
- Use the generated token as
NEXTCLOUD_PASS
Environment Variables
Store sensitive information securely:
# Using environment file
docker run --env-file .env ghcr.io/dkuhnke/nextcloud-sync
Docker Secrets (Recommended for Production)
For production environments, use Docker Secrets:
version: '3.8'
secrets:
nextcloud_user:
external: true
nextcloud_pass:
external: true
services:
nextcloud-sync:
image: ghcr.io/dkuhnke/nextcloud-sync
secrets:
- nextcloud_user
- nextcloud_pass
environment:
- NEXTCLOUD_URL=cloud.example.com
# Secrets will be available in /run/secrets/
🛡️ Security Architecture
Modern Foundation with Debian Trixie
The migration to Debian Trixie brings significant compatibility and feature improvements:
| Aspect | Debian Bookworm | Debian Trixie | Improvement |
|---|---|---|---|
| Nextcloud Client | 3.7.3 | 3.16.4 | Latest features & fixes |
| Package Currency | Stable | Testing/Latest | More recent security patches |
| Compatibility | Legacy support | Modern features | Enhanced functionality |
| Package Selection | Standard | Curated minimal | Reduced installation footprint |
Security Features
- Non-root Execution: Container runs as
nextclouduser (UID 1001) - Minimal Package Set: Only
nextcloud-desktop-cmdandca-certificatesinstalled - Security Hardening: Systematic removal of setuid/setgid binaries
- Clean Filesystem: Removal of documentation, man pages, and cache files
- Modern Base: Debian Trixie for current security patches and compatibility
Best Practices
- Regular Updates: Rebuild image regularly for latest security patches
- Network Isolation: Run container in isolated Docker networks
- Resource Limits: Define CPU and memory limits
- Read-only Filesystem: When possible, run container with read-only root filesystem
- App Passwords: Never use main login passwords
📊 Monitoring and Logging
View Logs
# Follow logs in real-time
docker logs -f nextcloud-sync
# View last 100 lines
docker logs --tail 100 nextcloud-sync
Der Container bietet strukturierte Protokollierung mit Zeitstempeln:
[2025-08-25 10:30:00] 🚀 Starting Nextcloud Sync Container v2.7
[2025-08-25 10:30:00] User: john.doe
[2025-08-25 10:30:00] URL: cloud.example.com
[2025-08-25 10:30:00] Retries: 4
[2025-08-25 10:30:00] Run Once: false
[2025-08-25 10:30:01] ✅ Environment validation successful
[2025-08-25 10:30:01] ✅ Directory permissions validated
[2025-08-25 10:30:02] 🔄 Starting continuous sync mode (interval: 300s)
[2025-08-25 10:30:02] 🔄 Sync attempt 1/5
[2025-08-25 10:30:15] ✅ Synchronization completed successfully
[2025-08-25 10:30:15] ⏳ Waiting 300 seconds until next sync...
🐛 Troubleshooting
Common Issues
Connection Failed
❌ All 5 sync attempts failed
- Verify
NEXTCLOUD_URLis correct and accessible - Check username and password/app token
- Ensure Nextcloud server is running
Permission Denied
❌ Directory is not writable: /media/nextclouddata
- Check volume mount permissions
- Ensure the user inside container can write to
/media/nextclouddata
Environment Variable Errors
❌ Missing required environment variables: NEXTCLOUD_USER NEXTCLOUD_PASS
- Set all required environment variables
- Check environment variable syntax
Debug Information
View container logs for troubleshooting:
docker logs -f nextcloud-sync 2>&1 | grep -E "(ERROR|WARN|❌)"
Performance Optimization
For large datasets, sync intervals can be adjusted:
# Longer intervals for large repositories
-e NEXTCLOUD_SLEEP=1800 # 30 minutes
🚢 Container Registry
The Docker image is automatically built and published to the GitHub Container Registry (GHCR) via GitHub Actions:
- Push to
main→ image published asghcr.io/dkuhnke/nextcloud-sync:latest - Version tag
v*→ image published with SemVer tags (e.g.2.8,2.8.0) - Pull Requests → image is built only (not published)
Pull the latest image:
docker pull ghcr.io/dkuhnke/nextcloud-sync:latest
🏗️ Building from Source
# Clone the repository
git clone https://github.com/dkuhnke/nextcloud-sync.git
cd nextcloud-sync
# Build the Docker image
docker build -t nextcloud-sync .
# Run your custom build
docker run -d nextcloud-sync
Build Information
- Base Image: Debian Trixie
- Version: 2.7
- Nextcloud Client: 3.16.4 (latest available)
- Dependencies:
nextcloud-desktop-cmd+ca-certificatesonly
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
Development Setup
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🆘 Support
If you encounter any issues or have questions:
- Check the troubleshooting section
- Review existing issues
- Create a new issue with detailed information
🔗 Related Projects
Author: dkuhnke
Version: 2.7
Last Updated: June 2026
Base: Debian Trixie - Latest features with enterprise reliability
GitHub: nextcloud-sync
Install nextcloud-sync on Unraid in a few clicks.
Find nextcloud-sync in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
ghcr.io/dkuhnke/nextcloud-syncRuntime arguments
- Network
bridge- Shell
bash- Privileged
- false
Template configuration
Your Nextcloud username. This is the username you use to log into your Nextcloud instance.
- Target
- NEXTCLOUD_USER
Your Nextcloud app password or token. For security reasons, it's highly recommended to create an app-specific password in Nextcloud Settings → Security → Devices & sessions instead of using your main password.
- Target
- NEXTCLOUD_PASS
Your Nextcloud server hostname or URL. Examples: cloud.example.com or https://cloud.example.com
- Target
- NEXTCLOUD_URL
Time interval between synchronization attempts in seconds. Default is 300 seconds (5 minutes). Increase for less frequent syncs or decrease for more frequent syncs.
- Target
- NEXTCLOUD_SLEEP
- Default
- 300
Number of retry attempts when synchronization fails (1-10 range). The container uses exponential backoff between retry attempts. Increase this value for unstable network connections. v2.7 includes enhanced retry logic with improved error handling and modern client compatibility.
- Target
- NEXTCLOUD_SYNC_RETRIES
- Default
- 4
Set to 'true' to run synchronization once and exit, or 'false' for continuous operation. Use 'true' for scheduled one-time syncs via Unraid User Scripts.
- Target
- NEXTCLOUD_RUN_ONCE
- Default
- false
Set to 'true' to enable verbose nextcloudcmd debug output (useful for troubleshooting).
- Target
- NEXTCLOUD_DEBUG
- Default
- false
Local directory path synchronized with your Nextcloud account. Must be writable by the container.
- Target
- /media/nextclouddata
- Default
- /mnt/user/appdata/nextcloud-sync/data