9.0 KiB
OpenCloud All-in-One Docker Container
Overview
This is a comprehensive all-in-one Docker container for OpenCloud, a Go-based file sync and share platform (successor to ownCloud). The container includes all integrated services required for a full-featured deployment.
Included Services
| Service | Port | Purpose |
|---|---|---|
| ClamAV | Socket | Antivirus scanning for uploaded files |
| Apache Tika | 9998 | Full-text search and document extraction |
| Radicale | 5232 | CalDAV/CardDAV for Calendar and Contacts |
| Collabora CODE | 9980 | Document collaboration (LibreOffice Online) |
| OpenCloud | 9200 | Core file sync/share platform |
| Nginx | 80 | Reverse proxy (external-facing) |
Architecture
+------------------+
| Nginx |
| (Port 80) |
+--------+---------+
|
+--------------------+--------------------+
| | | | |
+----v----+ +---v---+ +---v---+ +---v---+ +---v---+
|OpenCloud| |Collabora| |Radicale| | Tika | |ClamAV |
| (9200) | | (9980) | | (5232) | |(9998)| |(sock) |
+---------+ +---------+ +--------+ +------+ +-------+
Service Startup Order
Services start in this order to ensure dependencies are available:
- 01-clamav.sh - Antivirus daemon (other services depend on scanning)
- 02-tika.sh - Search indexing service
- 03-radicale.sh - Calendar/Contacts (CalDAV/CardDAV)
- 04-collabora.sh - Document collaboration
- 05-opencloud.sh - Main OpenCloud server
- 06-nginx.sh - Reverse proxy (last, needs all backends)
Environment Variables
Domain Configuration
| Variable | Default | Description |
|---|---|---|
DOMAIN |
$HOSTNAME |
Primary domain for all services |
OC_DOMAIN |
${DOMAIN:-$HOSTNAME} |
OpenCloud domain (for URL generation) |
COLLABORA_SERVER_NAME |
collabora.${DOMAIN:-$HOSTNAME} |
Collabora server identifier for WOPI |
URL Structure
Services are accessed via subdomains:
${DOMAIN}→ OpenCloud (main application)collabora.${DOMAIN}→ Collabora CODE (document editing)radicale.${DOMAIN}→ Radicale (CalDAV/CardDAV)
OpenCloud Configuration
| Variable | Default | Description |
|---|---|---|
ADMIN_PASSWORD |
(auto-generated) | Admin user password |
OC_CONFIG_DIR |
/config/opencloud |
Configuration directory |
OC_DATA_DIR |
/data/opencloud |
Data storage directory |
OC_LOG_LEVEL |
info |
Logging verbosity |
OC_INSECURE |
true |
Allow insecure connections |
PROXY_HTTP_ADDR |
0.0.0.0:9200 |
HTTP listen address |
PROXY_TLS |
false |
Disable TLS (behind reverse proxy) |
Service Integration
| Variable | Default | Description |
|---|---|---|
COLLABORATION_WOPI_SRC |
http://localhost:9980 |
Collabora WOPI endpoint |
COLLABORATION_APP_ADDR |
http://localhost:9980 |
Collabora app address |
SEARCH_EXTRACTOR_TYPE |
tika |
Search extraction engine |
SEARCH_EXTRACTOR_TIKA_TIKA_URL |
http://localhost:9998 |
Tika server URL |
ANTIVIRUS_SCANNER_TYPE |
clamav |
Antivirus scanner type |
ANTIVIRUS_CLAMAV_SOCKET |
/run/clamav/clamd.sock |
ClamAV socket path |
User Configuration
| Variable | Default | Description |
|---|---|---|
OPENCLOUD_USER |
opencloud |
System user for OpenCloud |
OPENCLOUD_UID |
1000 |
User ID |
OPENCLOUD_GID |
1000 |
Group ID |
Directory Structure
/config/
├── opencloud/ # OpenCloud configuration
├── radicale/ # Radicale CalDAV/CardDAV config
├── clamav/ # ClamAV configuration
├── collabora/ # Collabora configuration
└── nginx/ # Nginx reverse proxy config
/data/
├── opencloud/ # User files and data
├── radicale/ # Calendar/Contact collections
├── clamav/ # ClamAV data
├── collabora/ # Collabora data
└── logs/ # All service logs
├── opencloud/
├── radicale/
├── clamav/
├── tika/
├── collabora/
└── nginx/
Usage
Basic Run
docker run -d \
--name opencloud \
-p 80:80 \
-v opencloud-config:/config \
-v opencloud-data:/data \
casjaysdevdocker/opencloud:latest start
With Custom Admin Password
docker run -d \
--name opencloud \
-p 80:80 \
-e ADMIN_PASSWORD=mysecurepassword \
-v opencloud-config:/config \
-v opencloud-data:/data \
casjaysdevdocker/opencloud:latest start
Docker Compose
version: '3.8'
services:
opencloud:
image: casjaysdevdocker/opencloud:latest
container_name: opencloud
command: start
ports:
- "80:80"
environment:
- ADMIN_PASSWORD=changeme
- OC_LOG_LEVEL=info
volumes:
- opencloud-config:/config
- opencloud-data:/data
restart: unless-stopped
volumes:
opencloud-config:
opencloud-data:
Nginx Proxy Configuration
The built-in Nginx proxies requests to all services:
/→ OpenCloud (port 9200)/cool/→ Collabora WebSocket/hosting/discovery→ Collabora discovery/hosting/capabilities→ Collabora capabilities/radicale/→ Radicale CalDAV/CardDAV
Building
# Generate Dockerfile from template
gen-dockerfile
# Build for current platform
buildx
# Build for specific platform
buildx --platform linux/amd64
Technical Notes
Base Image
Uses Debian-based image (not Alpine) because Collabora CODE requires glibc.
SSL/TLS
SSL is disabled by default (PROXY_TLS=false) as the container is designed to run behind a reverse proxy that handles TLS termination.
ClamAV Virus Definitions
Virus definitions are downloaded during image build to reduce container startup time. Updates can be performed by restarting the container or running freshclam manually.
Collabora User
Collabora CODE must run as the cool user (not root) for security reasons.
Admin Password
If ADMIN_PASSWORD is not set, a random 16-character password is generated and saved to /config/secure/auth/root/opencloud_admin_pass.
Troubleshooting
Check Service Status
docker logs opencloud-test 2>&1 | grep -E "completed|Error|Starting"
Access Container Shell
docker exec -it opencloud /bin/bash
Check Running Processes
docker exec opencloud ps aux
View Service Logs
# OpenCloud
docker exec opencloud cat /data/logs/opencloud/opencloud.log
# Nginx
docker exec opencloud cat /data/logs/nginx/access.log
# Collabora
docker exec opencloud cat /data/logs/collabora/collabora.log
Files Structure
Setup Scripts (/root/docker/setup/)
02-packages.sh- Base package installation info (actual packages in ENV_PACKAGES)03-files.sh- Downloads OpenCloud binary, Tika JAR, ClamAV definitions04-users.sh- Creates opencloud user and group
Init Scripts (/usr/local/etc/docker/init.d/)
01-clamav.sh- ClamAV antivirus daemon02-tika.sh- Apache Tika search service03-radicale.sh- Radicale CalDAV/CardDAV04-collabora.sh- Collabora CODE05-opencloud.sh- OpenCloud server06-nginx.sh- Nginx reverse proxy
Configuration Templates
/usr/local/share/template-files/config/- Default configurations/etc/radicale/config- Radicale default config
Package List
Packages installed via ENV_PACKAGES:
- Core: ca-certificates, curl, wget, bash, tini, gnupg, apt-transport-https, tzdata, procps, netcat-openbsd, nginx
- Java: default-jre-headless (for Tika)
- Python: python3, python3-pip, python3-venv (for Radicale)
- Antivirus: clamav, clamav-daemon, clamav-freshclam
Additional packages installed in 03-files.sh:
- Collabora: coolwsd, code-brand (from Collabora repository)
- Radicale: installed via pip
Version Information
- OpenCloud: Latest from GitHub releases (auto-detected)
- Apache Tika: 2.9.1
- Radicale: Latest from pip
- Collabora CODE: Latest from official repository
Known Limitations
- Single container deployment - not suitable for high-availability setups
- ClamAV definitions are from build time - consider periodic updates
- No built-in SSL - requires external reverse proxy for HTTPS
- Memory intensive due to Java (Tika) and Collabora
- Collabora CODE may require additional configuration for production use - check
/usr/bin/discovery.xml
Current Service Status
- ClamAV: Working
- Apache Tika: Working
- Radicale: Working
- Collabora CODE: Requires additional configuration (may fail on first run)
- OpenCloud: Dependent on Collabora for document editing features
- Nginx: Working (serves as reverse proxy)