296 lines
7.6 KiB
Markdown
296 lines
7.6 KiB
Markdown
# Nextcloud - Private Cloud Storage
|
|
|
|
## Table of Contents
|
|
- [Overview](#overview)
|
|
- [What is Nextcloud?](#what-is-nextcloud)
|
|
- [Why Use Nextcloud?](#why-use-nextcloud)
|
|
- [Configuration in AI-Homelab](#configuration-in-ai-homelab)
|
|
- [Official Resources](#official-resources)
|
|
- [Docker Configuration](#docker-configuration)
|
|
- [Setup](#setup)
|
|
- [Apps](#apps)
|
|
- [Troubleshooting](#troubleshooting)
|
|
|
|
## Overview
|
|
|
|
**Category:** File Storage & Collaboration
|
|
**Docker Image:** [nextcloud](https://hub.docker.com/_/nextcloud)
|
|
**Default Stack:** `productivity.yml`
|
|
**Web UI:** `https://nextcloud.${DOMAIN}` or `http://SERVER_IP:8081`
|
|
**Database:** MariaDB (separate container)
|
|
**Ports:** 8081
|
|
|
|
## What is Nextcloud?
|
|
|
|
Nextcloud is a self-hosted alternative to Google Drive, Dropbox, and Microsoft 365. It provides file sync/share, calendar, contacts, office documents, video calls, and 200+ apps - all hosted on your own server with complete privacy.
|
|
|
|
### Key Features
|
|
- **File Sync & Share:** Like Dropbox
|
|
- **Calendar & Contacts:** Sync across devices
|
|
- **Office Suite:** Collaborative document editing
|
|
- **Photos:** Google Photos alternative
|
|
- **Video Calls:** Built-in Talk
|
|
- **Notes:** Markdown notes
|
|
- **Tasks:** Todo lists
|
|
- **200+ Apps:** Extensible platform
|
|
- **Mobile Apps:** iOS and Android
|
|
- **Desktop Sync:** Windows, Mac, Linux
|
|
- **E2E Encryption:** End-to-end encryption
|
|
- **Free & Open Source:** No subscriptions
|
|
|
|
## Why Use Nextcloud?
|
|
|
|
1. **Privacy:** Your data, your server
|
|
2. **No Limits:** Unlimited storage (your disk)
|
|
3. **No Subscriptions:** $0/month forever
|
|
4. **All-in-One:** Files, calendar, contacts, office
|
|
5. **Sync Everything:** Desktop and mobile apps
|
|
6. **Extensible:** Hundreds of apps
|
|
7. **Collaboration:** Share with family/team
|
|
8. **Standards:** CalDAV, CardDAV, WebDAV
|
|
|
|
## Configuration in AI-Homelab
|
|
|
|
### Directory Structure
|
|
|
|
```
|
|
/opt/stacks/productivity/nextcloud/
|
|
html/ # Nextcloud installation
|
|
data/ # User files
|
|
config/ # Configuration
|
|
apps/ # Installed apps
|
|
|
|
/opt/stacks/productivity/nextcloud-db/
|
|
data/ # MariaDB database
|
|
```
|
|
|
|
### Environment Variables
|
|
|
|
```bash
|
|
# Nextcloud
|
|
MYSQL_HOST=nextcloud-db
|
|
MYSQL_DATABASE=nextcloud
|
|
MYSQL_USER=nextcloud
|
|
MYSQL_PASSWORD=secure_password
|
|
NEXTCLOUD_TRUSTED_DOMAINS=nextcloud.yourdomain.com
|
|
|
|
# MariaDB
|
|
MYSQL_ROOT_PASSWORD=root_password
|
|
MYSQL_DATABASE=nextcloud
|
|
MYSQL_USER=nextcloud
|
|
MYSQL_PASSWORD=secure_password
|
|
```
|
|
|
|
## Official Resources
|
|
|
|
- **Website:** https://nextcloud.com
|
|
- **Documentation:** https://docs.nextcloud.com
|
|
- **Apps:** https://apps.nextcloud.com
|
|
- **Community:** https://help.nextcloud.com
|
|
|
|
## Docker Configuration
|
|
|
|
```yaml
|
|
nextcloud-db:
|
|
image: mariadb:latest
|
|
container_name: nextcloud-db
|
|
restart: unless-stopped
|
|
networks:
|
|
- traefik-network
|
|
environment:
|
|
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
|
- MYSQL_DATABASE=nextcloud
|
|
- MYSQL_USER=nextcloud
|
|
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
|
volumes:
|
|
- /opt/stacks/productivity/nextcloud-db/data:/var/lib/mysql
|
|
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
|
|
|
|
nextcloud:
|
|
image: nextcloud:latest
|
|
container_name: nextcloud
|
|
restart: unless-stopped
|
|
networks:
|
|
- traefik-network
|
|
ports:
|
|
- "8081:80"
|
|
environment:
|
|
- MYSQL_HOST=nextcloud-db
|
|
- MYSQL_DATABASE=nextcloud
|
|
- MYSQL_USER=nextcloud
|
|
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
|
- NEXTCLOUD_TRUSTED_DOMAINS=nextcloud.${DOMAIN}
|
|
volumes:
|
|
- /opt/stacks/productivity/nextcloud/html:/var/www/html
|
|
- /opt/stacks/productivity/nextcloud/data:/var/www/html/data
|
|
- /opt/stacks/productivity/nextcloud/config:/var/www/html/config
|
|
- /opt/stacks/productivity/nextcloud/apps:/var/www/html/custom_apps
|
|
depends_on:
|
|
- nextcloud-db
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.nextcloud.rule=Host(`nextcloud.${DOMAIN}`)"
|
|
- "traefik.http.routers.nextcloud.entrypoints=websecure"
|
|
- "traefik.http.routers.nextcloud.tls.certresolver=letsencrypt"
|
|
- "traefik.http.services.nextcloud.loadbalancer.server.port=80"
|
|
```
|
|
|
|
## Setup
|
|
|
|
1. **Start Containers:**
|
|
```bash
|
|
docker compose up -d nextcloud-db nextcloud
|
|
```
|
|
|
|
2. **Wait for DB Initialization:**
|
|
```bash
|
|
docker logs nextcloud-db -f
|
|
# Wait for "mysqld: ready for connections"
|
|
```
|
|
|
|
3. **Access UI:** `http://SERVER_IP:8081`
|
|
|
|
4. **Create Admin Account:**
|
|
- Username: admin
|
|
- Password: Strong password
|
|
- Click "Install"
|
|
|
|
5. **Initial Configuration:**
|
|
- Skip recommended apps (install later)
|
|
- Allow data folder location
|
|
|
|
6. **Fix Trusted Domains (if external access):**
|
|
```bash
|
|
docker exec -it --user www-data nextcloud php occ config:system:set trusted_domains 1 --value=nextcloud.yourdomain.com
|
|
```
|
|
|
|
## Apps
|
|
|
|
### Essential Apps
|
|
|
|
**Files:**
|
|
- **Photos:** Google Photos alternative with face recognition
|
|
- **Files Automated Tagging:** Auto-tag files
|
|
- **External Storage:** Connect other storage
|
|
|
|
**Productivity:**
|
|
- **Calendar:** CalDAV calendar sync
|
|
- **Contacts:** CardDAV contact sync
|
|
- **Tasks:** Todo list with CalDAV sync
|
|
- **Deck:** Kanban boards
|
|
- **Notes:** Markdown notes
|
|
|
|
**Office:**
|
|
- **Nextcloud Office:** Collaborative documents (based on Collabora)
|
|
- **OnlyOffice:** Alternative office suite
|
|
|
|
**Communication:**
|
|
- **Talk:** Video calls and chat
|
|
- **Mail:** Email client
|
|
|
|
**Media:**
|
|
- **Music:** Music player and library
|
|
- **News:** RSS reader
|
|
|
|
### Installing Apps
|
|
|
|
**Method 1: UI**
|
|
1. Apps menu (top right)
|
|
2. Browse or search
|
|
3. Download and enable
|
|
|
|
**Method 2: Command Line**
|
|
```bash
|
|
docker exec -it --user www-data nextcloud php occ app:install photos
|
|
docker exec -it --user www-data nextcloud php occ app:enable photos
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Can't Access After Setup
|
|
|
|
```bash
|
|
# Add trusted domain
|
|
docker exec -it --user www-data nextcloud php occ config:system:set trusted_domains 1 --value=SERVER_IP
|
|
|
|
# Or edit config
|
|
docker exec -it nextcloud nano /var/www/html/config/config.php
|
|
# Add to 'trusted_domains' array
|
|
```
|
|
|
|
### Security Warnings
|
|
|
|
```bash
|
|
# Run maintenance mode
|
|
docker exec -it --user www-data nextcloud php occ maintenance:mode --on
|
|
|
|
# Clear cache
|
|
docker exec -it --user www-data nextcloud php occ maintenance:repair
|
|
|
|
# Update htaccess
|
|
docker exec -it --user www-data nextcloud php occ maintenance:update:htaccess
|
|
|
|
# Exit maintenance
|
|
docker exec -it --user www-data nextcloud php occ maintenance:mode --off
|
|
```
|
|
|
|
### Slow Performance
|
|
|
|
```bash
|
|
# Enable caching
|
|
docker exec -it --user www-data nextcloud php occ config:system:set memcache.local --value='\\OC\\Memcache\\APCu'
|
|
|
|
# Run background jobs via cron
|
|
docker exec -it --user www-data nextcloud php occ background:cron
|
|
```
|
|
|
|
### Missing Indices
|
|
|
|
```bash
|
|
# Add missing database indices
|
|
docker exec -it --user www-data nextcloud php occ db:add-missing-indices
|
|
|
|
# Convert to bigint (for large instances)
|
|
docker exec -it --user www-data nextcloud php occ db:convert-filecache-bigint
|
|
```
|
|
|
|
## Summary
|
|
|
|
Nextcloud is your private cloud offering:
|
|
- File sync and sharing
|
|
- Calendar and contacts sync
|
|
- Collaborative office suite
|
|
- Photo management
|
|
- Video calls
|
|
- 200+ apps
|
|
- Mobile and desktop clients
|
|
- Complete privacy
|
|
- Free and open-source
|
|
|
|
**Perfect for:**
|
|
- Replacing Google Drive/Dropbox
|
|
- Family file sharing
|
|
- Photo backup
|
|
- Calendar/contact sync
|
|
- Team collaboration
|
|
- Privacy-conscious users
|
|
|
|
**Key Points:**
|
|
- Requires MariaDB database
|
|
- 2GB RAM minimum
|
|
- Desktop sync clients available
|
|
- Mobile apps for iOS/Android
|
|
- CalDAV/CardDAV standards
|
|
- Enable caching for performance
|
|
- Regular backups important
|
|
|
|
**Remember:**
|
|
- Configure trusted domains
|
|
- Enable recommended apps
|
|
- Setup desktop sync client
|
|
- Mobile apps for phone backup
|
|
- Regular database maintenance
|
|
- Keep updated for security
|
|
|
|
Nextcloud puts you in control of your data!
|