W1 — rclone WebDAV mount (docker compose) + smoke + docs #54

Closed
opened 2026-09-16 22:20:44 +01:00 by eSlider · 1 comment
Owner

Эпик: #53

W1 — rclone WebDAV mount (docker compose) + smoke + docs

Цель

Смонтировать OnlyOffice WebDAV через rclone и доказать, что он работает (чтение/запись).

Факты

  • Сайдкар oo-webdav → http://172.17.0.1:8098, префикс /webdav, Basic-auth OO-кредами.
  • rclone v1.60.1 на хосте. Рут показывает Dokumente der Projekte/Fibu EDL/....

Работа

  1. deploy/docker-compose.rclone-webdav.yml — сервис rclone-webdav (image rclone/rclone):
    rclone mount :webdav: /mnt/onlyoffice --vfs-cache-mode writes --allow-other ...,
    cap_add: [SYS_ADMIN], devices: [/dev/fuse], env из .env (только имена в .env.example).
    Не systemd.
  2. Smoke: rclone lsf webdav: / rclone ls, скопировать тестовый файл на WebDAV, прочитать
    обратно, сверить содержимое, удалить. Зафиксировать вывод.
  3. docs/rclone-webdav.md: конфиг, команды, ограничения.

Критерии (нет теста — не работает)

  • docker compose -f deploy/docker-compose.rclone-webdav.yml up -d поднимает mount; rclone ls видит дерево.
  • Round-trip write→read→delete подтверждён выводом; тестовый файл удалён.
  • Секретов в git нет; только compose.
Эпик: #53 ## W1 — rclone WebDAV mount (docker compose) + smoke + docs ### Цель Смонтировать OnlyOffice WebDAV через `rclone` и доказать, что он работает (чтение/запись). ### Факты - Сайдкар `oo-webdav` → `http://172.17.0.1:8098`, префикс `/webdav`, Basic-auth OO-кредами. - `rclone` v1.60.1 на хосте. Рут показывает `Dokumente der Projekte/Fibu EDL/...`. ### Работа 1. `deploy/docker-compose.rclone-webdav.yml` — сервис `rclone-webdav` (image `rclone/rclone`): `rclone mount :webdav: /mnt/onlyoffice --vfs-cache-mode writes --allow-other ...`, `cap_add: [SYS_ADMIN]`, `devices: [/dev/fuse]`, env из `.env` (только имена в `.env.example`). **Не systemd.** 2. Smoke: `rclone lsf webdav:` / `rclone ls`, скопировать тестовый файл на WebDAV, прочитать обратно, сверить содержимое, удалить. Зафиксировать вывод. 3. `docs/rclone-webdav.md`: конфиг, команды, ограничения. ### Критерии (нет теста — не работает) - [ ] `docker compose -f deploy/docker-compose.rclone-webdav.yml up -d` поднимает mount; `rclone ls` видит дерево. - [ ] Round-trip write→read→delete подтверждён выводом; тестовый файл удалён. - [ ] Секретов в git нет; только compose.
Author
Owner

