# Публикация базы 1С:Предприятие

к сведению

Доступно только по [подписке](https://tuna.am/#pricing).

## Обзор

Команда `tuna 1c` публикует базу 1С:Предприятие и открывает к ней доступ из интернета: через веб-клиент в браузере или тонкий клиент 1С. Ставить и настраивать веб-сервер, пробрасывать порты и получать «белый» IP не нужно.

У 1С нет собственного HTTP-сервера: веб-клиент и тонкий клиент по HTTP обслуживает модуль расширения веб-сервера, который загружается в Apache или IIS. `tuna 1c` делает всю эту работу сама:

1. находит установленную платформу 1С и её модуль расширения веб-сервера;
2. при первом запуске скачивает Apache httpd с `releases.tuna.am` в кэш (`%LocalAppData%\tuna`);
3. запускает его на `127.0.0.1` и публикует в нём базу;
4. открывает [HTTP-туннель](https://tuna.am/docs/tunnels/http.md) к этому веб-серверу.

База доступна по адресу `<адрес туннеля>/1c/`, корень адреса перенаправляет туда же.

## Требования

* **[Подписка](https://tuna.am/#pricing) tuna.** На бесплатном тарифе команда не запустится: сервер ответит `1C unavailable for free plan`.
* **Windows x64.** Команда есть только в сборке tuna для Windows x64. Платформа 1С при этом может быть и 32-, и 64-битной. В сборках для Linux, macOS и Windows ARM64 команды нет.
* **Компонент «Модули расширения веб-сервера»** в установке 1С. Без него tuna сообщит, что модуль не найден. [Как его установить](#web-module).
* **Лицензия 1С, допускающая подключение через веб-сервер.** [Учебная версия](#training) не подходит.

При первом запуске tuna также установит Microsoft Visual C++ Redistributable, если его нет в системе: без него Apache не запускается. Windows может запросить подтверждение (UAC).

### Установка модулей расширения веб-сервера

Компонент входит в дистрибутив платформы, но по умолчанию может быть не отмечен. Добавить его в уже установленную 1С:

1. Откройте «Параметры» → «Приложения» → «Установленные приложения», найдите «1С:Предприятие 8» и в меню «…» нажмите «Изменить». В Windows 10 и старше то же самое делается через «Панель управления» → «Программы и компоненты».

   ![1С:Предприятие 8 в списке установленных приложений Windows, пункт «Изменить»](/docs/img/tuna_1c_install_apps.png)

2. В установщике выберите режим «Изменить» и нажмите «Далее».

   ![Режим «И�зменить» в установщике 1С](/docs/img/tuna_1c_install_modify.png)

3. В списке компонентов нажмите на значок у «Модулей расширения веб-сервера» и выберите «Данный компонент будет установлен на локальный жесткий диск».

   ![Включение компонента «Модули расширения веб-сервера» в установщике 1С](/docs/img/tuna_1c_install_component.png)

4. Нажмите «Далее» и дождитесь окончания установки.

Проверить результат можно командой `tuna 1c discover`: рядом с установкой появится путь к `wsap24.dll`.

## Быстрый старт

Один раз выберите установку 1С и базу в мастере:

```shell
tuna 1c setup

```

Мастер спросит установку 1С, базу, локальный порт и место сохранения. Шаг с единственным вариантом он пропускает.

Опубликуйте базу и сразу закройте её паролем:

```shell
tuna 1c --basic-auth="login:password"

```

В шапке [интерфейса в терминале](https://tuna.am/docs/tunnels/tui.md) будут:

| Строка       | Что в ней                                                                    |
| ------------ | ---------------------------------------------------------------------------- |
| `Forwarding` | Публичный адрес туннеля                                                      |
| `Local`      | Локальный адрес публикации, по нему базу можно открыть с этого же компьютера |
| `1C client`  | Готовый параметр `/WS"…"` для запуска тонкого клиента                        |
| `Platform`   | Каталог и разрядность используемой платформы 1С                              |
| `Warning`    | Предупреждения: база открыта без защиты, используется учебная версия         |

Откройте адрес из строки `Forwarding` в браузере или [подключите тонкий клиент](#thin-client). Если мастер не нашёл 1С или базу, загляните в раздел [Диагностика](#diagnostics).

## Примеры

примечание

Все актуальные флаги, подсказки и примеры можно посмотреть вызвав справку:

```shell
tuna 1c --help

```

Почти для всех флагов есть аналогичные [переменные окружения](https://tuna.am/docs/guides/environment-variables.md).

### Какую базу публиковать

Базу можно указать тремя способами:

```shell
tuna 1c "Моя база"
tuna 1c "C:\Bases\MyBase"
tuna 1c "Srvr=localhost;Ref=MyBase"

```

1. Имя базы из списка стартера 1С — того же, что вы видите в окне запуска 1С.
2. Каталог файловой базы.
3. Строка подключения к серверной базе.

Без аргумента tuna берёт базу из [сохранённых настроек](#setup). Если их нет и в списке стартера одна база — публикует её, если несколько — предложит выбрать.

предупреждение

Публикация серверных баз (`Srvr=…;Ref=…`) поддерживается, но на рабочем кластере 1С мы её пока не проверяли. Если столкнётесь с проблемой, [напишите нам](https://t.me/tuna_support).

### Сохранённые настройки

`tuna 1c setup` записывает выбор в секцию `1c` [конфигурационного файла](https://tuna.am/docs/guides/config-file.md) — общего `tuna.yml` или `.tuna.yml` в текущем каталоге:

```yaml
1c:
  home: 'C:\Program Files (x86)\1cv8'
  platform: 'x86'
  name: 'Моя база'
  infobase: 'File="C:\Bases\MyBase";'
  port: 8314

```

Аргумент и флаги командной строки важнее настроек из файла, а `.tuna.yml` в текущем каталоге перекрывает общий `tuna.yml`. Чтобы изменить настройки, запустите мастер ещё раз или поправьте файл вручную.

### Установка 1С в нестандартном каталоге

tuna ищет платформу в `C:\Program Files\1cv8` и `C:\Program Files (x86)\1cv8`. Если 1С установлена в другое место или нужно выбрать одну из нескольких установок, укажите каталог и разрядность:

```shell
tuna 1c "C:\Bases\MyBase" --1c-home="D:\1cv8" --1c-platform=x86

```

### Локальный порт

По умолчанию веб-сервер занимает случайный свободный порт на `127.0.0.1`. Зафиксировать порт:

```shell
tuna 1c "C:\Bases\MyBase" --1c-port=8314

```

### Постоянный адрес

Адрес туннеля задаётся так же, как у [HTTP-туннеля](https://tuna.am/docs/tunnels/http.md#address): поддоменом или своим доменом. С постоянным адресом пользователям не придётся менять ссылку и параметр `/WS` после перезапуска.

```shell
tuna 1c "Моя база" --subdomain=my-1c
tuna 1c "Моя база" --domain=1c.example.com

```

### С указанием токена

Можно указать специфичный токен через флаг `--token` или переменную окружения `TUNA_TOKEN`. Переопределение происходит в соответствии с политикой [очерёдности конфигурации](https://tuna.am/docs/guides/config-ordering.md).

```shell
tuna 1c "Моя база" --token=tt_***

```

### С указанием региона для подключения

Можно указать специфичный [регион](https://tuna.am/docs/tunnels/guides/locations.md) через флаг `--location`/`-l` или переменную окружения `TUNA_LOCATION`. Переопределение происходит в соответствии с политикой [очерёдности конфигурации](https://tuna.am/docs/guides/config-ordering.md).

```shell
tuna 1c "Моя база" --location=ru

```

## Подключение клиентов

### Веб-клиент

Откройте адрес туннеля в браузере, tuna перенаправит на `/1c/`:

```text
https://<адрес туннеля>/1c/

```

![Веб-клиент 1С, открытый по адресу туннеля](/docs/img/tuna_1c_web_client.png)

### Тонкий клиент

Скопируйте параметр из строки `1C client` в шапке и запустите тонкий клиент:

```shell
1cv8c.exe ENTERPRISE /WS"https://<адрес туннеля>/1c"

```

Тот же адрес можно добавить в список баз стартера: «Добавить» → «Добавление в список существующей информационной базы» → «На веб-сервере».

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

осторожно

`tuna 1c` открывает базу всему интернету: адрес туннеля может подобрать или найти кто угодно. Между посторонним и вашими данными остаётся только окно входа 1С.

Если запустить команду без `--basic-auth` и `--key-auth`, tuna покажет предупреждение. Что стоит сделать:

* **Закрыть публикацию паролем** — tuna спросит его раньше, чем запрос дойдёт до 1С:

  ```shell
  tuna 1c "Моя база" --basic-auth="login:password"

  ```

* **Задать надёжные пароли всем пользователям базы.** Пользователь без пароля или с простым паролем — это открытая дверь в базу. Особенно проверьте учётные записи с правами администратора.

* **Ограничить доступ по IP**, если адреса пользователей известны:

  ```shell
  tuna 1c "Моя база" --cidr-allow="203.0.113.0/24"

  ```

Работают и остальные способы [защиты доступа](https://tuna.am/docs/tunnels/http.md#access) HTTP-туннеля: `--key-auth`, `--cidr-deny`, `--rate-limit`. Запросы к базе видны в [инспекторе](https://tuna.am/docs/tunnels/http/inspect.md), отключить его можно флагом `--inspect=false`.

## Лицензии 1С

tuna публикует базу, но не меняет правила лицензирования 1С: сколько пользователей могут работать через веб-сервер одновременно, определяет ваша лицензия.

### Учебная версия не подходит

Учебная версия платформы (каталог `1cv8t`) допускает одно подключение к базе, и его занимает сама публикация. Войти в базу не получится ни веб-клиентом, ни тонким. tuna предупредит об этом в шапке и в выводе `tuna 1c discover`.

### Лицензия для разработчиков

Для пробы не обязательно покупать лицензию 1С: подойдёт бесплатная лицензия для разработчиков, её выдаёт [developer.1c.ru](https://developer.1c.ru/). С ней мы и проверяли команду. Это лицензия 1С, она не заменяет [подписку](https://tuna.am/#pricing) tuna. Условия и ограничения лицензии смотрите на сайте 1С. В нашей проверке одновременно работал один веб-клиент: пока вкладка с базой не закрыта или сеанс не завершился по тайм-ауту, войти из другого браузера не получится.

## Файлы публикации

Для каждой базы tuna создаёт каталог публикации в `%LocalAppData%\tuna\1c\`. В нём лежат:

| Файл                      | Назначение                                               |
| ------------------------- | -------------------------------------------------------- |
| `default.vrd`             | Описание публикации 1С                                   |
| `httpd.conf`              | Конфигурация Apache, создаётся заново при каждом запуске |
| `access.log`, `error.log` | Журналы веб-сервера                                      |

Существующий `default.vrd` tuna не перезаписывает, поэтому его можно править вручную — например, включить OData или HTTP-сервисы. Вернуть исходный файл:

```shell
tuna 1c "Моя база" --reset-vrd

```

Свой каталог публикации задаётся флагом `--1c-publish-dir`:

```shell
tuna 1c "Моя база" --1c-publish-dir="C:\tuna-1c\my-base"

```

## Диагностика

Команда `tuna 1c discover` показывает, что tuna нашла на компьютере: установки 1С, путь к модулю расширения веб-сервера в каждой из них и базы из списка стартера.

```shell
tuna 1c discover

```

| Что в выводе                                                        | Что делать                                                            |
| ------------------------------------------------------------------- | --------------------------------------------------------------------- |
| У установки написано `web server extension module is not installed` | [Установите компонент](#web-module)                                   |
| У модуля пометка `training edition, single connection`              | Это [учебная версия](#training), войти в базу через неё не получится  |
| Установок нет                                                       | Укажите каталог флагом [`--1c-home`](#home)                           |
| Баз нет                                                             | Передайте [каталог базы или строку подключения](#infobase) аргументом |

Если база опубликовалась, но не открывается, посмотрите `error.log` в [каталоге публикации](#publish-dir).

## Справочник флагов

| Флаг                          | Переменная окружения                | Описание                                                                                   |
| ----------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| `--1c-home`                   | `TUNA_1C_HOME`                      | Каталог установки 1С:Предприятие                                                           |
| `--1c-platform`               | `TUNA_1C_PLATFORM`                  | Разрядность платформы: `x64` или `x86`                                                     |
| `--1c-port`                   | `TUNA_1C_PORT`                      | Локальный порт веб-сервера, по умолчанию случайный свободный                               |
| `--1c-publish-dir`            | `TUNA_1C_PUBLISH_DIR`               | Каталог с файлами публикации                                                               |
| `--reset-vrd`                 |                                     | Создать `default.vrd` заново, даже если он есть                                            |
| `--basic-auth`                | `TUNA_BASIC_AUTH`                   | [Логин и пароль](https://tuna.am/docs/tunnels/http.md#basic-auth) для доступа к публикации |
| `--key-auth`                  | `TUNA_KEY_AUTH`                     | [Ключ](https://tuna.am/docs/tunnels/http.md#key-auth) в заголовке `X-Token`                |
| `--cidr-allow`, `--cidr-deny` | `TUNA_CIDR_ALLOW`, `TUNA_CIDR_DENY` | [Доступ по подсетям IP](https://tuna.am/docs/tunnels/http.md#cidr)                         |
| `--rate-limit`                | `TUNA_RATE_LIMIT`                   | [Ограничение частоты запросов](https://tuna.am/docs/tunnels/http.md#rate-limit)            |
| `--subdomain`, `-s`           | `TUNA_SUBDOMAIN`                    | [Поддомен](https://tuna.am/docs/tunnels/http.md#address)                                   |
| `--domain`, `-d`              | `TUNA_DOMAIN`                       | [Собственный домен](https://tuna.am/docs/tunnels/http.md#custom-domain)                    |
| `--location`, `-l`            | `TUNA_LOCATION`                     | [Регион](https://tuna.am/docs/tunnels/guides/locations.md) подключения                     |
| `--inspect`                   | `TUNA_INSPECT`                      | Включить или отключить [инспектор запросов](https://tuna.am/docs/tunnels/http/inspect.md)  |
| `--qr`                        | `TUNA_QR_CODE`                      | Показать [QR-код](https://tuna.am/docs/tunnels/http.md#qr) с адресом                       |
| `--token`                     | `TUNA_TOKEN`                        | Токен                                                                                      |

## Ограничения

Команда новая. Мы проверяли её на Windows 11 с 32-битной платформой 1С 8.3.27 и файловой базой: вход веб-клиентом и тонким клиентом по публичному адресу, запуск по имени базы и без аргументов после `tuna 1c setup`, `--1c-port`, `--basic-auth` в браузере. Пока не проверены:

* тонкий клиент вместе с `--basic-auth`;
* 64-битная платформа 1С и 1С 8.5;
* серверные базы на рабочем кластере 1С;
* каталоги баз с кириллицей и пробелами в пути;
* отчёты и печатные формы в веб-клиенте;
* запуск [сервисом](https://tuna.am/docs/tunnels/guides/service.md).

Если что-то из этого не работает у вас, [напишите нам](https://t.me/tuna_support) — поможем разобраться.
