Веб-доступ к 1С из браузера: сервер на Ubuntu, Apache и webinst
Содержание
Чтобы опубликовать базу 1С на веб-сервере Apache в Ubuntu, нужны три вещи: Apache 2.4, установленный компонент платформы «Модули расширения веб-сервера» той же версии, что и сервер 1С, и одна команда webinst -publish -apache24. Утилита сама создаст каталог с файлом default.vrd и допишет в конфиг Apache строку LoadModule и блок Alias. Через пару минут база открывается в браузере по адресу вида http://сервер/buh.
Частая ошибка — ставить на Ubuntu только Apache и ждать, что 1С «подхватится». Без модуля wsap24.so из дистрибутива платформы Apache ничего не знает о 1С и отдаёт 404 или голый листинг каталога. Второе заблуждение — что можно взять модуль от другой версии платформы. Нельзя: версии веб-расширения и сервера 1С должны совпадать до последней цифры.
Что проверить на сервере Ubuntu до установки 1С
Начните с чистой системы. Подойдут Ubuntu 22.04 и 24.04 LTS: платформа 8.3 актуальных версий на них ставится штатно.
Минимальный набор подготовки:
- 🖥️ Имя хоста. Сервер 1С регистрирует кластер по имени машины. Имя должно разрешаться в IP — и на самом сервере, и на клиентах.
- 🌐 Локаль. Для 1С и PostgreSQL нужна русская локаль
ru_RU.UTF-8. - 🔤 Шрифты. Без них печатные формы в веб-клиенте поедут.
- 🔒 Порты. Снаружи открыты только 80 и 443, порты кластера 1540–1591 — только для внутренней сети.
sudo apt update && sudo apt upgrade -y
sudo hostnamectl set-hostname srv1c
echo "127.0.1.1 srv1c" | sudo tee -a /etc/hosts
sudo locale-gen ru_RU.UTF-8
sudo update-locale LANG=ru_RU.UTF-8
sudo apt install -y apache2 fontconfig ttf-mscorefonts-installer
Если клиенты в локальной сети тоже будут подключаться толстым или тонким клиентом напрямую к серверу, пропишите srv1c в DNS или в hosts каждого компьютера. Иначе получите Сервер 1С:Предприятия не обнаружен, хотя ping по IP проходит.
Базу данных (PostgreSQL в сборке для 1С или Postgres Pro) ставьте до публикации и проверьте, что она стартует с локалью ru_RU.UTF-8. Для файловой базы СУБД не нужна, но для работы нескольких пользователей через браузер клиент-серверный вариант надёжнее.
Как поставить платформу 1С:Предприятие на Ubuntu
С платформы 8.3.20 дистрибутив для Linux — единый установщик setup-full-<версия>-x86_64.run. Скачайте его из личного кабинета на портале поддержки 1С и положите на сервер.
Для публикации нужны компоненты:
| Компонент | Зачем |
|---|---|
server | сервер 1С:Предприятия (агент, менеджер кластера, рабочие процессы) |
ws | модули расширения веб-сервера — файл wsap24.so |
server_admin | сервер администрирования ras и утилита rac |
Установка без графического интерфейса:
chmod +x setup-full-8.3.24.1467-x86_64.run
sudo ./setup-full-8.3.24.1467-x86_64.run --mode unattended \
--enable-components server,ws,server_admin
Номер версии в примерах — для наглядности, подставьте свой. Платформа ложится в /opt/1cv8/x86_64/<версия>/, и под каждую новую версию создаётся отдельный каталог. Это важно позже, при обновлении.
Если веб-сервер и сервер 1С на разных машинах, на машину с Apache достаточно поставить только ws. Версия всё равно должна совпадать с сервером.
Запуск службы и настройка кластера серверов 1С
В новых версиях платформы служба сервера — шаблонный юнит systemd, файл которого лежит в каталоге платформы. Его нужно подключить и запустить:
V=8.3.24.1467
sudo systemctl link /opt/1cv8/x86_64/$V/srv1cv8-$V@.service
sudo systemctl enable --now srv1cv8-$V@default
sudo systemctl status srv1cv8-$V@default
После старта поднимается агент на порту 1540, менеджер кластера на 1541 и рабочие процессы в диапазоне 1560–1591. Проверить можно командой ss -tlnp | grep 15.
Чтобы управлять кластером без Windows, запустите сервер администрирования и посмотрите кластер:
/opt/1cv8/x86_64/$V/ras cluster --daemon
/opt/1cv8/x86_64/$V/rac cluster list
Команда rac cluster list выведет UUID кластера. Он нужен, чтобы создать информационную базу через rac infobase create. Набор параметров этой команды смотрите в rac help infobase — он зависит от СУБД.
Проще всего базу создать с любого Windows-компьютера в сети: в окне запуска 1С нажать Добавить → Создание новой информационной базы, выбрать вариант «На сервере 1С:Предприятия» и указать кластер srv1c, имя базы, тип СУБД и учётные данные PostgreSQL. Готовую базу из .dt загрузите потом через Конфигуратор.
Запомните имя базы в кластере (например, buh). Именно оно пойдёт в строку подключения при публикации, а не имя базы в PostgreSQL и не название в списке баз на клиенте.
Как Apache подключается к 1С
Apache обслуживает запросы браузера, а модуль wsap24.so пересылает их серверу 1С. Сам модуль ничего не хранит: всё, что он знает о базе, записано в файле default.vrd в каталоге публикации.
Цепочка выглядит так:
- Браузер открывает
https://1c.example.ru/buh. - Apache по директиве
Alias "/buh"находит каталог/var/www/buh. - Обработчик
1c-applicationчитаетdefault.vrdи берёт строку подключенияSrvr="srv1c";Ref="buh";. - Модуль подключается к кластеру как клиент и отдаёт браузеру веб-клиент.
Перед публикацией проверьте, что Apache работает и нужные модули включены:
sudo systemctl enable --now apache2
sudo a2enmod ssl headers
sudo apache2ctl -M | grep -E "ssl|headers"
Каталог публикации должен читаться пользователем www-data. Для клиент-серверной базы этого достаточно. Для файловой — www-data нужен ещё и доступ на запись к каталогу с файлом 1Cv8.1CD, иначе база откроется только на чтение или не откроется вовсе.
Публикация базы 1С на веб-сервере Apache командой webinst
Утилита webinst лежит в каталоге платформы. Одной командой она делает всю публикацию:
sudo mkdir -p /var/www/buh
sudo /opt/1cv8/x86_64/$V/webinst -publish -apache24 \
-wsdir buh -dir /var/www/buh \
-connstr "Srvr=srv1c;Ref=buh;" \
-confpath /etc/apache2/apache2.conf
Что означают ключи:
-apache24— тип веб-сервера (Apache 2.4);-wsdir buh— виртуальный каталог, то есть хвост адреса;-dir— физический каталог, куда ляжетdefault.vrd;-connstr— строка подключения к базе;-confpath— конфиг Apache, который утилита дополнит.
Для файловой базы строка подключения другая: -connstr "File=/srv/1c/buh;".
Проверьте, что дописала утилита, и перезапустите Apache:
sudo tail -n 20 /etc/apache2/apache2.conf
sudo apache2ctl configtest
sudo systemctl restart apache2
В конце файла появятся строка LoadModule _1cws_module "/opt/1cv8/x86_64/.../wsap24.so" и блок <Directory "/var/www/buh/"> с обработчиком 1c-application. Откройте http://srv1c/buh — должен загрузиться веб-клиент с окном входа.
Перезапуск Apache обрывает текущие сеансы веб-клиента. На рабочем сервере делайте это вне рабочего дня или используйте sudo systemctl reload apache2, если меняли только каталоги публикации.
Что править в default.vrd руками
Файл короткий, его удобно редактировать напрямую. Типовые правки:
- 🧹 Логин и пароль. Если в строку подключения попали
UsrиPwd, уберите их. Иначе любой, кто откроет адрес, войдёт под этим пользователем. - 🔌 HTTP- и веб-сервисы. Атрибуты
enableу элементов<ws>и<httpServices>управляют публикацией сервисов конфигурации. Не нужны — выключайте. - 📊 OData. Стандартный интерфейс OData публикуется отдельным флагом. Без задачи интеграции его не включают.
Когда публикация больше не нужна, её снимают тем же webinst с ключом -delete и теми же -wsdir, -dir, -confpath.
Обновление платформы и публикация
После обновления платформы строка LoadModule по-прежнему указывает на каталог старой версии. Apache либо грузит старый модуль, и база ругается на несовпадение версий, либо не стартует, если старый каталог удалили.
Порядок такой: поставить новую версию с компонентом ws, запустить службу новой версии, затем выполнить webinst -publish уже из нового каталога. Старую строку LoadModule в apache2.conf удалите вручную — двух модулей 1С в одном Apache быть не должно.
Защита опубликованной базы: HTTPS, доступ и порты
База, открытая в интернет по HTTP, — это пароли пользователей открытым текстом. Минимум для рабочей публикации:
- HTTPS. Бесплатный сертификат Let’s Encrypt ставится за минуту, если на сервер смотрит доменное имя:
sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d 1c.example.ru
Certbot сам создаст виртуальный хост на 443 и настроит автопродление. Блок Alias и <Directory> от webinst лежат в общем конфиге и работают на обоих портах.
Перенаправление с HTTP на HTTPS. Certbot предложит его при установке — соглашайтесь.
Фаервол. Наружу только веб:
sudo ufw allow OpenSSH
sudo ufw allow "Apache Full"
sudo ufw enable
Порты 1540–1591 и 5432 в интернет не открывайте. Если нужен доступ тонким клиентом извне — только через VPN.
Пользователи 1С. В базе должна быть включена аутентификация, у каждого сотрудника — свой пользователь с паролем. Пользователь без пароля с полными правами на публичном адресе — прямой путь к утечке.
Скрытие версии Apache. В
/etc/apache2/conf-available/security.confпоставьтеServerTokens ProdиServerSignature Off.
Каждый сеанс веб-клиента занимает клиентскую лицензию так же, как тонкий клиент. Публикация не даёт «бесплатных» подключений — посчитайте лицензии до того, как раздавать ссылку.
Проверка публикации и разбор ошибок
После публикации откройте базу в браузере и проверьте вход, открытие пары документов и печатную форму. Если что-то не так, первым делом смотрите журнал Apache:
sudo tail -f /var/log/apache2/error.log
Там видно, загрузился ли модуль и что ответил сервер 1С. Самые частые ситуации разобраны ниже.
apache2ctl configtest. Обычно путь в LoadModule указывает на несуществующий каталог платформы или модуль 1С подключён дважды. Оставьте одну строку с актуальной версией.www-data нет прав на чтение каталога публикации или default.vrd. Выполните sudo chown -R www-data:www-data /var/www/buh и проверьте права на родительские каталоги.Alias не подхватился. Проверьте apache2ctl -M | grep 1cws и что webinst дописал именно тот конфиг, который читает Apache.getent hosts srv1c и ss -tlnp на сервере 1С.webinst из каталога той версии, на которой работает служба сервера.ttf-mscorefonts-installer, проверьте locale -a | grep ru_RU и перезапустите службу 1С вне рабочего времени.Если журнал Apache молчит, а база не открывается, смотрите технологический журнал сервера 1С или хотя бы journalctl -u srv1cv8-$V@default. Ошибки подключения к СУБД и нехватки лицензий видны именно там.
Резервное копирование базы и публикации
Опубликованная база работает круглые сутки, поэтому копию снимают на живой базе средствами СУБД. Для PostgreSQL это pg_dump в сжатом формате — его можно запускать без остановки 1С.
Скрипт /usr/local/bin/backup1c.sh:
#!/bin/bash
set -e
DIR=/backup/1c
mkdir -p "$DIR"
pg_dump -U postgres -h localhost -Fc buh > "$DIR/buh_$(date +%F_%H%M).dump"
find "$DIR" -name "buh_*.dump" -mtime +14 -delete
Пароль для pg_dump положите в ~/.pgpass пользователя, от которого запускается задание, с правами 600. Расписание в crontab -e:
30 2 * * * /usr/local/bin/backup1c.sh >> /var/log/backup1c.log 2>&1
Кроме дампа базы сохраняйте то, что нужно для быстрого восстановления публикации:
- 📄
/var/www/buh/default.vrd; - ⚙️
/etc/apache2/apache2.confи каталог/etc/apache2/sites-available/; - 🗂️ каталог настроек кластера в домашнем каталоге пользователя
usr1cv8— там список баз кластера.
Хранить копии только на том же сервере — не резервное копирование. Раз в сутки отправляйте дампы на другой сервер или в объектное хранилище, а раз в месяц разворачивайте один из них в тестовую базу и проверяйте, что он открывается.
Частые вопросы по публикации 1С на Apache
Можно ли опубликовать на одном Apache несколько баз?
webinst -publish для каждой базы со своими -wsdir и -dir. Строка LoadModule останется одна, а блоков Alias станет несколько.Нужен ли Apache, если пользователи работают тонким клиентом?
Подойдёт ли nginx вместо Apache?
Как сменить адрес базы с /buh на другой?
webinst -delete, затем опубликуйте заново с новым -wsdir. Ручная правка Alias тоже сработает, но легко забыть второй блок.Работает ли публикация с файловой базой?
www-data может писать в каталог базы. Но при нескольких пользователях через браузер файловая база заметно тормозит, клиент-серверный вариант надёжнее.