Документация
Вся документация

Сервер A4 в сети организации

Редакторы A4 Документ, A4 Таблица и A4 Презентация работают в браузере, а сам сервер стоит в сети вашей организации. Файлы и учётные записи остаются у вас: сервер спрашивает их у вашей системы и ничего не хранит. Комплект раздаётся архивами образов Docker и ставится командой docker load — интернет и доступ к Docker Hub при установке не нужны.

Комплект 2026-10-17. Изменена только A4 Таблица (F1 2026.4.0.20261017) — исправление безопасности веб-режима: гостевым каналам закрыто чтение файлов сервера, WOPI — только к разрешённому хосту. Обновиться всем.
Презентации. Редактор A4 Презентация входит в комплект: образ p2-server:2026.4.0.29, установка — в разделе «A4 Презентация» ниже. Для Битрикс24 и других WOPI-систем все три редактора запускаются файлом docker-compose-wopi.yml — см. «Режим WOPI».

Что умеет

  • A4 Таблица: книги .xlsx, .xlsm, .xlsb открываются и правятся в браузере;
  • A4 Документ: файлы .docx открываются и правятся в браузере;
  • оба редактора поднимаются одним файлом docker-compose.yml и работают независимо: падение одного не мешает другому;
  • отдельного входа в редактор нет: пользователя узнаёт ваша система по той же браузерной куке;
  • правка возвращается в вашу систему, если вы разрешили сохранение.

Как работает

  • Кабинки. На каждого пользователя и каждый файл сервер поднимает отдельный процесс со своим ядром — «кабинку». Браузер получает страницу редактора и дальше разговаривает с кабинкой по WebSocket.
  • Где живут файлы. Файлы и пользователи хранятся в вашей системе. Сервер забирает файл по номеру, а рабочие копии держит в своём каталоге, пока файл открыт.
  • Ссылка на файл. Для таблиц: https://ваш-домен/f1/?doc=<номер вложения>. Для документов: https://ваш-домен/a4/?doc=<номер вложения>.

Требования

  • Linux x86-64 и Docker — подойдёт любой современный, проверено на 28.x;
  • память: 2 ГБ на сервер плюс примерно 250 МБ на каждую открытую книгу или документ;
  • обратный прокси с поддержкой WebSocket, если сервер смотрит в интернет.
Только x86-64. Образы собраны под linux/amd64, это не мультиархитектурная сборка. На хосте arm64 они не пойдут. Поэтому в docker-compose.yml стоит строка platform: linux/amd64: Docker откажет понятно, а не возьмёт молча не то.

Состав комплекта

ФайлЧто это
F1-2026.4.0.20261017-webhost-docker.tar.gzобраз A4 Таблица, тег f1-webhost:2026.4.0.20261017
A4-2026.4.0.38487392181-webhost-docker.tar.gzобраз A4 Документ, тег a4-webhost:2026.4.0.38487392181
SHA256SUMSконтрольные суммы всех файлов комплекта
docker-compose.ymlзапуск трёх редакторов сразу (A4 Документ, A4 Таблица, A4 Презентация)
nginx-primer.confобратный прокси на три редактора за одним именем
OTKAT.mdоткат на прежнюю версию и что делать с рабочими копиями
F1-2026.4.0.20261017-webhost-INSTALL.mdподробная установка и настройка A4 Таблица
A4-2026.4.0.38487392181-webhost-INSTALL.mdто же для A4 Документа
P2-2026.4.0.29-server-docker.tar.gzобраз A4 Презентация, тег p2-server:2026.4.0.29
P2-2026.4.0.29-server-INSTALL.mdто же для A4 Презентации
docker-compose-wopi.ymlзапуск трёх редакторов в режиме WOPI (Битрикс24, Nextcloud)
discovery-merge.mjsобщий адрес discovery таблиц и документов для режима WOPI
nginx-wopi.confобратный прокси для режима WOPI
BITRIX24.mdпошаговая установка для коробочного Битрикс24
README.mdописание комплекта

