#Задать порт приложения
PATCH /v1/infra/servers/:id/port
Задаёт TCP-порт, на который агент туннеля проксирует входящие HTTPS-запросы с субдомена. По умолчанию туннель идёт на :3000 — это стандарт платформы, большинство приложений должны слушать именно его. Этот эндпоинт нужен в редких случаях: приложение по историческим причинам работает на другом порту или вы хотите 0 (авто-определение), чтобы агент сам нашёл слушающий порт. Порты 1–1023 запрещены — это системные (SSH, HTTP, HTTPS, SQL), их использование создало бы риск перенаправления трафика на служебные процессы.
#Параметры
| Параметр | В | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
path | string (UUID) | да | ID BLACKHOLE-сервера, status: running, blackholeStatus: CONNECTED |
#Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
port |
number | да | 0 (авто-определение) или 1024–65535. Порты 1–1023 отклоняются с PORT_RESTRICTED |
#Примеры
#curl — личный ключ
# Установить порт 8080
curl -X PATCH https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/port \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"port": 8080}'
# Автоматическое определение
curl -X PATCH https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/port \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"port": 0}'
#curl — OAuth-приложение
curl -X PATCH https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/port \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{"port": 8080}'
#JavaScript — личный ключ
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}/port`,
{
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ port: 8080 }),
}
)
const { data } = await res.json()
console.log(`Порт приложения: ${data.port}`)
#JavaScript — OAuth-приложение
await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}/port`,
{
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({ port: 0 }),
}
)
#Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data.port |
number | Итоговый порт. При port: 0 вернётся 3000 (значение по умолчанию при автоопределении) |
#Пример ответа
{
"success": true,
"data": { "port": 8080 }
}
#Пример ответа при ошибке
400 — системный порт запрещён:
{
"success": false,
"error": {
"code": "PORT_RESTRICTED",
"message": "System ports (1-1023) are not allowed. Use port >= 1024 or 0 for auto-detect"
}
}
#Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | VALIDATION_ERROR |
port не число, вне диапазона 0–65535 |
| 400 | PORT_RESTRICTED |
Порт в диапазоне 1–1023 (системные порты) |
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 401 | INVALID_API_KEY |
Неверный или просроченный API-ключ |
| 404 | NOT_FOUND |
Сервер не BLACKHOLE + RUNNING, удалён или принадлежит другому API-ключу |
| 409 | SERVER_NOT_READY |
Агент туннеля не в статусе CONNECTED |
| 429 | RATE_LIMIT_EXCEEDED |
Превышен общий лимит запросов платформы |
| 502 | GATEWAY_ERROR |
Gateway не смог доставить команду агенту |
Полный список общих ошибок API — Ошибки.
#Известные особенности
- Системные порты (1–1023) запрещены не случайно. SSH (22), HTTP (80), HTTPS (443), DNS (53), PostgreSQL (5432), MySQL (3306) — открытие туннеля на них создало бы риск перенаправления внешнего трафика на служебные процессы внутри виртуальной машины.
- Как работает
port: 0. Агент сканирует/proc/net/tcpи/proc/net/tcp6, находит процесс, слушающий на прикладном порту (≥1024), и проксирует туда. Полезно для приложений, выбирающих порт динамически при запуске. - Значение сохраняется между перезапусками агента. Платформа пишет
localPortв базу сервера — после `/repair` или перезагрузки агент возьмёт то же значение. При/deployс явнымportзначение перезапишется. port: 0в ответе возвращается как3000. Это не ошибка: «при автоопределении возвращаем 3000, если ничего подходящего не нашли». Реальный слушающий порт проверяйте через `/exec` с командойss -tlnp.
#Смотрите также
- Полный деплой — поле
portв/deployтакже конфигурирует туннель. - Метрики туннеля — есть ли HTTP-соединения и
lastRequestAt. - Выполнить команду —
ss -tlnpдля проверки слушающих портов.