diff --git a/apps/onlyoffice-docs/config.json b/apps/onlyoffice-docs/config.json new file mode 100644 index 0000000..4795e05 --- /dev/null +++ b/apps/onlyoffice-docs/config.json @@ -0,0 +1,87 @@ +{ + "$schema": "../app-info-schema.json", + "name": "ONLYOFFICE Docs", + "id": "onlyoffice-docs", + "available": true, + "short_desc": "Online office suite for document editing and collaboration", + "author": "Ascensio System SIA", + "port": 8044, + "categories": ["utilities", "documents"], + "description": "ONLYOFFICE Docs is an online office suite comprising viewers and editors for texts, spreadsheets and presentations, fully compatible with Office Open XML formats (.docx, .xlsx, .pptx) and enabling collaborative editing in real time.", + "tipi_version": 7, + "dynamic_config": true, + "version": "8.2", + "source": "https://github.com/ONLYOFFICE/DocumentServer", + "website": "https://www.onlyoffice.com/", + "exposable": true, + "url_suffix": "/", + "supported_architectures": ["amd64"], + "no_gui": false, + "deprecated": false, + "min_tipi_version": "4.5.0", + "created_at": 1712361600000, + "updated_at": 1712361600000, + "form_fields": [ + { + "type": "random", + "label": "JWT Secret", + "env_variable": "ONLYOFFICE_JWT_SECRET", + "min": 32, + "encoding": "hex" + }, + { + "type": "random", + "label": "Database Password", + "env_variable": "ONLYOFFICE_DB_PASSWORD", + "min": 24, + "encoding": "hex" + }, + { + "type": "random", + "label": "RabbitMQ Password", + "env_variable": "ONLYOFFICE_RABBITMQ_PASSWORD", + "min": 24, + "encoding": "hex" + }, + { + "type": "boolean", + "label": "Enable JWT", + "hint": "Enable JSON Web Token validation for secure API access", + "required": false, + "default": true, + "env_variable": "ONLYOFFICE_JWT_ENABLED" + }, + { + "type": "text", + "label": "JWT Header", + "hint": "HTTP header name for JWT token (default: Authorization)", + "required": false, + "default": "Authorization", + "env_variable": "ONLYOFFICE_JWT_HEADER" + }, + { + "type": "boolean", + "label": "JWT in Body", + "hint": "Enable token validation in request body", + "required": false, + "default": false, + "env_variable": "ONLYOFFICE_JWT_IN_BODY" + }, + { + "type": "boolean", + "label": "Allow Unauthorized Storage", + "hint": "Set to true if using self-signed certificates for your storage server (e.g., Nextcloud)", + "required": false, + "default": false, + "env_variable": "ONLYOFFICE_USE_UNAUTHORIZED_STORAGE" + }, + { + "type": "boolean", + "label": "Enable WOPI", + "hint": "Enable WOPI protocol handlers for integration with WOPI-compatible apps", + "required": false, + "default": false, + "env_variable": "ONLYOFFICE_WOPI_ENABLED" + } + ] +} diff --git a/apps/onlyoffice-docs/docker-compose.json b/apps/onlyoffice-docs/docker-compose.json new file mode 100644 index 0000000..ffc6136 --- /dev/null +++ b/apps/onlyoffice-docs/docker-compose.json @@ -0,0 +1,132 @@ +{ + "schemaVersion": 2, + "$schema": "https://schemas.runtipi.io/dynamic-compose.json", + "services": [ + { + "name": "onlyoffice-docs", + "image": "onlyoffice/documentserver:8.2", + "isMain": true, + "internalPort": 80, + "dependsOn": { + "onlyoffice-docs-db": { + "condition": "service_healthy" + }, + "onlyoffice-docs-redis": { + "condition": "service_healthy" + }, + "onlyoffice-docs-rabbitmq": { + "condition": "service_healthy" + } + }, + "environment": { + "JWT_ENABLED": "${ONLYOFFICE_JWT_ENABLED:-true}", + "JWT_SECRET": "${ONLYOFFICE_JWT_SECRET}", + "JWT_HEADER": "${ONLYOFFICE_JWT_HEADER:-Authorization}", + "JWT_IN_BODY": "${ONLYOFFICE_JWT_IN_BODY:-false}", + "USE_UNAUTHORIZED_STORAGE": "${ONLYOFFICE_USE_UNAUTHORIZED_STORAGE:-false}", + "WOPI_ENABLED": "${ONLYOFFICE_WOPI_ENABLED:-false}", + "NGINX_WORKER_PROCESSES": "auto", + "NGINX_WORKER_CONNECTIONS": "4096", + "GENERATE_FONTS": "true", + "DB_TYPE": "postgres", + "DB_HOST": "onlyoffice-docs-db", + "DB_PORT": "5432", + "DB_NAME": "onlyoffice", + "DB_USER": "onlyoffice", + "DB_PWD": "${ONLYOFFICE_DB_PASSWORD}", + "REDIS_SERVER_HOST": "onlyoffice-docs-redis", + "REDIS_SERVER_PORT": "6379", + "AMQP_URI": "amqp://${ONLYOFFICE_RABBITMQ_USER:-onlyoffice}:${ONLYOFFICE_RABBITMQ_PASSWORD}@onlyoffice-docs-rabbitmq:5672/", + "AMQP_TYPE": "rabbitmq" + }, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/logs", + "containerPath": "/var/log/onlyoffice" + }, + { + "hostPath": "${APP_DATA_DIR}/data/data", + "containerPath": "/var/www/onlyoffice/Data" + }, + { + "hostPath": "${APP_DATA_DIR}/data/lib", + "containerPath": "/var/lib/onlyoffice" + }, + { + "hostPath": "${APP_DATA_DIR}/data/fonts", + "containerPath": "/usr/share/fonts/truetype/custom" + } + ], + "healthCheck": { + "command": "curl -f http://localhost/healthcheck", + "interval": "30s", + "timeout": "10s", + "retries": 3, + "startPeriod": "60s" + } + }, + { + "name": "onlyoffice-docs-db", + "image": "postgres:15-alpine", + "isMain": false, + "environment": { + "POSTGRES_DB": "onlyoffice", + "POSTGRES_USER": "onlyoffice", + "POSTGRES_PASSWORD": "${ONLYOFFICE_DB_PASSWORD}" + }, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/postgresql", + "containerPath": "/var/lib/postgresql/data" + } + ], + "healthCheck": { + "command": "pg_isready -U onlyoffice -d onlyoffice", + "interval": "10s", + "timeout": "5s", + "retries": 5, + "startPeriod": "10s" + } + }, + { + "name": "onlyoffice-docs-redis", + "image": "redis:7-alpine", + "isMain": false, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/redis", + "containerPath": "/data" + } + ], + "healthCheck": { + "command": "redis-cli ping", + "interval": "10s", + "timeout": "5s", + "retries": 5, + "startPeriod": "10s" + } + }, + { + "name": "onlyoffice-docs-rabbitmq", + "image": "rabbitmq:3-alpine", + "isMain": false, + "environment": { + "RABBITMQ_DEFAULT_USER": "${ONLYOFFICE_RABBITMQ_USER:-onlyoffice}", + "RABBITMQ_DEFAULT_PASS": "${ONLYOFFICE_RABBITMQ_PASSWORD}" + }, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/rabbitmq", + "containerPath": "/var/lib/rabbitmq" + } + ], + "healthCheck": { + "command": "rabbitmq-diagnostics -q ping", + "interval": "10s", + "timeout": "5s", + "retries": 5, + "startPeriod": "30s" + } + } + ] +} diff --git a/apps/onlyoffice-docs/metadata/description.md b/apps/onlyoffice-docs/metadata/description.md new file mode 100644 index 0000000..919cf71 --- /dev/null +++ b/apps/onlyoffice-docs/metadata/description.md @@ -0,0 +1,56 @@ +# ONLYOFFICE Docs + +ONLYOFFICE Docs is a powerful online office suite for viewing and editing documents, spreadsheets, and presentations directly in your browser. + +## Features + +### Document Editing +- **Document Editor** - Create and edit text documents with full formatting support +- **Spreadsheet Editor** - Work with complex spreadsheets, formulas, and charts +- **Presentation Editor** - Build professional presentations with slides and animations + +### Collaboration +- **Real-time co-editing** - Multiple users can edit the same document simultaneously +- **Track changes** - Review and accept/reject modifications +- **Comments** - Add and reply to comments in documents + +### Format Support +Full compatibility with Microsoft Office formats: +- Documents: DOC, DOCX, ODT, TXT, RTF, HTML, EPUB +- Spreadsheets: XLS, XLSX, ODS, CSV +- Presentations: PPT, PPTX, ODP + +### Integration +ONLYOFFICE Docs can be integrated with: +- Nextcloud +- ownCloud +- Seafile +- Confluence +- Alfresco +- SharePoint +- Many other platforms via API + +## Configuration + +### JWT Secret (Required) +The JWT secret is used to secure communication between your application and ONLYOFFICE Docs. Generate a strong random string for production use. + +### Self-Signed Certificates +If your storage server (e.g., Nextcloud) uses self-signed SSL certificates, enable the "Allow Unauthorized Storage" option. + +### WOPI Support +Enable WOPI if you're integrating with WOPI-compatible applications like Collabora Online or Microsoft Office Online Server. + +## System Requirements + +- **CPU**: Dual core 2 GHz or better +- **RAM**: 4 GB minimum (8 GB recommended) +- **Storage**: 40 GB minimum free space +- **Architecture**: amd64 only + +## Links + +- [Official Documentation](https://helpcenter.onlyoffice.com/docs/) +- [GitHub Repository](https://github.com/ONLYOFFICE/DocumentServer) +- [API Documentation](https://api.onlyoffice.com/) +- [Integration Examples](https://helpcenter.onlyoffice.com/docs/installation) diff --git a/apps/onlyoffice-docs/metadata/logo.jpg b/apps/onlyoffice-docs/metadata/logo.jpg new file mode 100644 index 0000000..53b289c Binary files /dev/null and b/apps/onlyoffice-docs/metadata/logo.jpg differ