v0.331.0: OnlyOffice opens and saves from FileBrowser and Nextcloud; FileBrowser back at once after a restart (R-1018)
gates / gates (push) Successful in 48s
gates / gates (push) Successful in 48s
FileBrowser config carries server.internalUrl http://filebrowser:80 (OnlyOffice fetched the public files address and got 403); Nextcloud's DocumentServerInternalUrl gets its trailing slash (every save was lost: http://onlyoffice:80cache/...); RestartStack("filebrowser") runs the R-1126 gate at once (files.<domain> was 502 for up to 5 min after the link switched). Each red-proofed. MinAgent 0.158.1.
This commit is contained in:
@@ -29,41 +29,7 @@ func (h *OnlyOfficeNextcloudHandler) Apply(ac *ApplyContext) error {
|
||||
}
|
||||
|
||||
publicURL := fmt.Sprintf("https://%s.%s", subdomain, ac.Domain)
|
||||
internalURL := "http://onlyoffice:80"
|
||||
|
||||
// Install and configure OnlyOffice app in Nextcloud
|
||||
commands := []struct {
|
||||
args []string
|
||||
tolerate string // substring in output to tolerate as success
|
||||
}{
|
||||
{
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "app:install", "onlyoffice"},
|
||||
tolerate: "already installed",
|
||||
},
|
||||
{
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "app:enable", "onlyoffice"},
|
||||
},
|
||||
{
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "config:app:set", "onlyoffice", "DocumentServerUrl", "--value=" + publicURL},
|
||||
},
|
||||
{
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "config:app:set", "onlyoffice", "DocumentServerInternalUrl", "--value=" + internalURL},
|
||||
},
|
||||
{
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "config:app:set", "onlyoffice", "jwt_secret", "--value=" + jwtSecret},
|
||||
},
|
||||
{
|
||||
// StorageUrl: tells OO Document Server where to reach Nextcloud internally for file callbacks.
|
||||
// Trailing slash is critical — NC's OO connector does string replacement of the server URL
|
||||
// (which ends with /) with StorageUrl. Without trailing slash, "/apps/..." merges into hostname.
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "config:app:set", "onlyoffice", "StorageUrl", "--value=http://nextcloud/"},
|
||||
},
|
||||
{
|
||||
// Add internal hostname to trusted_domains so OO Document Server callbacks
|
||||
// (arriving with Host: nextcloud) are not rejected by Nextcloud.
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "config:system:set", "trusted_domains", "10", "--value=nextcloud"},
|
||||
},
|
||||
}
|
||||
commands := nextcloudApplyCommands(publicURL, jwtSecret)
|
||||
|
||||
for _, cmd := range commands {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||
@@ -107,3 +73,52 @@ func (h *OnlyOfficeNextcloudHandler) Revoke(ac *ApplyContext) error {
|
||||
ac.Logger.Printf("[INFO] [integrations] OnlyOffice integration revoked from Nextcloud")
|
||||
return nil
|
||||
}
|
||||
|
||||
// occCommand is one occ call of the apply; tolerate is a substring of its output that counts as success.
|
||||
type occCommand struct {
|
||||
args []string
|
||||
tolerate string
|
||||
}
|
||||
|
||||
// The two addresses OnlyOffice and Nextcloud use to reach each other inside the box. BOTH end with "/": Nextcloud's
|
||||
// OnlyOffice connector appends paths to them („converter", „cache/files/…", „apps/onlyoffice/track"). R-1018,
|
||||
// measured on demo-hp 2026-10-18: DocumentServerInternalUrl without the slash made Nextcloud fetch
|
||||
// http://onlyoffice:80cache/files/… — every save failed („Track: … status 2 error") while the editor said
|
||||
// „All changes saved". Pinned by TestNextcloudApply_R1018_InternalAddressesTakeAPath.
|
||||
const (
|
||||
ncDocServerInternalURL = "http://onlyoffice:80/"
|
||||
ncStorageURL = "http://nextcloud/"
|
||||
)
|
||||
|
||||
// nextcloudApplyCommands installs and configures the OnlyOffice app in Nextcloud.
|
||||
func nextcloudApplyCommands(publicURL, jwtSecret string) []occCommand {
|
||||
return []occCommand{
|
||||
{
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "app:install", "onlyoffice"},
|
||||
tolerate: "already installed",
|
||||
},
|
||||
{
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "app:enable", "onlyoffice"},
|
||||
},
|
||||
{
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "config:app:set", "onlyoffice", "DocumentServerUrl", "--value=" + publicURL},
|
||||
},
|
||||
{
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "config:app:set", "onlyoffice", "DocumentServerInternalUrl", "--value=" + ncDocServerInternalURL},
|
||||
},
|
||||
{
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "config:app:set", "onlyoffice", "jwt_secret", "--value=" + jwtSecret},
|
||||
},
|
||||
{
|
||||
// StorageUrl: tells OO Document Server where to reach Nextcloud internally for file callbacks.
|
||||
// Trailing slash is critical — NC's OO connector does string replacement of the server URL
|
||||
// (which ends with /) with StorageUrl. Without trailing slash, "/apps/..." merges into hostname.
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "config:app:set", "onlyoffice", "StorageUrl", "--value=" + ncStorageURL},
|
||||
},
|
||||
{
|
||||
// Add internal hostname to trusted_domains so OO Document Server callbacks
|
||||
// (arriving with Host: nextcloud) are not rejected by Nextcloud.
|
||||
args: []string{"docker", "exec", "-u", "www-data", "nextcloud", "php", "occ", "config:system:set", "trusted_domains", "10", "--value=nextcloud"},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user