--- title: Публикация description: Распространяйте своё приложение Twenty в маркетплейсе или разверните его для внутреннего использования. --- Приложения сейчас проходят альфа-тестирование. Функция работает, но продолжает развиваться. ## Обзор После того как ваше приложение [собрано и протестировано локально](/l/ru/developers/extend/apps/building), у вас есть два пути для его распространения: * **Разверните tar-архив** — загрузите своё приложение напрямую на конкретный сервер Twenty для внутреннего или частного использования. * **Опубликовать в npm** — разместите ваше приложение в маркетплейсе Twenty, чтобы любое рабочее пространство могло его найти и установить. Оба пути начинаются с одного и того же шага **build**. ## Сборка вашего приложения Run the build command to compile your app and generate a distribution-ready `manifest.json`: ```bash filename="Terminal" yarn twenty build ``` This compiles TypeScript sources, transpiles logic functions and front components, and writes everything to `.twenty/output/`. Add `--tarball` to also produce a `.tgz` package for manual distribution or the deploy command. ## Развертывание на сервер (tarball) Для приложений, которые вы не хотите делать общедоступными — собственные инструменты, интеграции только для предприятий или экспериментальные сборки — вы можете развернуть tarball напрямую на сервер Twenty. ### Требования Перед развертыванием вам нужен настроенный remote, указывающий на целевой сервер. Remotes локально хранят URL сервера и учётные данные аутентификации в `~/.twenty/config.json`. Добавьте remote: ```bash filename="Terminal" yarn twenty remote add --api-url https://your-twenty-server.com --as production ``` ### Развертывание Соберите и загрузите ваше приложение на сервер в одном шаге: ```bash filename="Terminal" yarn twenty deploy # To deploy to a specific remote: # yarn twenty deploy --remote production ``` ### Общий доступ к развернутому приложению Приложения в формате tarball не отображаются в публичном маркетплейсе, поэтому другие рабочие пространства на том же сервере не найдут их при просмотре. Чтобы поделиться развернутым приложением: 1. Перейдите в **Настройки > Приложения > Регистрации** и откройте ваше приложение 2. На вкладке **Распространение** нажмите **Копировать ссылку для общего доступа** 3. Поделитесь этой ссылкой с пользователями в других рабочих пространствах — она ведёт их прямо на страницу установки приложения Ссылка общего доступа использует базовый URL сервера (без какого-либо поддомена рабочего пространства), поэтому она работает для любого рабочего пространства на сервере. Sharing private apps is an Enterprise feature. Go to [Settings > Admin Panel > Enterprise](/settings/admin-panel#enterprise) to enable it. ### Управление версиями Чтобы выпустить обновление: 1. Обновите значение поля `version` в файле `package.json` 2. Run `yarn twenty deploy` (or `yarn twenty deploy --remote production`) 3. Рабочие пространства, в которых установлено приложение, увидят доступное обновление в своих настройках {/* TODO: add screenshot of the Upgrade button */} ## Публикация в npm Публикация в npm делает ваше приложение видимым в маркетплейсе Twenty. Любое рабочее пространство Twenty может просматривать, устанавливать и обновлять приложения из маркетплейса непосредственно из интерфейса. ### Требования * Учётная запись [npm](https://www.npmjs.com) * The `twenty-app` keyword in your `package.json` `keywords` array (already included when you scaffold with `create-twenty-app`) ```json filename="package.json" { "name": "twenty-app-postcard-sender", "version": "1.0.0", "keywords": ["twenty-app"] } ``` ### Метаданные маркетплейса The `defineApplication()` config supports optional fields that control how your app appears in the marketplace. Use `logoUrl` and `screenshots` to reference images from the `public/` folder: ```ts src/application-config.ts export default defineApplication({ universalIdentifier: '...', displayName: 'My App', description: 'A great app', defaultRoleUniversalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, logoUrl: 'public/logo.png', screenshots: [ 'public/screenshot-1.png', 'public/screenshot-2.png', ], }); ``` See the [defineApplication accordion](/l/ru/developers/extend/apps/building#defineentity-functions) in the Building Apps page for the full list of marketplace fields (`author`, `category`, `aboutDescription`, `websiteUrl`, `termsUrl`, etc.). ### Publish ```bash filename="Terminal" yarn twenty publish ``` Чтобы опубликовать с определённым dist-tag (например, `beta` или `next`): ```bash filename="Terminal" yarn twenty publish --tag beta ``` ### Как работает обнаружение приложений в маркетплейсе Сервер Twenty синхронизирует каталог маркетплейса из реестра npm **каждый час**. You can trigger the sync immediately instead of waiting: ```bash filename="Terminal" yarn twenty catalog-sync # To target a specific remote: # yarn twenty catalog-sync --remote production ``` The metadata shown in the marketplace comes from your `defineApplication()` config — fields like `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl`, and `termsUrl`. Если ваше приложение не определяет `aboutDescription` в `defineApplication()`, маркетплейс автоматически использует `README.md` вашего пакета из npm в качестве содержимого страницы «О приложении». Это означает, что вы можете поддерживать единый README как для npm, так и для маркетплейса Twenty. Если вы хотите другое описание в маркетплейсе, явно задайте `aboutDescription`. ### Публикация через CI Use this GitHub Actions workflow to publish automatically on every release (uses [OIDC](https://docs.npmjs.com/trusted-publishers)): ```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 ``` Для других 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). ## Установка приложений Once an app is published (npm) or deployed (tarball), workspaces can install it through the UI. Go to the **Settings > Applications** page in Twenty, where both marketplace and tarball-deployed apps can be browsed and installed. {/* TODO: add screenshot of the UI when the app is registered */} You can also install apps from the command line: ```bash filename="Terminal" yarn twenty install ```