--- title: Публикация description: Распространяйте своё приложение Twenty в маркетплейсе или разверните его для внутреннего использования. --- Приложения сейчас проходят альфа-тестирование. Функциональность работает, но продолжает развиваться. ## Обзор После того как ваше приложение [собрано и протестировано локально](/l/ru/developers/extend/apps/building), у вас есть два пути для его распространения: * **Опубликовать в npm** — разместите ваше приложение в маркетплейсе Twenty, чтобы любое рабочее пространство могло его найти и установить. * **Разверните tar-архив** — загрузите своё приложение напрямую на конкретный сервер Twenty для внутреннего или частного использования. Оба пути начинаются с одного и того же шага **build**. ## Сборка вашего приложения Команда `build` компилирует ваши исходники TypeScript, транспилирует функции логики и фронтенд-компоненты и генерирует `manifest.json`, который описывает содержимое вашего приложения: ```bash filename="Terminal" yarn twenty build ``` Выходные данные записываются в `.twenty/output/`. Этот каталог содержит всё необходимое для распространения: скомпилированный код, ресурсы, манифест и копию вашего `package.json`. Чтобы также создать tarball `.tgz` (который внутренне используется командой deploy или для ручного распространения): ```bash filename="Terminal" yarn twenty build --tarball ``` ## Публикация в npm Публикация в npm делает ваше приложение видимым в маркетплейсе Twenty. Любое рабочее пространство Twenty может просматривать, устанавливать и обновлять приложения из маркетплейса непосредственно из интерфейса. ### Требования * Учётная запись [npm](https://www.npmjs.com) * Ключевое слово `twenty-app` **обязательно** должно быть указано в массиве `keywords` вашего `package.json` ### Добавление обязательного ключевого слова Маркетплейс Twenty находит приложения, ища в реестре npm пакеты с ключевым словом `twenty-app`. Добавьте его в ваш `package.json`: ```json filename="package.json" { "name": "twenty-app-postcard-sender", "version": "1.0.0", "keywords": ["twenty-app"], ... } ``` Маркетплейс ищет в реестре npm по `keywords:twenty-app`. Без этого ключевого слова ваш пакет не появится в маркетплейсе, даже если в его имени есть префикс `twenty-app-`. ### Шаги 1. **Сборка вашего приложения:** ```bash filename="Terminal" yarn twenty build ``` 2. **Публикация в npm:** ```bash filename="Terminal" yarn twenty publish ``` Это выполняет `npm publish` из каталога `.twenty/output/`. Чтобы опубликовать с определённым dist-tag (например, `beta` или `next`): ```bash filename="Terminal" yarn twenty publish --tag beta ``` ### Как работает обнаружение приложений в маркетплейсе Сервер Twenty синхронизирует каталог маркетплейса из реестра npm **каждый час**: 1. Он ищет все пакеты npm с ключевым словом `keywords:twenty-app` 2. Для каждого пакета он извлекает `manifest.json` с CDN npm 3. Метаданные приложения (name, description, author, logo, screenshots, category) извлекаются из манифеста и отображаются в маркетплейсе После публикации может пройти до одного часа, прежде чем ваше приложение появится в маркетплейсе. Чтобы запустить синхронизацию немедленно, не дожидаясь следующего почасового запуска: ```bash filename="Terminal" yarn twenty catalog-sync ``` Чтобы указать конкретный remote: ```bash filename="Terminal" yarn twenty catalog-sync -r production ``` Метаданные, отображаемые в маркетплейсе, берутся из вызова `defineApplication()` в исходном коде вашего приложения — из таких полей, как `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl` и `termsUrl`. ### Публикация через CI Сгенерированный шаблоном проект включает рабочий процесс GitHub Actions, который выполняет публикацию при каждом релизе: ```yaml filename=".github/workflows/publish.yml" name: Publish on: release: types: [published] permissions: contents: read id-token: write jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "24" registry-url: https://registry.npmjs.org - run: yarn install --immutable - run: npx twenty build - run: npm publish --provenance --access public working-directory: .twenty/output env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} ``` Для других CI-систем (GitLab CI, CircleCI и др.) применимы те же три команды: `yarn install`, `yarn twenty build`, затем `npm publish` из `.twenty/output`. **npm provenance** — опционально, но рекомендуется. Публикация с флагом `--provenance` добавляет к вашему пакету в npm значок доверия, позволяя пользователям проверить, что пакет был собран из конкретного коммита в общедоступном конвейере CI. См. инструкции по настройке в [документации по npm provenance](https://docs.npmjs.com/generating-provenance-statements). ## Развертывание на сервер (tarball) Для приложений, которые вы не хотите делать общедоступными — собственные инструменты, интеграции только для предприятий или экспериментальные сборки — вы можете развернуть tarball напрямую на сервер Twenty. ### Требования Перед развертыванием вам нужен настроенный remote, указывающий на целевой сервер. Remotes локально хранят URL сервера и учётные данные аутентификации в `~/.twenty/config.json`. Добавьте remote: ```bash filename="Terminal" yarn twenty remote add --url https://your-twenty-server.com --as production ``` Для локального сервера разработки: ```bash filename="Terminal" yarn twenty remote add --local --as local ``` Вы также можете аутентифицироваться с помощью API-ключа в неинтерактивных средах: ```bash filename="Terminal" yarn twenty remote add --url https://your-twenty-server.com --token --as production ``` Управляйте remotes: ```bash filename="Terminal" yarn twenty remote list # List all configured remotes yarn twenty remote switch prod # Set the default remote yarn twenty remote status # Show active remote and auth status yarn twenty remote remove old # Remove a remote ``` ### Развертывание Соберите и загрузите ваше приложение на сервер в одном шаге: ```bash filename="Terminal" yarn twenty deploy ``` Это собирает приложение с флагом `--tarball`, затем загружает tarball на remote по умолчанию через GraphQL multipart upload. Чтобы развернуть на конкретный remote: ```bash filename="Terminal" yarn twenty deploy -r production ``` ### Общий доступ к развернутому приложению Приложения в формате tarball не отображаются в публичном маркетплейсе, поэтому другие рабочие пространства на том же сервере не найдут их при просмотре. Чтобы поделиться развернутым приложением: 1. Перейдите в **Настройки > Приложения > Регистрации** и откройте ваше приложение 2. На вкладке **Распространение** нажмите **Копировать ссылку для общего доступа** 3. Поделитесь этой ссылкой с пользователями в других рабочих пространствах — она ведёт их прямо на страницу установки приложения Ссылка общего доступа использует базовый URL сервера (без какого-либо поддомена рабочего пространства), поэтому она работает для любого рабочего пространства на сервере. ### Управление версиями Чтобы выпустить обновление: 1. Обновите значение поля `version` в файле `package.json` 2. Выполните `yarn twenty deploy` (или `yarn twenty deploy -r production`) 3. Рабочие пространства, в которых установлено приложение, увидят доступное обновление в своих настройках ## Установка приложений После публикации приложения (npm) или его развертывания (tarball) рабочие пространства устанавливают его через интерфейс: ```bash filename="Terminal" yarn twenty install ``` Или со страницы **Настройки > Приложения** в интерфейсе Twenty, где можно просматривать и устанавливать как приложения из маркетплейса, так и развернутые через tarball. ## Категории распространения приложений Twenty группирует приложения в три категории в зависимости от способа их распространения: | Категория | Как это работает | Отображается в маркетплейсе? | | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | | **Разработка** | Локальные приложения в режиме разработки, запущенные через `yarn twenty dev`. Используются для сборки и тестирования. | Нет | | **Опубликовано (npm)** | Приложения, опубликованные в npm с ключевым словом `twenty-app`. Отображаются в маркетплейсе, доступные для установки любому рабочему пространству. | Да | | **Внутренние (tarball)** | Приложения, развернутые через tarball на конкретном сервере. Доступны только рабочим пространствам на этом сервере по ссылке общего доступа. | Нет | Начните в режиме **Разработка** во время создания приложения. Когда будет готово, выберите **Опубликовано** (npm) для широкого распространения или **Внутренний** (tarball) для приватного развертывания. ## Справочник по CLI | Команда | Описание | Основные флаги | | --------------------------- | -------------------------------------------------------- | ------------------------------------------------------- | | `yarn twenty build` | Скомпилировать приложение и сгенерировать манифест | `--tarball` — также создать пакет `.tgz` | | `yarn twenty publish` | Собрать и опубликовать в npm | `--tag ` — dist-tag npm (например, `beta`, `next`) | | `yarn twenty deploy` | Собрать и загрузить tarball на сервер | `-r, --remote ` — целевой remote | | `yarn twenty catalog-sync` | Запустить на сервере синхронизацию каталога маркетплейса | `-r, --remote ` — целевой remote | | `yarn twenty install` | Установить развернутое приложение в рабочем пространстве | `-r, --remote ` — целевой remote | | `yarn twenty dev` | Отслеживать и синхронизировать локальные изменения | Использует remote по умолчанию | | `yarn twenty remote add` | Добавить подключение к серверу | `--url`, `--token`, `--as`, `--local`, `--port` | | `yarn twenty remote list` | Показать настроенные remotes | — | | `yarn twenty remote switch` | Установить remote по умолчанию | — | | `yarn twenty remote status` | Показать статус подключения | — | | `yarn twenty remote remove` | Удалить remote | — |