Установка

1. Сверьте и загрузите образы

Интернет на этом шаге не нужен: образы берутся из архивов комплекта.

# сверить, что архивы скачались целиком
sha256sum -c SHA256SUMS            # на маке: shasum -a 256 -c SHA256SUMS

# загрузить образы
docker load -i F1-2026.4.0.20261017-webhost-docker.tar.gz
docker load -i A4-2026.4.0.38487392181-webhost-docker.tar.gz

2. Укажите адреса вашей системы

В docker-compose.yml у каждого редактора поправьте два адреса вашей системы — «кто это» и «файл по номеру»:

name: a4-server

services:
  f1:
    image: f1-webhost:2026.4.0.20261017
    platform: linux/amd64
    restart: unless-stopped
    ports: ["127.0.0.1:8092:8092"]
    volumes: ["f1-cabins:/data/cabins"]
    command:
      - --base-path
      - /f1
      - --max-cabins
      - "12"
      - --idle-min
      - "20"
      # Адреса вашей системы: «кто это» и «файл по номеру».
      - --auth-url
      - https://ваша-система/v1/me
      - --attach-url
      - https://ваша-система/v1/attachments/{id}/content

  a4:
    image: a4-webhost:2026.4.0.38487392181
    platform: linux/amd64
    restart: unless-stopped
    ports: ["127.0.0.1:8090:8090"]
    volumes: ["a4-cabins:/data/cabins"]
    command:
      - --base-path
      - /a4
      - --max-cabins
      - "12"
      - --idle-min
      - "20"
      - --auth-url
      - https://ваша-система/v1/me
      - --attach-url
      - https://ваша-система/v1/attachments/{id}/content

volumes:
  f1-cabins:
  a4-cabins:
Значение флага — через пробел. В docker-compose.yml это две строки списка: - --auth-url и отдельной строкой сам адрес. Так же записываются и остальные флаги со значением — как в примере выше.

3. Запустите

docker compose up -d

4. Проверьте

curl http://127.0.0.1:8092/f1/health     # таблицы
curl http://127.0.0.1:8090/a4/health     # документы

В ответе должно быть:

  • "status": "ok";
  • верное "product" — f1 или a4;
  • пустой список "warnings" и "behind": null внутри "version" — редактор и вычислительное ядро из одного выпуска.

Если behind называет половину ("ядро" или "оболочка"), они разошлись больше чем на 6 часов, и такой образ ставить не нужно. Соседнее поле skewMin — справка: на сколько минут расходится время сборки половин. У годного образа это минуты, ровно ноль там ждать не нужно.

Если /f1/health отвечает 403, а /health в корне — 200, значит подпуть не применился: проверьте форму флагов.

Без docker compose

Каждый редактор можно запустить и отдельной командой. Рабочие копии в этом случае лежат в каталоге на диске:

# таблицы
sudo mkdir -p /srv/f1-cabins
docker run -d --name f1-webhost --restart unless-stopped \
  -p 127.0.0.1:8092:8092 \
  -v /srv/f1-cabins:/data/cabins \
  f1-webhost:2026.4.0.20261017 \
  --base-path /f1 --max-cabins 12 --idle-min 20 \
  --auth-url   'https://ваша-система/v1/me' \
  --attach-url 'https://ваша-система/v1/attachments/{id}/content'

# документы
sudo mkdir -p /srv/a4-cabins
docker run -d --name a4-webhost --restart unless-stopped \
  -p 127.0.0.1:8090:8090 \
  -v /srv/a4-cabins:/data/cabins \
  a4-webhost:2026.4.0.38487392181 \
  --base-path /a4 --max-cabins 12 --idle-min 20 \
  --auth-url   'https://ваша-система/v1/me' \
  --attach-url 'https://ваша-система/v1/attachments/{id}/content'

