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:
@@ -459,6 +459,11 @@ func RenderFileBrowserConfigKept(paths []settings.StoragePath, importSource bool
|
||||
server:
|
||||
port: 80
|
||||
baseURL: "/"
|
||||
# R-1018: the address OnlyOffice's server uses to fetch and save a document (FileBrowser's onlyOffice.go builds both
|
||||
# URLs from it at gtstef/filebrowser:1.5.6-stable; it is used by integrations only). Without it FileBrowser hands
|
||||
# OnlyOffice https://files.<domain> — a trip out through the tunnel and back, which failed (403) on demo-hp.
|
||||
# Pinned by TestFileBrowserConfig_R1018_InternalURLIsTheContainer.
|
||||
internalUrl: "http://filebrowser:80"
|
||||
# The box updates FileBrowser (the pinned image); a household cannot, so its „An update is available!" is noise.
|
||||
# backend/common/settings/structs.go:51 at gtstef/filebrowser:1.5.6-stable (v0.321.0).
|
||||
disableUpdateCheck: true
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package infra
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@@ -248,6 +250,33 @@ func TestFileBrowserRender(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// R-1018: OnlyOffice's server fetches and saves a FileBrowser document at server.internalUrl. The consequence pinned:
|
||||
// that URL names the FileBrowser container on port 80 — the name OnlyOffice resolves on traefik-public — and the
|
||||
// container really is called that in the compose. RED-PROOF: drop the config line (FileBrowser then hands OnlyOffice
|
||||
// the public https://files.<domain>, 403 on demo-hp 2026-10-18) or rename the container → this fails.
|
||||
func TestFileBrowserConfig_R1018_InternalURLIsTheContainer(t *testing.T) {
|
||||
var cfg struct {
|
||||
Server struct {
|
||||
InternalURL string `yaml:"internalUrl"`
|
||||
Port int `yaml:"port"`
|
||||
} `yaml:"server"`
|
||||
}
|
||||
if err := yaml.Unmarshal([]byte(RenderFileBrowserConfig([]settings.StoragePath{{Path: "/mnt/hdd_1"}}, true)), &cfg); err != nil {
|
||||
t.Fatalf("config does not parse: %v", err)
|
||||
}
|
||||
u, err := url.Parse(cfg.Server.InternalURL)
|
||||
if err != nil || u.Scheme != "http" || u.Hostname() == "" {
|
||||
t.Fatalf("server.internalUrl = %q — OnlyOffice would be handed the public files address", cfg.Server.InternalURL)
|
||||
}
|
||||
if u.Port() != strconv.Itoa(cfg.Server.Port) {
|
||||
t.Errorf("server.internalUrl port %q, FileBrowser listens on %d", u.Port(), cfg.Server.Port)
|
||||
}
|
||||
compose := RenderFileBrowserCompose("demo-felhom.eu", nil)
|
||||
if !strings.Contains(compose, "container_name: "+u.Hostname()+"\n") {
|
||||
t.Errorf("server.internalUrl names %q, which is not the FileBrowser container:\n%s", u.Hostname(), compose)
|
||||
}
|
||||
}
|
||||
|
||||
// R-1126 (D11 = A): FileBrowser starts OFF traefik-public — the box joins it there only after this run's default login
|
||||
// is checked — and on its own network, which the controller joins for that check. v0.327.1: NO Traefik labels — the
|
||||
// route is the file-provider route by NAME (a label route kept the address Traefik chose at container start, on the
|
||||
|
||||
Reference in New Issue
Block a user