W1 — rclone WebDAV mount (docker compose) + smoke + docs (#54)

PR #59: #59
Ветка feat/rclone-webdav#54 · коммит 6549fbf (base main). Не мержу и не закрываю.

Что сделано

  • deploy/docker-compose.rclone-webdav.yml — сервис rclone-webdav
    (образ rclone/rclone), FUSE-монтирование WebDAV-дерева OnlyOffice в
    /mnt/onlyoffice. Только compose, без systemd.
    • Remote on-the-fly :webdav: + --webdav-url/--webdav-user/--webdav-pass
      (значения из env).
    • На старте контейнер пишет rclone.conf ([webdav]) — чтобы
      docker exec rclone-webdav rclone ls webdav: работал без флагов.
    • Флаги: --vfs-cache-mode writes, --cache-dir /cache,
      --dir-cache-time 1m, --allow-other, --allow-non-empty.
    • FUSE: cap_add: [SYS_ADMIN], devices: [/dev/fuse],
      security_opt: apparmor:unconfined.
    • Тома: onlyoffice-mnt → /mnt/onlyoffice, rclone-cache → /cache.
    • Env (только имена): ONLYOFFICE_USER, ONLYOFFICE_PASSWORD
      (алиас ONLYOFFICE_PASS), ONLYOFFICE_WEBDAV_URL (дефолт
      http://172.17.0.1:8098/webdav).
  • docs/rclone-webdav.md — конфиг, команды, smoke-вывод, ограничения.
  • .env.example — добавлены имена ONLYOFFICE_WEBDAV_URL и пояснение.

Smoke — реальные команды и вывод

Запуск:

$ set -a; . .secrets/oo.env; set +a
$ docker compose -f deploy/docker-compose.rclone-webdav.yml up -d
 Network rclone-webdav_default Created
 Volume rclone-webdav_onlyoffice-mnt Created
 Volume rclone-webdav_rclone-cache Created
 Container rclone-webdav Started

$ docker compose -f deploy/docker-compose.rclone-webdav.yml ps
NAME            IMAGE                  STATUS
rclone-webdav   rclone/rclone:latest   Up

Mount внутри контейнера:

$ docker exec rclone-webdav sh -c 'mount | grep onlyoffice; ls /mnt/onlyoffice'
:webdav{...}: on /mnt/onlyoffice type fuse.rclone (rw,nosuid,nodev,relatime,...,allow_other)
Dokumente der Projekte
Favoriten
Für mich freigegeben
Gemeinsame Dokumente
Meine Dokumente
Papierkorb
Privater Raum
Zuletzt verwendet

Дерево:

$ docker exec rclone-webdav rclone ls webdav:
  5357109 Meine Dokumente/ONLYOFFICE-Audiobeispiel.mp3
    44805 Meine Dokumente/ONLYOFFICE-Beispiel-Tabellenblatt.xlsx
    58988 Meine Dokumente/ONLYOFFICE-Beispieldokument.docx
  2154431 Meine Dokumente/ONLYOFFICE-Beispielformular.pdf
  1130588 Meine Dokumente/ONLYOFFICE-Beispielpräsentation.pptx
  ...

Round-trip write → read → delete (файл во временной папке WebDAV):

$ TS=20260916-212459
$ docker exec rclone-webdav sh -c "mkdir -p '/mnt/onlyoffice/Meine Dokumente/rclone-smoke-$TS' \
    && printf 'rclone-webdav round-trip $TS\n' \
       > '/mnt/onlyoffice/Meine Dokumente/rclone-smoke-$TS/hello.txt'"

# независимая проверка с хоста по HTTP (мимо монтирования):
GET /webdav/Meine%20Dokumente/rclone-smoke-$TS/hello.txt -> 200 (через 7s)
server bytes: rclone-webdav round-trip 20260916-212459

# чтение обратно через монтирование:
mount read: rclone-webdav round-trip 20260916-212459
MATCH: yes

# удаление через монтирование:
$ docker exec rclone-webdav rm -f "/mnt/onlyoffice/Meine Dokumente/rclone-smoke-$TS/hello.txt"
GET hello.txt -> 404 (через 1s, удалён)

# пустой каталог:
$ docker exec rclone-webdav rclone rmdir "webdav:Meine Dokumente/rclone-smoke-$TS"
PROPFIND rclone-smoke-20260916-212459/ -> 404
no rclone-smoke leftovers

Итог: запись, чтение и удаление файла подтверждены; файл удалён.

Проверка

  • docker compose -f deploy/docker-compose.rclone-webdav.yml config — OK.
  • gitleaks (diff vs origin/main) — no leaks. Секретов нет, env только
    именами, .env в .gitignore.

Блокеры / грабли

  • Блокеров нет.
  • Ограничение (задокументировано): rmdir через mount до сервера не доходит —
    удалять каталоги напрямую rclone rmdir webdav:<path> / rclone purge.
  • VFS write-back ~5s: сервер проверять опросом, а не сразу после записи.
  • FUSE: SYS_ADMIN + /dev/fuse; сайдкар слушает только docker-bridge
    172.17.0.1:8098.
## W1 — rclone WebDAV mount (docker compose) + smoke + docs (#54) PR #59: https://git.produktor.io/eSlider/go-onlyoffice/pulls/59 Ветка `feat/rclone-webdav#54` · коммит `6549fbf` (base `main`). Не мержу и не закрываю. ### Что сделано - `deploy/docker-compose.rclone-webdav.yml` — сервис `rclone-webdav` (образ `rclone/rclone`), FUSE-монтирование WebDAV-дерева OnlyOffice в `/mnt/onlyoffice`. Только compose, без systemd. - Remote on-the-fly `:webdav:` + `--webdav-url/--webdav-user/--webdav-pass` (значения из env). - На старте контейнер пишет `rclone.conf` (`[webdav]`) — чтобы `docker exec rclone-webdav rclone ls webdav:` работал без флагов. - Флаги: `--vfs-cache-mode writes`, `--cache-dir /cache`, `--dir-cache-time 1m`, `--allow-other`, `--allow-non-empty`. - FUSE: `cap_add: [SYS_ADMIN]`, `devices: [/dev/fuse]`, `security_opt: apparmor:unconfined`. - Тома: `onlyoffice-mnt` → `/mnt/onlyoffice`, `rclone-cache` → `/cache`. - Env (только имена): `ONLYOFFICE_USER`, `ONLYOFFICE_PASSWORD` (алиас `ONLYOFFICE_PASS`), `ONLYOFFICE_WEBDAV_URL` (дефолт `http://172.17.0.1:8098/webdav`). - `docs/rclone-webdav.md` — конфиг, команды, smoke-вывод, ограничения. - `.env.example` — добавлены имена `ONLYOFFICE_WEBDAV_URL` и пояснение. ### Smoke — реальные команды и вывод Запуск: ```text $ set -a; . .secrets/oo.env; set +a $ docker compose -f deploy/docker-compose.rclone-webdav.yml up -d Network rclone-webdav_default Created Volume rclone-webdav_onlyoffice-mnt Created Volume rclone-webdav_rclone-cache Created Container rclone-webdav Started $ docker compose -f deploy/docker-compose.rclone-webdav.yml ps NAME IMAGE STATUS rclone-webdav rclone/rclone:latest Up ``` Mount внутри контейнера: ```text $ docker exec rclone-webdav sh -c 'mount | grep onlyoffice; ls /mnt/onlyoffice' :webdav{...}: on /mnt/onlyoffice type fuse.rclone (rw,nosuid,nodev,relatime,...,allow_other) Dokumente der Projekte Favoriten Für mich freigegeben Gemeinsame Dokumente Meine Dokumente Papierkorb Privater Raum Zuletzt verwendet ``` Дерево: ```text $ docker exec rclone-webdav rclone ls webdav: 5357109 Meine Dokumente/ONLYOFFICE-Audiobeispiel.mp3 44805 Meine Dokumente/ONLYOFFICE-Beispiel-Tabellenblatt.xlsx 58988 Meine Dokumente/ONLYOFFICE-Beispieldokument.docx 2154431 Meine Dokumente/ONLYOFFICE-Beispielformular.pdf 1130588 Meine Dokumente/ONLYOFFICE-Beispielpräsentation.pptx ... ``` Round-trip write → read → delete (файл во временной папке WebDAV): ```text $ TS=20260916-212459 $ docker exec rclone-webdav sh -c "mkdir -p '/mnt/onlyoffice/Meine Dokumente/rclone-smoke-$TS' \ && printf 'rclone-webdav round-trip $TS\n' \ > '/mnt/onlyoffice/Meine Dokumente/rclone-smoke-$TS/hello.txt'" # независимая проверка с хоста по HTTP (мимо монтирования): GET /webdav/Meine%20Dokumente/rclone-smoke-$TS/hello.txt -> 200 (через 7s) server bytes: rclone-webdav round-trip 20260916-212459 # чтение обратно через монтирование: mount read: rclone-webdav round-trip 20260916-212459 MATCH: yes # удаление через монтирование: $ docker exec rclone-webdav rm -f "/mnt/onlyoffice/Meine Dokumente/rclone-smoke-$TS/hello.txt" GET hello.txt -> 404 (через 1s, удалён) # пустой каталог: $ docker exec rclone-webdav rclone rmdir "webdav:Meine Dokumente/rclone-smoke-$TS" PROPFIND rclone-smoke-20260916-212459/ -> 404 no rclone-smoke leftovers ``` Итог: запись, чтение и удаление файла подтверждены; файл удалён. ### Проверка - `docker compose -f deploy/docker-compose.rclone-webdav.yml config` — OK. - gitleaks (diff vs `origin/main`) — `no leaks`. Секретов нет, env только именами, `.env` в `.gitignore`. ### Блокеры / грабли - Блокеров нет. - Ограничение (задокументировано): `rmdir` через mount до сервера не доходит — удалять каталоги напрямую `rclone rmdir webdav:<path>` / `rclone purge`. - VFS write-back ~5s: сервер проверять опросом, а не сразу после записи. - FUSE: `SYS_ADMIN` + `/dev/fuse`; сайдкар слушает только docker-bridge `172.17.0.1:8098`.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: eSlider/go-onlyoffice#54