Настройки запуска

КлючЧто делаетПо умолчанию
--max-cabinsсколько файлов открыто одновременно64
--idle-minчерез сколько минут простоя гасить кабинку20
--base-pathподпуть, если редактор живёт не в корне доменанет
--warmсколько кабинок держать прогретыми0
--entryстендовый режим по токену, без авторизациинет

В примере docker-compose.yml стоит --max-cabins 12. Память считайте по требованиям: 2 ГБ плюс примерно 250 МБ на каждый открытый файл.

Обратный прокси

Если редактор открывают не с самого сервера, поставьте перед ним прокси с поддержкой WebSocket. Пример из комплекта (nginx-primer.conf) — оба редактора за одним именем: таблицы на /f1/, документы на /a4/. Сами редакторы слушают свои порты на машине (8092 и 8090) и наружу не смотрят; наружу смотрит только nginx.

server {
    listen 443 ssl;
    server_name office.ваша-организация.ru;

    ssl_certificate     /etc/ssl/certs/ваш.crt;
    ssl_certificate_key /etc/ssl/private/ваш.key;

    # Книга или документ целиком идут одним запросом: 1 МБ по умолчанию мало.
    client_max_body_size 64m;

    location /f1/ {
        proxy_pass http://127.0.0.1:8092;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Cookie $http_cookie;
        proxy_buffering off;
        proxy_read_timeout 3600s;
    }

    location /a4/ {
        proxy_pass http://127.0.0.1:8090;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Cookie $http_cookie;
        proxy_buffering off;
        proxy_read_timeout 3600s;
    }
}

Три строки обязательны: Upgrade и Connection — иначе редактор не соединится с сервером, Cookie — иначе он не узнает пользователя. Пути /f1/ и /a4/ обязаны совпадать с --base-path в docker-compose.yml: редактор строит по нему свои ссылки, и расхождение даёт пустую страницу.

Проверка снаружи:

curl -s https://office.ваша-организация.ru/f1/health
curl -s https://office.ваша-организация.ru/a4/health

Подключение к 1С, Битрикс24 и другим системам

Сервер не хранит ни пользователей, ни файлы. От вашей системы ему нужны два адреса, третий — если разрешаете сохранять:

АдресЗачемЧто должен вернуть
--auth-urlузнать, кто пришёл2xx и email или id, иначе 401 или 403
--attach-urlотдать файл по его номерусам файл тому, у кого есть право
тот же адрес с /replaceпринять правкупринять multipart с частью file

Браузерная кука пользователя проходит к этим адресам как есть, поэтому отдельного входа в редактор нет.

Системам, которые открывают файлы по WOPI (Битрикс24, Nextcloud и другие), нужен режим WOPI — раздел «Режим WOPI» ниже.

Если у вас 1С или Битрикс24

  • A4 для 1С — отдельный комплект со своим сервером и расширением для самой 1С. Если задача — открывать файлы из 1С, берите тот комплект: сервер в нём уже есть, и ставить этот не нужно.
  • A4 для Битрикс24 — решение «A4: документы, таблицы и презентации в Диске» из Маркетплейса 1С-Битрикс, только модуль портала. Ему нужен этот комплект в режиме WOPI: все три редактора и общий discovery поднимаются файлом docker-compose-wopi.yml, пошагово — в BITRIX24.md и в разделе «Режим WOPI».

Режим WOPI: Битрикс24, Nextcloud и другие

