Add ONLYOFFICE Docs app
Online office suite with document, spreadsheet, and presentation editing. Includes external PostgreSQL, Redis, and RabbitMQ services with auto-generated secrets for JWT, database, and message queue credentials. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
87
apps/onlyoffice-docs/config.json
Normal file
87
apps/onlyoffice-docs/config.json
Normal file
@@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
132
apps/onlyoffice-docs/docker-compose.json
Normal file
132
apps/onlyoffice-docs/docker-compose.json
Normal file
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
56
apps/onlyoffice-docs/metadata/description.md
Normal file
56
apps/onlyoffice-docs/metadata/description.md
Normal file
@@ -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)
|
||||||
BIN
apps/onlyoffice-docs/metadata/logo.jpg
Normal file
BIN
apps/onlyoffice-docs/metadata/logo.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
Reference in New Issue
Block a user