feat(web): add web publishing skills (web-publish, web-info, web-stop, web-unpublish)

Phase 1 of web publishing: publish 1C infobases via portable Apache HTTP Server.
Closes the feedback loop: edit → load → update → open in browser.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-02-22 16:28:22 +03:00
co-authored by Claude Opus 4.6
parent bc9087957f
commit bc4778d6cc
10 changed files with 1178 additions and 0 deletions
+117
View File
@@ -0,0 +1,117 @@
# Веб-публикация 1С
Навыки группы `/web-*` позволяют публиковать информационные базы 1С через Apache HTTP Server для доступа из браузера (веб-клиент). Это замыкает цикл разработки: правка исходников → загрузка → обновление БД → **открытие в браузере**.
## Навыки
| Навык | Скрипт | Описание |
|-------|:------:|----------|
| `/web-publish` | `.ps1` | Публикация базы (VRD + httpd.conf + запуск Apache) |
| `/web-info` | `.ps1` | Статус Apache и список публикаций |
| `/web-stop` | `.ps1` | Остановка Apache |
| `/web-unpublish` | `.ps1` | Удаление публикации |
## Рабочий цикл
```
правки в исходниках → /db-load-xml → /db-update → /web-publish → браузер
/web-info ← статус |
/web-stop ← остановка|
/web-unpublish ← удаление
```
### Типичный цикл разработки
1. **Настройка**`/db-list add` зарегистрировать базу в `.v8-project.json`
2. **Загрузка**`/db-load-xml` загрузить конфигурацию
3. **Обновление**`/db-update` применить к БД
4. **Публикация**`/web-publish` опубликовать базу (при первом запуске скачает Apache)
5. **Проверка** — открыть `http://localhost:8080/{appname}` в браузере
6. **Правка** — изменить исходники
7. **Синхронизация**`/db-load-git` + `/db-update`
8. **Проверка** — обновить страницу в браузере
9. **Завершение**`/web-stop` остановить Apache
## Конфигурация `webPath` в `.v8-project.json`
Поле `webPath` указывает путь к каталогу Apache. Если не задано, используется `tools/apache24` от корня проекта.
```json
{
"v8path": "C:\\Program Files\\1cv8\\8.3.24.1691\\bin",
"webPath": "C:\\tools\\apache24",
"databases": [
{
"id": "dev",
"name": "Разработка",
"type": "file",
"path": "C:\\Bases\\MyApp_Dev",
"user": "Admin"
}
],
"default": "dev"
}
```
> `webPath` — опционально. Если не задан, все навыки `/web-*` ищут Apache в `tools/apache24`.
## Сценарии использования
### Опубликовать базу
```
> Опубликуй базу bp-demo
```
Claude вызовет `/web-publish bp-demo` → скачает Apache (если нет) → сгенерирует VRD → настроит httpd.conf → запустит Apache → выдаст URL.
### Проверить статус
```
> Что с веб-сервером?
```
Claude вызовет `/web-info` → покажет состояние Apache, порт, список публикаций, последние ошибки.
### Опубликовать на другом порту
```
> Опубликуй ERP на порту 9090
```
Claude вызовет `/web-publish erp --port 9090`.
### Остановить сервер
```
> Останови Apache
```
Claude вызовет `/web-stop`.
### Удалить публикацию
```
> Убери публикацию bpdemo
```
Claude вызовет `/web-unpublish bpdemo` → удалит блок из httpd.conf → удалит каталог → перезапустит Apache (если есть другие публикации).
## Ручная установка Apache
Если автоматическая загрузка невозможна (прокси, firewall), используйте флаг `--manual`:
```
> Опубликуй базу --manual
```
Скрипт выдаст инструкцию:
1. Скачайте Apache Lounge (x64 VS17) с https://www.apachelounge.com/download/
2. Распакуйте содержимое `Apache24/` в `tools/apache24` (или путь из `webPath`)
3. Запустите команду повторно
## Спецификации
- [web-spec.md](web-spec.md) — техническая спецификация (VRD, httpd.conf, wsap24.dll, portable Apache)
- [build-spec.md](build-spec.md) — пакетный режим конфигуратора 1С
+184
View File
@@ -0,0 +1,184 @@
# Веб-публикация 1С — техническая спецификация
Описание артефактов, необходимых для публикации информационной базы 1С через Apache HTTP Server.
## default.vrd
Дескриптор виртуального ресурса. XML-файл, описывающий подключение к информационной базе.
### Формат
```xml
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/appname"
ib="connection-string">
</point>
```
### Атрибут `base`
URL-путь публикации. Должен начинаться с `/`, совпадает с `Alias` в httpd.conf.
### Атрибут `ib`
Строка подключения к информационной базе.
**Файловая база:**
```
File=&quot;C:\Bases\MyDB&quot;;
```
**Серверная база:**
```
Srvr=&quot;server01&quot;;Ref=&quot;MyDB&quot;;
```
**С авторизацией:**
```
File=&quot;C:\Bases\MyDB&quot;;Usr=&quot;Admin&quot;;Pwd=&quot;123&quot;;
```
> Кавычки внутри значения `ib` экранируются как `&quot;` (XML-сущность).
### Расположение
`{ApachePath}/publish/{AppName}/default.vrd`
## httpd.conf для 1С
### LoadModule
Apache загружает модуль расширения 1С:
```apache
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.24.1691/bin/wsap24.dll"
```
- Модуль `wsap24.dll` — 64-разрядный, требует x64-версию Apache
- Путь использует forward slashes
### Listen
```apache
Listen 8080
```
Порт для веб-клиента. По умолчанию `8080` (стандартный `80` может быть занят).
### Alias + Directory
Для каждой публикации добавляется блок:
```apache
Alias "/appname" "C:/path/to/apache/publish/appname"
<Directory "C:/path/to/apache/publish/appname">
AllowOverride All
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "C:/path/to/apache/publish/appname/default.vrd"
</Directory>
```
- `Alias` — URL-путь → физический каталог
- `SetHandler 1c-application` — делегирование обработки запросов модулю wsap24
- `ManagedApplicationDescriptor` — путь к default.vrd
### Маркерный подход
Скрипты используют маркерные комментарии для идемпотентного управления блоками:
```apache
# --- 1C: global ---
Listen 8080
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.24.1691/bin/wsap24.dll"
# --- End: global ---
# --- 1C Publication: mydb ---
Alias "/mydb" "C:/tools/apache24/publish/mydb"
<Directory "C:/tools/apache24/publish/mydb">
AllowOverride All
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "C:/tools/apache24/publish/mydb/default.vrd"
</Directory>
# --- End: mydb ---
```
При повторном запуске блок между маркерами заменяется целиком.
## wsap24.dll
Модуль расширения Apache для 1С:Предприятие 8.3.
- Расположение: `{V8Path}/wsap24.dll` (в каталоге `bin` платформы)
- Архитектура: x64 (Apache тоже должен быть x64)
- Имя модуля: `_1cws_module`
## Portable Apache
### Дистрибутив
Apache Lounge — Windows-сборка Apache HTTP Server (x64):
- Сайт: `https://www.apachelounge.com/download/`
- Прямая ссылка (2.4.62, VS17): `https://www.apachelounge.com/download/VS17/binaries/httpd-2.4.62-240904-win64-VS17.zip`
- Внутри ZIP: каталог `Apache24/` с полной структурой
### Структура после установки
```
tools/apache24/
├── bin/
│ ├── httpd.exe
│ └── ...
├── conf/
│ ├── httpd.conf
│ └── ...
├── logs/
│ ├── error.log
│ └── access.log
├── modules/
│ └── ...
└── publish/
└── {appname}/
└── default.vrd
```
### Пост-распаковка
1. `Expand-Archive` распаковывает ZIP во временный каталог
2. Содержимое `Apache24/` перемещается в `{ApachePath}`
3. В `httpd.conf` патчится `ServerRoot`:
```apache
Define SRVROOT "C:/path/to/apache24"
ServerRoot "${SRVROOT}"
```
Путь `SRVROOT` — абсолютный, с forward slashes.
### Запуск
```
httpd.exe # foreground (для отладки)
httpd.exe -k start # фоновый запуск (не работает без установки сервиса)
```
> Portable Apache запускается напрямую через `Start-Process httpd.exe` без установки Windows-сервиса.
### Остановка
```
httpd.exe -k stop # graceful shutdown (требует сервис)
Stop-Process -Name httpd # принудительная остановка (portable)
```
### Перезагрузка
```
httpd.exe -k restart # graceful restart (требует сервис)
```
Для portable варианта: остановка + запуск.