With Exalate - it is possible to setup a synchronization between a public and a private instance without opening firewall ports.

  • Public means that the Instance is accessible from the private network.
  • Private means that the Instance is behind the firewall and is not accessible (is on a private network) from the public instance.

The main difference between private and public connection types is whether the HTTP/HTTPS requests are initiated from one side or from both sides.

In the private-public connection all communication over TCP/IP is initiated from the private side. In this case, the public side never sends HTTP requests. It only answers requests sent from the instance, located behind the firewall. It might take a couple extra seconds before synchronization continues. 

The private instance (one behind the firewall) requests for any changes either every 20 seconds, or whenever there are changes to sync towards the public instance. This explains the delay in sync in case that there are no changes in the private to push to the public. This parameter can be adapted, but 20 seconds seems to be an acceptable delay.

For better performance, we recommend to configure one connection. You can add multiple conditions to the Sync Rules to cover all the affected projects.

In the public-public connection requests are initiated from both sides.


Exalate has the set of messages (supported by private-public communication).

The table below details the messages that are sent between the nodes

messagewhen performedhow public instance sends ithow private instance sends it
node infoinstance is saved / connection is testedprivate instance requests public's node info, the public instance responds to itis sent via the email when you set up private/public sync
sync requestsomething was changed on an issue, which is under syncprivate instance periodically polls, whether the public instance has any sync requestsprivate instance sends sync requests directly
sync responsesynchronization has been processed by the receiving sideprivate instance periodically polls, whether the public instance has any sync responsesprivate instance sends sync responses directly
sync error responsesynchronization failed on the receiving side due to the sending side's mistakeprivate instance periodically polls, whether the public instance has any sync error responsesprivate instance sends sync error responses directly
blob requestan attachment was added to an issue, which is under syncprivate instance periodically polls, whether the public instance has any attachments to be sentprivate instance sends blob requests directly
blob responsean attachment has been received by receiving sideprivate instance periodically polls, whether the public instance received an attachment being syncedprivate instance sends blob responses directly
blob error responsesynchronization of an attachment failed on receiving side due to sending side's mistakeprivate instance periodically polls, whether the public instance had any problems with receiving an attachmentprivate instance sends blob error responses directly