Сервер A4 в сети организации
Редакторы A4 Документ, A4 Таблица и A4 Презентация работают в браузере, а сам сервер стоит в сети вашей организации. Файлы и учётные записи остаются у вас: сервер спрашивает их у вашей системы и ничего не хранит. Комплект раздаётся архивами образов Docker и ставится командой docker load — интернет и доступ к Docker Hub при установке не нужны.
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, если сервер смотрит в интернет.
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 установки.
- Рядом с
docker-compose-wopi.ymlсоздайте файл.env:PORTAL_URL=https://portal.example.ru # адрес вашей системы, как его видит браузер EDITORS_URL=https://office.example.ru # адрес этого сервера за обратным прокси - Запустите:
docker compose -f docker-compose-wopi.yml up -d. - Поставьте перед редакторами nginx из
nginx-wopi.confс доверенным сертификатом HTTPS. - Укажите адреса в вашей системе:
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 Документ в браузере; скачать документ можно там же: «Файл → Скачать».
Обновление и откат
Обновление
- Загрузите новый архив:
docker load -i <новый архив>. - Укажите новый тег образа в
docker-compose.ymlи поднимите заново:docker compose up -d. Если редактор запущен без compose —docker rm -f f1-webhost(илиa4-webhost) и та же командаdocker runс новым тегом. - Проверьте
/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).
Скачать
| Файл | Размер | Назначение |
|---|---|---|
F1-2026.4.0.20261017-webhost-docker.tar.gz | 178 844 085 байт | образ A4 Таблица, linux/amd64 |
A4-2026.4.0.38487392181-webhost-docker.tar.gz | 169 421 618 байт | образ A4 Документ, linux/amd64 |
P2-2026.4.0.29-server-docker.tar.gz | 109 769 468 байт | образ A4 Презентация, linux/amd64 |
docker-compose.yml | 5 066 байт | запуск трёх редакторов сразу (A4 Документ, A4 Таблица, A4 Презентация) |
docker-compose-wopi.yml | 6 986 байт | запуск в режиме WOPI: Битрикс24, Nextcloud |
discovery-merge.mjs | 4 985 байт | общий discovery таблиц и документов (режим WOPI) |
nginx-primer.conf | 3 560 байт | обратный прокси на три редактора |
nginx-wopi.conf | 1 688 байт | обратный прокси для режима WOPI |
BITRIX24.md | 11 389 байт | пошаговая установка для коробочного Битрикс24 |
F1-2026.4.0.20261017-webhost-INSTALL.md | 7 194 байт | установка и настройка A4 Таблица |
A4-2026.4.0.38487392181-webhost-INSTALL.md | 7 464 байт | установка и настройка A4 |
P2-2026.4.0.29-server-INSTALL.md | 7 255 байт | установка A4 Презентация: папка с презентациями, вход по паролю, совместная правка, режим WOPI |
OTKAT.md | 5 578 байт | откат на прежнюю версию |
README.md | 9 772 байт | описание комплекта |
SHA256SUMS | 1 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