В этом режиме файлы и права остаются в вашей системе (WOPI-хозяине), редакторы забирают и сохраняют файл по протоколу WOPI. Все три редактора и общий адрес discovery таблиц и документов поднимаются одним файлом. A4 Таблица и A4 Документ подписывают запросы общим ключом, поэтому хозяин проверяет подписи обоих редакторов по одному discovery.

  1. Загрузите образы, как в шаге 1 установки.
  2. Рядом с docker-compose-wopi.yml создайте файл .env:
    PORTAL_URL=https://portal.example.ru     # адрес вашей системы, как его видит браузер
    EDITORS_URL=https://office.example.ru    # адрес этого сервера за обратным прокси
  3. Запустите: docker compose -f docker-compose-wopi.yml up -d.
  4. Поставьте перед редакторами nginx из nginx-wopi.conf с доверенным сертификатом HTTPS.
  5. Укажите адреса в вашей системе:
    https://office.example.ru/hosting/discovery       — таблицы и документы (F1 и A4)
    https://office.example.ru/p2/hosting/discovery    — презентации (P2)

Проверка на самой машине: curl -s http://127.0.0.1:8096/hosting/discovery | grep -o 'ext="[a-z]*"' | sort -u — в ответе docx, xlsx, xlsm, xlsb. Для коробочного Битрикс24 — пошагово на странице «A4 для Битрикс24» и в файле BITRIX24.md комплекта.

Руководство по установке для коробочного Битрикс24 — со схемой, листом планирования и снимками экрана: Открыть руководство. Откроется в редакторе A4 Документ в браузере; скачать документ можно там же: «Файл → Скачать».

Обновление и откат

Обновление

  1. Загрузите новый архив: docker load -i <новый архив>.
  2. Укажите новый тег образа в docker-compose.yml и поднимите заново: docker compose up -d. Если редактор запущен без compose — docker rm -f f1-webhost (или a4-webhost) и та же команда docker run с новым тегом.
  3. Проверьте /health: "status": "ok", пустой "warnings" и "behind": null.

Рабочие копии файлов лежат в примонтированном каталоге и переживают смену образа. Открытые в этот момент вкладки скажут «связь прервана» и вернутся сами, когда сервер поднимется; несохранённое при этом не теряется.

Прежние образы не удаляйте, пока новая версия не отработала хотя бы день: удалённый образ придётся снова везти архивом.

Откат

Откат — это замена тега образа в docker-compose.yml на прежний и перезапуск.

# 1. посмотреть, какие версии уже лежат на машине
docker images | grep -E 'f1-webhost|a4-webhost'

# 2. в docker-compose.yml заменить тег на прежний, например
#      image: f1-webhost:2026.4.0.20261017   →   image: f1-webhost:<прежний тег>
#    и поднять заново
docker compose up -d

# 3. проверить, что поднялось именно то
curl -s http://127.0.0.1:8092/f1/health
curl -s http://127.0.0.1:8090/a4/health

В ответе /health смотрите version — она обязана совпасть с тегом, на который откатились. Если не совпала, Docker взял другой образ из кэша: укажите тег полностью, без latest.

Рабочие копии при откате

Рабочие копии книг и документов лежат в именованных томах f1-cabins и a4-cabins. При откате они остаются — docker compose up -d их не трогает.

Совместимость томов между версиями не проверялась. Том содержит рабочие копии открытых файлов, а не ваш архив: исходные файлы всё время лежат в вашей системе, сервер их только забирает и отдаёт. Поэтому перед откатом тома лучше отложить.

Docker Compose добавляет к имени тома имя проекта (a4-server), поэтому сначала посмотрите точные имена:

# например: a4-server_f1-cabins и a4-server_a4-cabins
docker volume ls | grep cabins

Безопасный откат:

# 1. дать людям закрыть файлы (или дождаться --idle-min)
docker compose stop

# 2. отложить тома прежней версии, не удаляя
docker run --rm -v a4-server_f1-cabins:/from -v /srv/backup:/to alpine \
  tar -czf /to/f1-cabins-$(date +%F).tar.gz -C /from .
docker run --rm -v a4-server_a4-cabins:/from -v /srv/backup:/to alpine \
  tar -czf /to/a4-cabins-$(date +%F).tar.gz -C /from .

# 3. заменить тег на прежний и поднять
docker compose up -d

