Деплой приложения¶
См. также: rules.md · getting-started.md · checklist.md · config-json.md ← Home
Пошаговое создание, упаковка, загрузка через API и обновление миниапов.
⚠ Важно: деплой и обновление миниапа всегда идут через каталог
/db/marketplace(создание/перезалив zip). Каталог/db/installed_apps— это только реестр уже установленных приложений, заполняется автоматически. Туда писать руками или через API не нужно.
Пошаговое создание приложения¶
Шаг 1: Определить тип¶
| Тип | Когда использовать |
|---|---|
| Виджет в footer каталога | Дополнительная визуализация под списком |
| Виджет в карточке | Доп. информация на странице элемента |
| Пункт меню | Полноэкранное приложение (календарь, канбан) |
| itemsAction | Действие над элементом (попап) |
| afterSave hook | Серверная реакция на сохранение (только remote) |
Шаг 2: Создать файлы¶
Шаг 3: Написать config.json¶
Определить:
urls— фреймы приложенияurlsConf— метод запроса (getдля локальных,postдля remote)catalogsилиmenu— куда встраиваетсяpermissions— какие каталоги читает/пишет
Полная спека и пример → config-json.md.
Шаг 4: Написать HTML фрейм¶
Шаблон:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Open Sans', -apple-system, sans-serif; background: transparent; }
</style>
</head>
<body>
<div id="app">Loading...</div>
<script type="module">
import VMCRMUserApp from '/templates/def/db/marketplace/vmcrm-user-app.js';
const App = new VMCRMUserApp();
async function init() {
const params = await App.getRequestParams();
const { catalog, itemId, token } = params.data;
// Загрузить данные
const resp = await App.fetch(`/db/${catalog}.json`);
// Отрисовать UI
document.getElementById('app').innerHTML = `
<p>Каталог: ${catalog}, элементов: ${resp.data?.length || 0}</p>
`;
// Подогнать размер фрейма
App.setFrameSize(null, document.body.scrollHeight + 10);
}
init();
</script>
</body>
</html>
Шаг 5: Проверить по чеклисту¶
Перед упаковкой пройди по checklist.md. Особое внимание:
config.jsonвалиден, полеaboutсо всеми 5 разделами- Все файлы из
urlsсуществуют App.setFrameSize()вызывается после рендераApp.fetch()вместоwindow.fetch()font-size ≥ 16pxв input/select/textarea (iOS Safari)
Шаг 6: Упаковать в zip¶
Допустимые расширения в zip: html, htm, txt, js, png, jpg, jpeg, webp, ico, gif, css, json, svg, map, md, eot, woff2, ttf, woff.
Запрещённые: php, exe, sh — платформа отклонит zip.
Шаг 7: Загрузить в маркетплейс¶
Загрузка приложения = создание/обновление записи в каталоге /db/marketplace.
Через интерфейс¶
- Открой
/db/marketplace - Нажми Добавить (для нового) или открой существующее (для обновления)
- Загрузи zip-файл в поле
doc1 - Сохрани
Через API (рекомендуется для вайбкодинга)¶
curl -X POST "https://panel.korfix.ru/api/db/marketplace/{ID}?token={TOKEN}" \
-F "doc1=@/tmp/my-app.zip;type=application/zip"
Достаточно только doc1 — zip-файл. Имя, описание, теги подтягиваются из config.json внутри архива. Лишние поля (form[name], form[id] и т.д.) не нужны.
Шаг 8: Установить приложение¶
Установка = пользовательское действие в UI маркетплейса.
- Открой маркетплейс:
/db/marketplace - Найди своё приложение в списке (по
nameизconfig.json) - Нажми кнопку Установить на карточке приложения
- Фреймы появятся в указанных в
config.jsonточках встраивания
Реестр
installed_appsзаполняется автоматически — туда писать руками не нужно.
Автодеплой через API¶
Загрузку zip можно автоматизировать через REST API, не заходя в интерфейс.
Деплой новой версии одной командой¶
zip -r /tmp/my-app.zip config.json widget.html *.js *.css
curl -X POST "https://panel.korfix.ru/api/db/marketplace/{ID}?token={TOKEN}" \
-F "doc1=@/tmp/my-app.zip;type=application/zip"
Получение ID и alias приложения¶
curl -H "Authorization: Bearer {TOKEN}" \
"https://panel.korfix.ru/api/db/marketplace?filter[name]=My App"
Проверка версии после деплоя¶
curl -H "Authorization: Bearer {TOKEN}" \
"https://panel.korfix.ru/api/db/marketplace/{ID}"
# В поле appconfig.version — версия из config.json
CI/CD скрипт¶
#!/bin/bash
APP_DIR="./my-app"
API_URL="https://panel.korfix.ru"
TOKEN="your-api-token"
APP_ID="50"
cd "$APP_DIR"
zip -r /tmp/app-deploy.zip config.json *.html *.js *.css 2>/dev/null
RESPONSE=$(curl -s -X POST "$API_URL/api/db/marketplace/$APP_ID?token=$TOKEN" \
-F "doc1=@/tmp/app-deploy.zip;type=application/zip")
echo "$RESPONSE"
Требования к токену¶
Токен из /db/api должен иметь доступ к каталогу marketplace (метод POST). Добавь db_marketplace_post в «Классы API» токена.
Цикл вайбкодинга¶
- Ассистент редактирует html/js/css файлы приложения
- Проверяет на соответствие checklist.md
- Пакует в zip
- Деплоит через
curlодной командой в/db/marketplace - Результат виден в браузере сразу после обновления страницы
Обновление приложения¶
Процесс обновления:
- Ассистент редактирует html/js/css файлы приложения
- Проверяет на соответствие checklist.md
- Пакует в zip
- Перезаливает zip (через форму или API-деплой) в
/db/marketplace - В маркетплейсе появляется бейдж «обновить»
- Пользователь нажимает кнопку Обновить на странице приложения
- Фреймы приложения начинают раздаваться с новым кодом
При API-деплое шаги 1-4 идут автоматически. Шаги 5-7 — действия пользователя в интерфейсе маркетплейса.
Дальше: checklist.md · ← Home