Error when saving file to alfresco

Hello, I’m facing an issue when trying to connect the onlyoffice docker image (onlyoffice/documentserver:latest) in our alfresco docker compose stack.
Opening the file in onlyoffice through the alfresco interface works, but saving the file to alfresco fails:


In the onlyoffice log I see the following error:

2024-05-29 16:06:29 [2024-05-29T14:06:29.406] [ERROR] [localhost] [8db87172-62b9-4809-825e-2070a42eb1bc_1.0] [admin1] nodeJS - sendServerRequest error: url = https://host.docker.internal/alfresco/s/parashift/onlyoffice/callback?nodeRef=workspace://SpacesStore/8db87172-62b9-4809-825e-2070a42eb1bc&cb_key=KZYV0RiDyXjMlfNXeORbDI3ziyMLUUCMO7-4obwgJnE;data = {"key":"8db87172-62b9-4809-825e-2070a42eb1bc_1.0","status":6,"url":"https://localhost:443/cache/files/data/8db87172-62b9-4809-825e-2070a42eb1bc_1.0_174/output.docx/output.docx?md5=BU_eK6r2o_Xj4quJjRh3QA&expires=1716992490&WOPISrc=8db87172-62b9-4809-825e-2070a42eb1bc_1.0&filename=output.docx","changesurl":"https://localhost:443/cache/files/data/8db87172-62b9-4809-825e-2070a42eb1bc_1.0_174/changes.zip/changes.zip?md5=ZdL3ofNz144lV6dKFHDpxw&expires=1716992490&WOPISrc=8db87172-62b9-4809-825e-2070a42eb1bc_1.0&filename=changes.zip","history":{"serverVersion":"8.0.1","changes":[{"created":"2024-05-29 14:06:28","user":{"id":"admin","name":"Administrator "}}]},"users":["admin"],"actions":[{"type":2,"userid":"admin"}],"lastsave":"2024-05-29T14:06:28.000Z","forcesavetype":1,"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiI4ZGI4NzE3Mi02MmI5LTQ4MDktODI1ZS0yMDcwYTQyZWIxYmNfMS4wIiwic3RhdHVzIjo2LCJ1cmwiOiJodHRwczovL2xvY2FsaG9zdDo0NDMvY2FjaGUvZmlsZXMvZGF0YS84ZGI4NzE3Mi02MmI5LTQ4MDktODI1ZS0yMDcwYTQyZWIxYmNfMS4wXzE3NC9vdXRwdXQuZG9jeC9vdXRwdXQuZG9jeD9tZDU9QlVfZUs2cjJvX1hqNHF1SmpSaDNRQSZleHBpcmVzPTE3MTY5OTI0OTAmV09QSVNyYz04ZGI4NzE3Mi02MmI5LTQ4MDktODI1ZS0yMDcwYTQyZWIxYmNfMS4wJmZpbGVuYW1lPW91dHB1dC5kb2N4IiwiY2hhbmdlc3VybCI6Imh0dHBzOi8vbG9jYWxob3N0OjQ0My9jYWNoZS9maWxlcy9kYXRhLzhkYjg3MTcyLTYyYjktNDgwOS04MjVlLTIwNzBhNDJlYjFiY18xLjBfMTc0L2NoYW5nZXMuemlwL2NoYW5nZXMuemlwP21kNT1aZEwzb2ZOejE0NGxWNmRLRkhEcHh3JmV4cGlyZXM9MTcxNjk5MjQ5MCZXT1BJU3JjPThkYjg3MTcyLTYyYjktNDgwOS04MjVlLTIwNzBhNDJlYjFiY18xLjAmZmlsZW5hbWU9Y2hhbmdlcy56aXAiLCJoaXN0b3J5Ijp7InNlcnZlclZlcnNpb24iOiI4LjAuMSIsImNoYW5nZXMiOlt7ImNyZWF0ZWQiOiIyMDI0LTA1LTI5IDE0OjA2OjI4IiwidXNlciI6eyJpZCI6ImFkbWluIiwibmFtZSI6IkFkbWluaXN0cmF0b3IgIn19XX0sInVzZXJzIjpbImFkbWluIl0sImFjdGlvbnMiOlt7InR5cGUiOjIsInVzZXJpZCI6ImFkbWluIn1dLCJsYXN0c2F2ZSI6IjIwMjQtMDUtMjlUMTQ6MDY6MjguMDAwWiIsImZvcmNlc2F2ZXR5cGUiOjEsImZpbGV0eXBlIjoiZG9jeCIsImlhdCI6MTcxNjk5MTU4OSwiZXhwIjoxNzE2OTkxODg5fQ.DGn32QgrJmtrUVHv7jI_CVb_8NX53yPKWmpyU4VdhmQ","filetype":"docx"} Error: Error response: statusCode:500; headers:{"server":"nginx/1.20.2","date":"Wed, 29 May 2024 14:06:29 GMT","content-length":"59","connection":"close","x-frame-options":"SAMEORIGIN"}; body:
2024-05-29 16:06:29 {"error":1, "message":"04290044 Exception in Transaction."}
2024-05-29 16:06:29     at Request._callback (/snapshot/server/Common/sources/utils.js)
2024-05-29 16:06:29     at Request.callback (/snapshot/server/Common/node_modules/request/request.js:185:22)
2024-05-29 16:06:29     at Request.emit (node:events:527:28)
2024-05-29 16:06:29     at Request.<anonymous> (/snapshot/server/Common/node_modules/request/request.js:1161:10)
2024-05-29 16:06:29     at Request.emit (node:events:527:28)
2024-05-29 16:06:29     at IncomingMessage.<anonymous> (/snapshot/server/Common/node_modules/request/request.js:1083:12)
2024-05-29 16:06:29     at Object.onceWrapper (node:events:641:28)
2024-05-29 16:06:29     at IncomingMessage.emit (node:events:539:35)
2024-05-29 16:06:29     at endReadableNT (node:internal/streams/readable:1345:12)
2024-05-29 16:06:29     at processTicksAndRejections (node:internal/process/task_queues:83:21)