Если после отката редактор не открывает файл, а в журнале видна жалоба на рабочую копию, очистите том и откройте файл заново из вашей системы:

# контейнеры удаляются, тома остаются
docker compose down
# удаляются рабочие копии, не ваш архив
docker volume rm a4-server_f1-cabins
docker compose up -d

Чего откат не делает:

  • не возвращает файлы, которые люди успели сохранить в вашей системе: там хранение и версии — ваши, сервер их не держит;
  • не меняет настройки: адреса --auth-url и --attach-url остаются те же.

Безопасность

  • Файлы. Сервер не хранит ни пользователей, ни файлы: он спрашивает их у вашей системы. Право на файл проверяет ваша система по куке пользователя.
  • Сеть. Интернет нужен только при сборке образа; установка идёт из архивов. В работе серверу нужна сеть к вашей системе (адреса «кто это» и «файл по номеру»), а если включены возможности, которые ходят к внешним службам, — то и к ним.
  • Порты. В примере редакторы слушают только 127.0.0.1. Наружу их выводит ваш обратный прокси.
  • Ключи. Секреты передаются окружением, в образе их нет и быть не должно: docker run -d --env-file /etc/f1/agent.env … (для A4 Документа — /etc/a4/agent.env). Файл держите с правами 600 и владельцем root: он не попадает ни в образ, ни в журналы, ни на страницу.
  • Целостность. Перед загрузкой сверяйте архивы по SHA256SUMS.
  • Стендовый режим. Без --auth-url сервер поднимается стендом: вход по токену --entry <секрет>, все получают один и тот же файл-заготовку. Это годится для показа, но не для работы.

Типовые отказы

Что видноЧто делать
/health показывает faultТам же написана причина
behind в /health не nullРедактор и ядро из разных выпусков — такой образ не ставить
/f1/health отвечает 403, а /health — 200Подпуть не применился: флаг записан через =, а нужно через пробел
Страница открывается, но редактор пустойПочти всегда прокси без Upgrade и Connection; ещё — путь в прокси не совпадает с --base-path
403 при входеВаш адрес «кто это» не признал куку пользователя
Docker отказывается запускать образ на arm64Нужен хост x86-64: образы собраны только под linux/amd64

Журнал менеджера и кабинок: docker logs <имя контейнера> (при запуске через compose — docker compose logs f1 или docker compose logs a4).

Скачать

Сервер A4 в сети организациивыпуск 2026-10-17 · A4 Документ 2026.4.0.38487392181 · A4 Таблица 2026.4.0.20261017 · A4 Презентация 2026.4.0.29 · linux/amd64
Скачать комплект
ФайлРазмерНазначение
F1-2026.4.0.20261017-webhost-docker.tar.gz178 844 085 байтобраз A4 Таблица, linux/amd64
A4-2026.4.0.38487392181-webhost-docker.tar.gz169 421 618 байтобраз A4 Документ, linux/amd64
P2-2026.4.0.29-server-docker.tar.gz109 769 468 байтобраз A4 Презентация, linux/amd64
docker-compose.yml5 066 байтзапуск трёх редакторов сразу (A4 Документ, A4 Таблица, A4 Презентация)
docker-compose-wopi.yml6 986 байтзапуск в режиме WOPI: Битрикс24, Nextcloud
discovery-merge.mjs4 985 байтобщий discovery таблиц и документов (режим WOPI)
nginx-primer.conf3 560 байтобратный прокси на три редактора
nginx-wopi.conf1 688 байтобратный прокси для режима WOPI
BITRIX24.md11 389 байтпошаговая установка для коробочного Битрикс24
F1-2026.4.0.20261017-webhost-INSTALL.md7 194 байтустановка и настройка A4 Таблица
A4-2026.4.0.38487392181-webhost-INSTALL.md7 464 байтустановка и настройка A4
P2-2026.4.0.29-server-INSTALL.md7 255 байтустановка A4 Презентация: папка с презентациями, вход по паролю, совместная правка, режим WOPI
OTKAT.md5 578 байтоткат на прежнюю версию
README.md9 772 байтописание комплекта
SHA256SUMS1 293 байтконтрольные суммы всех файлов

