ONLYOFFICE Docs Community
Deploy a document editing service that connects to trusted apps over a shared Docker network.
Summary
- Category
- Jet Templates
- Tags
- Productivity
- Authors
- Cetmix OÜ
- License
- AGPL-3
- Version
- 1.0.0
- Call sign
- cx_jet_template_onlyoffice_docs
- Website
- cetmix.com
This template creates an ONLYOFFICE document editing service. You connect it to an application that stores your documents. Users then open and edit those documents from that application. The template works with any compatible connector; it does not install or configure a particular application.
The template is ready for a connected application on the same Docker network. Docker runs each application in a separate container. A shared Docker network lets those containers contact each other without sending their traffic through a public website address. Your administrator can confirm which network each app uses.
1. What you need before starting
Ask your administrator to confirm these items:
- Your Tower server has Docker and the existing Traefik template installed. Traefik provides the HTTPS website address and its certificate.
- You have a hostname for ONLYOFFICE, such as
office.example.com, with a DNS record pointing to your server. DNS is the service that connects a website name to a server. - The application you want to connect has a compatible ONLYOFFICE connector installed.
- For private connections, ONLYOFFICE and the application are on the same Docker network. Both also need to be able to contact the appropriate addresses described in section 4.
- You have a strong shared secret ready. This is a password used by the two services to recognize each other; users do not enter it when opening documents.
This package uses the official Community image, pinned to version 10.0.0. It does not publish an extra server port: users reach it through the existing HTTPS proxy. It keeps its local data, working files, logs and custom fonts in four separate persistent storage areas. Custom fonts must be placed in the designated folder listed in the administrator reference.
2. Import the template and enter the secret
For a new installation:
- In Tower, open Tools > Import YAML, upload
cx_jet_template_onlyoffice_docs.yaml, and choose Process. - Choose Skip record, then Import. This preserves existing shared records and adds the records that are missing.
- Open Settings > Keys and Secrets, find ONLYOFFICE JWT Secret
(
onlyoffice_jwt_secret), and enter the secret. Use at least 32 random characters consisting of letters, numbers, underscores or hyphens. Do not put it in a regular configuration variable. Store it securely so you can enter the same value in the connected application. - Install ONLYOFFICE Docs Community (Docker) on your chosen server.
If ONLYOFFICE is already installed, Skip record will not update it. Ask your administrator to apply the update to the existing records, preserving their references and your chosen settings. Do not use Create a new record to update an existing template. General YAML Update also affects shared records and only adds or updates child rows; it does not remove old ones. Review the affected records first.
A secret can have a value specific to a server. If a server-specific value already exists, changing only the general value will not change the secret used on that server. Ask your administrator to change the value for the intended server.
3. Launch ONLYOFFICE
- Create a Jet using ONLYOFFICE Docs Community (Docker) on the chosen server.
- Set its website URL to your HTTPS address, for example
https://office.example.com. Your administrator can instead configure the existingweb_domainsetting so Tower generates the hostname. Either way, a matching DNS record must exist. - In the Jet's Configuration tab, review the settings in the table below.
- Choose Running as the requested state. Tower prepares storage, creates the container, starts it and waits for the service to be ready. Initial startup can take several minutes.
- Open the Jet's HTTPS address. A welcome page confirms the site is available; it is not a document library and does not replace your connected application.
- Open Jet Logs > Connection details, then use Open to view the connection card. If the card is empty or out of date, use its log update action. Copy its addresses and network name for the next section. No secret is displayed there.
| Setting | Default | What it means |
| --- | --- | --- |
| Tower Docker Network (tower_docker_network) | tower | Must match the network used by Traefik. For direct private communication, the connected application must also join this network. Changing this setting does not move the other app. |
| Allow connections to apps on private networks (onlyoffice_allow_private_ip) | Enabled (true) | Allows ONLYOFFICE to download documents from private addresses, including apps on the shared Docker network. Keep Enabled for this setup. Choose Disabled (false) if all connected apps use public addresses. |
| ONLYOFFICE JWT Header (onlyoffice_jwt_header) | Authorization | Use this same header setting in the application's connector. |
| Jet Image Name (jet_image_name) | onlyoffice/documentserver:10.0.0 | The ONLYOFFICE version. Ask your administrator to review upgrades before changing it. |
Private-network access allows private destinations generally; it is not a permission list limited to one application or one Docker network. Use it with trusted connected applications. Access to cloud metadata addresses remains disabled. JWT authentication and certificate verification remain enabled, and the demonstration application is off.
The connection card shows saved Tower settings. For an existing container, changed settings take effect only after the recreation steps in section 6.
4. Connect your application: understand the three addresses
There are three separate connections. Their addresses can be different:
| Connection | Address to enter | Where to get it | | --- | --- | --- | | A user's browser opens ONLYOFFICE | The Browser address, using HTTPS | Copy it from Connection details. Enter it in the connector's main ONLYOFFICE/document server address field. | | Your application contacts ONLYOFFICE | The Internal address, if both containers share the network | Copy it from Connection details. Enter it in the connector's internal ONLYOFFICE address field. | | ONLYOFFICE downloads documents and sends save notifications to your application | Your application's internal address, including its port when required | Ask that application's administrator. Enter it in the connector's return address/callback base address setting. |
For example, a connection card might show:
- Browser address:
https://office.example.com - Internal address:
http://example_onlyoffice/ - Shared Docker network:
tower
These are examples, not values to copy. Use your own card. The internal address uses
port 80, so you do not need to add a port number. A connected application may use a
different port. For example, its administrator might provide
http://example_app:8080/. Do not assume that example is your application's address.
The internal addresses work inside Docker, not from a user's computer. The browser still needs the HTTPS address because it loads the editor directly from ONLYOFFICE. That address can be reachable through the internet, an office network or a VPN, provided every intended user's browser can reach it and trusts its certificate. Sharing a Docker network does not remove this browser connection.
In the connected application, also enter the same shared JWT secret configured
in Tower, and the matching JWT header. This template uses header-based service
requests (JWT_IN_BODY=false). Connector field labels vary; identify each setting by
which service is contacting which service. If the connector has no separate internal
address settings, use addresses reachable by all the required participants and ask
its administrator for the supported configuration.
Do not use localhost for another container. Inside a container, localhost means
that container itself. The connected application must accept its internal hostname,
select the intended database where relevant, and expose its document-download and
save-notification routes. Those are application settings, outside this template.
If your application is on another server or network, use reachable addresses for those connections. This template does not automatically join remote Docker networks, move another app, set up VPNs, or install connectors.
5. Check the connection before inviting users
- Confirm ONLYOFFICE is Running and its browser address opens from a user's computer.
- Save the connector settings in your application and run its connection test, if offered.
- Open a disposable document from that application and make a small change.
- Close the editor, allow the application to finish saving, then reopen the document. Confirm the change is present.
A welcome page or successful healthcheck does not prove that document downloads and saving work. The document test checks the complete connection. Your application owns the original document; ONLYOFFICE's local storage alone is not a backup of that app.
6. Change settings on an existing Jet
Changes to the Docker network, private-network access, JWT secret/header or image version require the container to be recreated. Restart alone does not apply them.
- Tell users to finish editing and close their documents. Take appropriate backups before changing versions or doing other maintenance.
- If you are upgrading from an earlier version of this template and have installed custom fonts, ask your administrator to save a copy of those fonts before the first Remove. Older containers kept custom fonts in unnamed storage that Remove deletes. Adding the new font storage does not copy files out of that older storage. Restore your saved fonts into the new font storage before returning the service to users.
- Change the intended setting in the Jet's Configuration tab, or change the appropriate secret in Settings > Keys and Secrets. A value on the Jet overrides the template default; changing the default will not replace a Jet-specific value.
- Run Stop and wait for Stopped. This asks ONLYOFFICE to finish saving first.
- Run Remove and wait for Removed. This removes the container but keeps its persistent storage. It is different from Destroy.
- Run Build, wait for Stopped, then run Start and wait for Running.
- Check Connection details and repeat the disposable-document test.
You can also request state Running from Removed to let Tower run Build and Start in sequence. Changing ONLYOFFICE's settings does not change the connected application's settings; update both sides when changing the shared secret or network addresses.
7. Everyday actions and logs
| Action | What happens | | --- | --- | | Prepare | Locks deletion, checks settings and creates persistent storage. | | Build | Downloads the selected image and creates a container, leaving it stopped. | | Start | Starts the existing container and checks that the service is ready. | | Stop | Asks ONLYOFFICE to finish saving, then stops the container. | | Restart | Performs a graceful Stop and starts the same container with its existing settings. | | Remove | Removes the stopped container and keeps data, working files, logs and custom fonts. The Jet remains protected from deletion. | | Build from Removed | Creates a replacement container using the retained data and current settings. | | Discard incomplete build | Available from Draft; removes an incomplete stopped container before rebuilding or final cleanup. | | Destroy | Available from Removed to Root users. Permanently deletes the Jet's persistent data, then unlocks deletion. |
Destroy permanently deletes local data. Do not use it to apply configuration changes. The template leaves shared images, shared networks, Traefik and DNS records in place. Your administrator must manage DNS separately, including removing an unused record.
Open Jet Logs for these views:
- Connection details: addresses, network and non-secret settings; available even when the container is stopped. It describes saved settings, not a live network test.
- Container output: startup and process messages.
- Document service: editor service messages.
- Converter: document conversion messages.
- Nginx errors: web-service errors.
- Service health:
truemeans the internal document service is ready.
The document service, converter, Nginx and health views need a running container. Saving before shutdown can take five minutes. A failed save, stop or cleanup step stops the plan; investigate it before retrying instead of forcing deletion.
8. Troubleshooting
| What you see | What to check |
| --- | --- |
| The HTTPS page does not open | Correct hostname, DNS, certificate and running Traefik Jet. Check from the user's computer as well as the server. |
| The editor cannot load | The main connector address must be browser-accessible HTTPS. A Docker-only address cannot be used by the browser. |
| The app cannot reach ONLYOFFICE internally | Both containers must actually be on the same named network. Copy the internal address from Connection details, including http://. |
| A document cannot be downloaded | Enable private-network access, recreate the container, and check the application's internal address, port, database routing and permissions. |
| Editing works but changes do not save | Check the application's return/callback address and its save-notification route. Run the document test again. |
| A token/JWT error appears | Both sides need the same secret and header. Check whether a server-specific secret takes priority, then recreate the ONLYOFFICE container after changing it. |
| A new setting seems ignored | Check for a Jet-specific override and run Stop > Remove > Build > Start. Restart is insufficient. |
| Start reports a readiness failure | Read the startup logs. The container may already be running; fix the underlying issue and retry Start. |
| Prepare failed before reaching Draft | Correct the configuration and ask your administrator to retry the requested state on the existing Jet. Do not create duplicate Jets. |
Administrator reference
This application package requires the existing traefik_docker template and its
Docker dependencies. It reuses set_jet_as_not_deletable, set_jet_as_deletable,
start_jet_container, show_jet_logs, jet_image_name and tower_docker_network.
The exported set_jet_url helper, web_domain variable and DNS tag are included for
missing records; preserve existing definitions when importing. Tower's standard Jet
states must exist. The host needs Linux, Docker, Bash and GNU xargs. Traefik must use
entrypoint websecure and certificate resolver le.
Private-network support maps to ALLOW_PRIVATE_IP_ADDRESS=true at container creation.
ALLOW_META_IP_ADDRESS=false, USE_UNAUTHORIZED_STORAGE=false, JWT_ENABLED=true
and EXAMPLE_ENABLED=false remain fixed. The template does not add application-specific
dependencies, credentials, routes, databases, connector settings or software.
Custom fonts are stored in the labelled named volume
onlyoffice_<Jet reference>_fonts, mounted at /usr/share/fonts/truetype/custom.
Place added fonts in this designated folder. Fonts installed elsewhere in the container
are not covered by this storage and can be lost when the container is recreated.
Prepare and Build create it; Remove preserves it; Destroy removes it through the
existing Jet/app label filter. An older container's anonymous font volume is not
migrated automatically. Back up its contents before removal and restore them into the
new named storage using Tower commands. Refresh ONLYOFFICE's font list after installing
or restoring fonts according to the vendor's instructions. The font volume preserves
font files; it does not install fonts or refresh that list for you.
Allow sufficient Tower command/worker timeouts for image downloads, startup and the shutdown save step. JWT values are masked in Tower, but Docker administrators can read container environment values. For existing installations, add the new Connection details log to existing Jets as well as the template; new Jets receive it automatically.
Verification status
The previous package was tested on Tower 18 on 2026-11-07: import/re-import, rendering, Python validation, Prepare, Build, Start, graceful Restart, Stop, Remove, rebuild with retained data, HTTPS, JWT authentication and application logs passed. Separate empty-Jet tests covered draft cleanup, Destroy and deletion protection.
The shared-network update was also validated on 2026-11-07:
- The updated YAML passed Tower's processing step and source-derived field, reference, lifecycle and command checks.
- The existing test Jet completed Stop > Remove > Build > Start with all four plans returning exit code 0, and was left Running.
- The recreated container explicitly has private-network access enabled, metadata access disabled, untrusted certificates disabled and JWT enabled.
- A neighboring application container reached ONLYOFFICE at its internal Docker address and received a successful health response.
- ONLYOFFICE downloaded a harmless static text file directly from that application over Docker, converted it, and returned a valid PDF. No application configuration was changed for this test.
- Public HTTPS health remained successful after recreation.
- Connection details showed the correct addresses, network and saved access setting on the live Jet. A separate record-only test confirmed that new Jets inherit the enabled default and all six log views. That temporary record was deleted without creating host resources.
The two review corrections were validated on 2026-11-07:
- Docker CLI 29.9.2 accepts the updated
docker stop --timeout 300command; the live Stop completed with exit code 0 and no deprecation warning. - The pinned image's custom-font directory now has its own labelled named volume.
A harmless file survived an isolated container removal with
--volumesand was present in the rebuilt live service; it was removed after verification. - The previous custom-font directory was copied into the new named storage before the old live container was removed. This was a one-time migration for the test Jet; administrators upgrading other existing Jets must follow the backup guidance above.
- The live Stop > Remove > Build > Start sequence passed, and public HTTPS health
returned
true. The service was left Running. - A separate empty Jet verified that Prepare creates all four labelled volumes and Destroy removes all four before unlocking deletion. Those test resources were cleaned up. This checks storage retention, not rendering of a newly installed font.
An actual connected-application document open/edit/save round trip still requires verification in the intended application's connector. The file-conversion test checks private-network download and conversion, not interactive editing or save notifications. The template does not configure any application's connector.
Official references: Docker image settings, JWT configuration, conversion API, adding fonts.
This package is distributed under the GNU Affero General Public License v3.0 (AGPL-3) or later.
These Terms and Conditions (“Terms”) govern your access to and use of YAML configuration files (“Packages”, “YAML Snippets”, or “Snippets”) made available via the Cetmix Tower platform, operated by Cetmix OÜ, Ranna 6, Haademeeste, Voiste, 86501, Estonia (“Cetmix”, “we”, “our”, or “us”).
By downloading, installing, or otherwise using any YAML Snippets from the Cetmix Tower platform, you agree to be bound by these Terms.
1. Use of Packages
1.1. The YAML Snippets are provided either by Cetmix or third-party authors (“Authors”).
1.2. You are solely responsible for verifying the functionality, safety, and suitability of any YAML Snippet before using it in a production environment.
1.3. You may use the Snippets only in accordance with their respective licenses, which may be open-source or commercial.
2. Author Responsibility
2.1. Authors are solely responsible for the content, accuracy, functionality, and compliance of the YAML Snippets they publish.
2.2. Cetmix does not review or verify the correctness, security, or compliance of third-party Snippets.
2.3. If you are an Author, you represent and warrant that your submitted YAML Snippet:
- Does not infringe on any third-party rights;
- Complies with applicable laws and regulations;
- Does not contain harmful, malicious, or misleading code or behavior.
3. Limitation of Liability
3.1. Cetmix provides access to the YAML Snippets “as is” and “as available,” without warranties of any kind, either express or implied.
3.2. Cetmix expressly disclaims all liability for any damages resulting from:
- Use or inability to use a YAML Snippet;
- Errors or omissions in the Snippets;
- Actions taken in reliance on any YAML Snippet;
- Misuse, misconfiguration, or system failure caused by a Snippet.
3.3. In no event shall Cetmix OÜ be liable for any indirect, incidental, special, punitive, or consequential damages, including but not limited to loss of data, profits, or service availability.
4. Security and Compliance
4.1. Cetmix does not guarantee that any Snippet is secure or free from vulnerabilities. You must review and test all Snippets before deploying them in sensitive or production environments.
4.2. Compliance with security, privacy, and regulatory requirements is your responsibility when using any Snippet.
5. Intellectual Property
5.1. Ownership of each YAML Snippet remains with its respective Author.
5.2. You must respect all license terms specified for each Snippet. Unauthorized reproduction, distribution, or sublicensing may result in legal consequences.
6. Modifications and Termination
6.1. Cetmix may modify or remove any YAML Snippet at any time without notice.
6.2. These Terms may also be updated periodically. Continued use of the platform constitutes acceptance of the revised Terms.
7. Governing Law and Jurisdiction
These Terms shall be governed by the laws of the Republic of Estonia. Any disputes arising under or in connection with these Terms shall be subject to the exclusive jurisdiction of the courts of Estonia.
8. Contact
For questions or concerns regarding these Terms or specific YAML Snippets, please contact us