In alfresco I get the error

2024-05-29 16:06:29 2024-05-29T14:06:29,402 [] ERROR [onlyoffice.scripts.CallBack] [http-nio-8080-exec-1] Error execution script Callback
2024-05-29 16:06:29 org.alfresco.error.AlfrescoRuntimeException: 04290044 Exception in Transaction.
2024-05-29 16:06:29     at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:538) ~[alfresco-repository-20.64.jar:20.64]
2024-05-29 16:06:29     at com.parashift.onlyoffice.scripts.CallBack.execute(CallBack.java:158) ~[onlyoffice-integration-platform-jar-6.1.0.jar:?]
2024-05-29 16:06:29     at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:506) ~[alfresco-remote-api-20.64.jar:20.64]
2024-05-29 16:06:29     at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:685) ~[alfresco-remote-api-20.64.jar:20.64]
2024-05-29 16:06:29     at org.alfresco.repo.web.scripts.RepositoryContainer.executeScriptInternal(RepositoryContainer.java:356) ~[alfresco-remote-api-20.64.jar:20.64]
2024-05-29 16:06:29     at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:309) ~[alfresco-remote-api-20.64.jar:20.64]
2024-05-29 16:06:29     at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:423) ~[spring-webscripts-8.33.jar:8.33]
2024-05-29 16:06:29     at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:210) ~[spring-webscripts-8.33.jar:8.33]
2024-05-29 16:06:29     at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:131) ~[spring-webscripts-8.33.jar:8.33]
2024-05-29 16:06:29     at org.alfresco.repo.web.scripts.AlfrescoWebScriptServlet.service(AlfrescoWebScriptServlet.java:43) ~[alfresco-remote-api-20.64.jar:20.64]
2024-05-29 16:06:29     at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.alfresco.module.aosmodule.service.ContextRootFilter.doFilter(ContextRootFilter.java:93) ~[alfresco-aos-repo-binding-1.6.0-M1.jar:?]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.springframework.extensions.webscripts.servlet.SecurityHeadersFilter.doFilter(SecurityHeadersFilter.java:177) ~[spring-webscripts-8.33.jar:8.33]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:68) ~[alfresco-remote-api-20.64.jar:20.64]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.alfresco.web.app.servlet.ClearSecurityContextFilter.doFilter(ClearSecurityContextFilter.java:53) ~[alfresco-remote-api-20.64.jar:20.64]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:769) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[catalina.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-coyote.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-coyote.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) ~[tomcat-coyote.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) ~[tomcat-coyote.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-util.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-util.jar:9.0.62]
2024-05-29 16:06:29     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.62]
2024-05-29 16:06:29     at java.lang.Thread.run(Thread.java:833) ~[?:?]
2024-05-29 16:06:29 Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:443 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused
2024-05-29 16:06:29     at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at com.parashift.onlyoffice.util.RequestManager.executeRequest(RequestManager.java:91) ~[onlyoffice-integration-platform-jar-6.1.0.jar:?]
2024-05-29 16:06:29     at com.parashift.onlyoffice.util.RequestManager.executeRequestToDocumentServer(RequestManager.java:55) ~[onlyoffice-integration-platform-jar-6.1.0.jar:?]
2024-05-29 16:06:29     at com.parashift.onlyoffice.scripts.CallBack.updateNode(CallBack.java:305) ~[onlyoffice-integration-platform-jar-6.1.0.jar:?]
2024-05-29 16:06:29     at com.parashift.onlyoffice.scripts.CallBack.access$100(CallBack.java:38) ~[onlyoffice-integration-platform-jar-6.1.0.jar:?]
2024-05-29 16:06:29     at com.parashift.onlyoffice.scripts.CallBack$ProccessRequestCallback.execute(CallBack.java:247) ~[onlyoffice-integration-platform-jar-6.1.0.jar:?]
2024-05-29 16:06:29     at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:452) ~[alfresco-repository-20.64.jar:20.64]
2024-05-29 16:06:29     ... 44 more
2024-05-29 16:06:29 Caused by: java.net.ConnectException: Connection refused
2024-05-29 16:06:29     at sun.nio.ch.Net.pollConnect(Native Method) ~[?:?]
2024-05-29 16:06:29     at sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[?:?]
2024-05-29 16:06:29     at sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) ~[?:?]
2024-05-29 16:06:29     at sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[?:?]
2024-05-29 16:06:29     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[?:?]
2024-05-29 16:06:29     at java.net.Socket.connect(Socket.java:633) ~[?:?]
2024-05-29 16:06:29     at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:368) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) ~[httpclient-4.5.13.jar:4.5.13]
2024-05-29 16:06:29     at com.parashift.onlyoffice.util.RequestManager.executeRequest(RequestManager.java:91) ~[onlyoffice-integration-platform-jar-6.1.0.jar:?]
2024-05-29 16:06:29     at com.parashift.onlyoffice.util.RequestManager.executeRequestToDocumentServer(RequestManager.java:55) ~[onlyoffice-integration-platform-jar-6.1.0.jar:?]
2024-05-29 16:06:29     at com.parashift.onlyoffice.scripts.CallBack.updateNode(CallBack.java:305) ~[onlyoffice-integration-platform-jar-6.1.0.jar:?]
2024-05-29 16:06:29     at com.parashift.onlyoffice.scripts.CallBack.access$100(CallBack.java:38) ~[onlyoffice-integration-platform-jar-6.1.0.jar:?]
2024-05-29 16:06:29     at com.parashift.onlyoffice.scripts.CallBack$ProccessRequestCallback.execute(CallBack.java:247) ~[onlyoffice-integration-platform-jar-6.1.0.jar:?]
2024-05-29 16:06:29     at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:452) ~[alfresco-repository-20.64.jar:20.64]
2024-05-29 16:06:29     ... 44 more