A4 Презентация

A4 Презентация открывает презентации из папки на сервере: человек входит по имени и паролю, видит список файлов, правит вместе с другими и сохраняет обратно. Установка:

gunzip -c P2-2026.4.0.29-server-docker.tar.gz | docker load
mkdir -p /srv/p2 && chown 1000:1000 /srv/p2
docker run -d --name p2 --restart unless-stopped \
  -p 127.0.0.1:8094:8090 -v /srv/p2:/data \
  p2-server:2026.4.0.29 --entry "<общий пароль>"

Доводы передаются только через пробел (--entry "пароль", не --entry=пароль). Наружу A4 Презентация, как и остальные редакторы, выводите через обратный прокси с HTTPS.

Сведения о выпуске

ЧтоЗначение
A4 Таблицаверсия 2026.4.0.20261017, образ f1-webhost:2026.4.0.20261017
A4 Документверсия 2026.4.0.38487392181, образ a4-webhost:2026.4.0.38487392181
Архитектураlinux/amd64
A4 Презентацияверсия 2026.4.0.29, образ p2-server:2026.4.0.29; отдельной командой — см. P2-2026.4.0.29-server-INSTALL.md, в режиме WOPI — в составе docker-compose-wopi.yml

Контрольные суммы

9b2a5c703c0ad87e68f3d7bb393f20999d7b9a079fadef6213db94c3ea2e5337  A4-2026.4.0.38487392181-webhost-docker.tar.gz
730e7b4bbe134220c3be82f0b23d1434587009e992e6208a461bceb232248e8a  A4-2026.4.0.38487392181-webhost-INSTALL.md
137e5ab2ced33d4caf79bbfe45aa318498ffb4c2507838380b57c4f2b240350b  BITRIX24.md
72e7e3f314b6e682b4bff5c6c0815715388bdbeb4a861d16591b351f71ae0ef2  discovery-merge.mjs
bf0fa87034a61fd4f6ee65776c20ed7245da62be8066d10d9c145ae5de15183e  docker-compose-wopi.yml
857816be52658201b5614498b8f33eeb8b3a802bb09aeb7dac2de3098b7427d0  docker-compose.yml
78ae1640260b36a03e2d398277cd1c94653d0299f154e0a9b6bd06926ca8096d  F1-2026.4.0.20261017-webhost-docker.tar.gz
95104aef5f5eb303d55d016e822d7a48a3e279713589c04122b79146e181da7a  F1-2026.4.0.20261017-webhost-INSTALL.md
a66b093ff9f5965ee4dab193f499adaa02d9aa0c9de10d8a99c4a983fe92f55f  nginx-primer.conf
52383361035052a184c022fc1466a46d7346f8497e98d557153ff6df91774427  nginx-wopi.conf
2cb49f22a6c1c1092a5a4ce49dac37831d5f175d2ce75aa8848b68c35d5480d3  OTKAT.md
9e4d5f247dcd1ab54595902e3d970b6fa06e59b3a402b3b2b4abd0dae1cdd609  P2-2026.4.0.29-server-docker.tar.gz
cc59d76483bcb9cbe229960a038ce976113169434e1afdf5407e38e88d5fb0f3  P2-2026.4.0.29-server-INSTALL.md
473e27c7f997e82a90031d2e9f1937b94183ff589770bb78b0ac4e81f737eeeb  README.md

Проверка комплекта после скачивания:

shasum -a 256 -c SHA256SUMS

Помощник по документации A4

Ответы собираются из документации и могут быть неточны — сверяйтесь с разделами по ссылкам.