The reason why I think this goes wrong is because the url/changesurl is refering to https://localhost:443/cache/…, this is the url under which the file can be found in the onlyoffice container, but the alfresco container has to use a different url to connect to onlyoffice (in our case https://onlyoffice:443/cache/…), but I don’t know how to change this.
I thought maybe I have to change the files.docservice.url.public property, as defined here: Connecting ONLYOFFICE Docs to ONLYOFFICE Groups - ONLYOFFICE but I cannot find the specified file (/var/www/onlyoffice/WebStudio/web.appsettings.config) in the docker image: onlyoffice/documentserver:latest
What can I do to fix this?

Hello,
Currently you don’t use the X-forwarded-host header, you need to configure proxy according to our guides to resolve the issue: Using ONLYOFFICE Docs behind the proxy - ONLYOFFICE
After you do it, Docs should be accessible for for Alfresco.

Thanks for the quick response.
I don’t think this is the solution to our problem. All of the requests that are initiated by the browser are working well.
However a request that is initiated by onlyoffice, that is sent to alfresco, has this “incorrect” url (localhost instead of onlyoffice). As far as I know the X-forwarded-host header is used to add to a request (in a proxy), to tell the server what it’s own ip is, so it can use this in url’s it generates in the response. But in this case the url is present in the request body sent by onlyoffice, so I don’t think the X-forwarded-host is able to fix this. And if it is, I don’t understand where I should do this, because adding it in the nginx in front of onlyoffice and alfresco makes the requests to onlyoffice fail (because requests from the browser are redirected to https://onlyoffice while they should be to https://localhost)

To hopefully make the problem a bit clearer, this is in steps what is going on:

  1. I open a file in onlyoffice through the alfresco ui → This works fine
  2. The file is opened in onlyoffice → This works fine
  3. I edit the file through In onlyoffice → this works fine
  4. I press the save button in onlyoffice
  5. Onlyoffice sends a request to alfresco to tell it where it can find the updated file ->! This works but not as expected, because in the request body it has a url (https://localhost:/cache/…) that can only accessed from within the onlyoffice container, so this url is incorrect for alfresco
  6. Alfresco recieves the request from onlyoffice and tries to get the file from the url that it has been given. → This fails, because this url can’t be reached, as a result alfresco returns a 500 server error to onlyoffice
  7. The file can not be saved, so onlyoffice shows a warning in the browser

We still suggest to add X-Forwarded-Host header, localhost is being used now exactly because the header is not specified. This header informs proxy server that the hostname from which the response was sent should be saved.
After that Document Server will form the links to documents in accordance with specified hostname.
You should configure the above in a proxy config, you can choose Apache, HAProxy, etc (you’d need to install one of them and edit the config). There you can find configurations for them: GitHub - ONLYOFFICE/document-server-proxy: Common setting for Document Server proxy

Hi @DmitriiV , colleague here of @d.coppens. Also took the oppertunity to check the callback flow from OnlyOffice towards Alfresco and found the issue with this flow. This might be an issue in general when using dockercompose or docker in general. Currently I’ve checked the nginx config on onlyoffice and that one is standard ok, both the x-forwarded-host header as well as all other needed headers are proxied in correct way.

So my setup is basically a local dockercompose with some services including: alfresco, share, postgress, solr6, activemq and the onlyoffice-document-server where I’ve configured it in bridge network mode for containers to communicate with eachother.

Problem now with the safe usecase from the onlyoffice session on the share service is indeed related to the fqdn within the url parameter requested with the callback to Alfresco.

So example below I’ve executed on the onlyoffice container towards alfresco where it failed with the 500 error {“error”:1, “message”:“00070157 Exception in Transaction.”}. Also taking into account the md5 hash and ingress/nginx check on the secret/validitty.

curl -vvv -X POST \
  -H "Content-Type: application/json" \
  -d '{"key":"BVhhGSdYq4tjwEHwg6-8W-sJHGwxPrOfRsTKFsPFZr0","status":2,"url":"http://localhost:8085/cache/files/data/BVhhGSdYq4tjwEHwg6-8W-sJHGwxPrOfRsTKFsPFZr0_1030/output.docx/output.docx?md5=NPWiOUqo2ap6O3sGsOMFIQ&expires=1736248925&shardkey=BVhhGSdYq4tjwEHwg6-8W-sJHGwxPrOfRsTKFsPFZr0&filename=output.docx","changesurl":"http://localhost:8085/cache/files/data/BVhhGSdYq4tjwEHwg6-8W-sJHGwxPrOfRsTKFsPFZr0_1030/changes.zip/changes.zip?md5=-sKLHoJo4Y7jlE-hAlt51A&expires=1736248925&shardkey=BVhhGSdYq4tjwEHwg6-8W-sJHGwxPrOfRsTKFsPFZr0&filename=changes.zip","history":{"serverVersion":"8.1.1","changes":[{"created":"2025-01-07 11:06:52","user":{"id":"admin","name":"Administrator "}}]},"users":["admin"],"actions":[{"type":0,"userid":"admin"}],"lastsave":"2025-01-07T11:06:54.000Z","notmodified":false,"filetype":"docx"}' \
  "http://localhost:8080/alfresco/s/parashift/onlyoffice/callback?nodeRef=workspace://SpacesStore/7f8ac908-32bf-42be-a6a3-3cbe21edb429&cb_key=BVhhGSdYq4tjwEHwg6-8W-sJHGwxPrOfRsTKFsPFZr0"

After changing the url and the changesurl to ‘onlyoffice-document-server’ and changed external port to 80, as well as:

  • Aligning the same url on the “Document Editing Service address” in the onlyoffice config on Alfresco
  • Added the ‘onlyoffice-document-server’ as host on local hosts file on docker host pointing to 127.0.0.1

This all resulted in correct safe of the document, because callback succeeded. Alfresco actively calls onlyoffice on the http://onlyoffice-document-server/cache/files/data/BVhhGSdYq4tjwEHwg6-8W-sJHGwxPrOfRsTKFsPFZr0_1030/output.docx/output.docx endpoint to fetch the cached output.docx file and store this in repository. This seems a backend flow, but apparently the browser itself, where the onlyoffice session is open, also uses this same config ("http://onlyoffice-document-server) to fetch other data from the onlyoffice service. This seems to be a mixup in config.

Below config depict the full config on the OO plugin on Alfresco. As mentioned the uri http://onlyoffice-document-server is also resolvable from the local host itself, otherwise the browser/client could not start the editor.bin and subsequent other file fetched from the OO service. So DNS needs to be aligned internal/external to get this working

Alfresco-config-OO

So, do I understand correctly that the issue has been resolved?
Do you have any additional questions?

Yes, problem here is that we’re running the stuff in docker in bridgemode, so we only have communication (hostname resolve) within containers only. So using ‘onlyoffice-document-server’ as a hostname or containername in docker means we can only resolve this internally with the bridge itself and not from the ‘outside’ of the container.

The config claims the generic config is only used for externally and the ‘Document Editing Service address for internal requests from the server’ config would only be used for internal flow/comms. Apparently this is not the case, the moment I change hostname on ‘Document Editing Service address’ also internall communication is affected, ie ‘onlyoffice-document-server/cache/files/data/…’. There is no way to differentiate hostnames between external access towards the Document Editing Service and the internal flow between Document Editing Service and Alfresco repo.

So changing the ‘Document Editing Service’ to external resolvable hostname,ie externaldns.local, will affect the internal flow as well, ie. externaldns.local/cache/files/data/…

To overcome this issue I’ve created a entry in the hosts file on my host machine with 127.0.0.1 pointing to onlyoffice-document-server hostname to access OO-Editing Service. Otherwise the browser cannot open session to OO Editing Service.

I would expect the config being separate between external and internall flows from a DNS or host perspective

Please provide your yaml file as well as proxy config for reference