# Переменные окружения

Список поддерживаемых [переменных среды](https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%80%D0%B5%D0%B4%D1%8B) клиентом **tuna**.

## Глобальные

| Имя             | Описание                                                                                                                     |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| TUNA_CONFIG     | Путь к [конфигурационному файлу](https://tuna.am/docs/guides/config-file.md)                                                 |
| TUNA_LOG        | Путь к файлу журнала: /file/to/file.log, stdout, stderr" (умолчание "stdout")                                                |
| TUNA_LOG_LEVEL  | Уровень логирования: debug, info, warn, error, fatal (умолчание "info")                                                      |
| TUNA_LOG_FORMAT | Формат логирования: text, json (умолчание "text")                                                                            |
| TUNA_TUI        | Включить (`1`) или выключить (`0`) [интерфейс в терминале](https://tuna.am/docs/tunnels/tui.md)                              |
| TUNA_NO_PROMPT  | Не задавать вопросов, например подтверждения удаления: команда без `--yes` завершится ошибкой, как при запуске без терминала |

## Общие

| Имя           | Описание                                                                               |
| ------------- | -------------------------------------------------------------------------------------- |
| TUNA_PORT     | Порт или адрес назначения (например, `8080` или `10.0.0.10:5432`)                      |
| TUNA_TOKEN    | Токен для создания туннеля                                                             |
| TUNA_LOCATION | [Регион](https://tuna.am/docs/tunnels/guides/locations.md) подключения (`nl` или `ru`) |
| TUNA_API_KEY  | [API-ключ](https://tuna.am/docs/guides/api.md)                                         |

## Для HTTP туннелей

| Имя                        | Описание                                                                                                               |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| TUNA_BASIC_AUTH            | Добавить базовую аутентификацию (например, user:pass)                                                                  |
| TUNA_CIDR_ALLOW            | Отклонять соединения, которые не соответствуют заданным CIDR                                                           |
| TUNA_CIDR_DENY             | Отклонить соединения, соответствующие заданным CIDR                                                                    |
| TUNA_CORS                  | Включить добавление CORS заголовков и автоматическую обработку OPTIONS запросов                                        |
| TUNA_DOMAIN                | Зарезервированный домен                                                                                                |
| TUNA_FILE_SERVER           | Путь к каталогу для публикации файлов по http                                                                          |
| TUNA_FILE_SERVER_SPA       | Путь к каталогу для публикации SPA сайта                                                                               |
| TUNA_HTTPS_REDIRECT        | Перенаправлять запросы на https (`true` или `false`)                                                                   |
| TUNA_INSPECT               | Включить или отключить [инспектор запросов](https://tuna.am/docs/tunnels/http/inspect.md) (`true` или `false`)         |
| TUNA_INSPECT_ADDR          | Задать адрес для инспектора запросов                                                                                   |
| TUNA_KEY_AUTH              | Добавить ключ аутентификации, переданный в заголовке `X-Token`                                                         |
| TUNA_POLICY_FILE           | Путь файлу конфигурации с правилами (по умолчанию `.tuna.yml`)                                                         |
| TUNA_POLICY_URL            | [Ссылка](https://tuna.am/docs/traffic-policy.md#policy-url) на файл с правилами в формате YAML или JSON (только https) |
| TUNA_QR_CODE               | Сгенерировать и показать QR-код                                                                                        |
| TUNA_RATE_LIMIT            | Ограничьте количество запросов к вашему приложению (например, 20 для 20 запросов/сек)                                  |
| TUNA_REQUEST_HEADER        | Добавление заголовков для передачи локальному сервису (например, `host:tuna.am`)                                       |
| TUNA_RESPONSE_HEADER       | Добавление заголовков для передачи клиенту (например, `env:test`)                                                      |
| TUNA_SUBDOMAIN             | Зарезервированный поддомен                                                                                             |
| TUNA_TLS_SKIP_VERIFY       | Игнорировать проверку TLS                                                                                              |
| TUNA_VERIFY_WEBHOOK        | Проверить, подписаны ли вебхуки этим поставщиком (например, gitlab)                                                    |
| TUNA_VERIFY_WEBHOOK_SECRET | Секрет, используемый провайдером для подписи вебхуков, если таковые имеются                                            |
| TUNA_WEBDAV                | Путь к каталогу для публикации файлов по WebDAV                                                                        |

## Для TCP туннелей

| Имя                 | Описание                                                     |
| ------------------- | ------------------------------------------------------------ |
| TUNA_TCP_PORT       | Номер зарезервированного порта или алиас                     |
| TUNA_QR_CODE        | Сгенерировать и показать QR-код                              |
| TUNA_CIDR_ALLOW     | Отклонять соединения, которые не соответствуют заданным CIDR |
| TUNA_CIDR_DENY      | Отклонить соединения, соответствующие заданным CIDR          |
| TUNA_PROXY_PROTOCOL | Включить PROXY Protocol (`1` или `2`)                        |

## Для SSH туннелей

| Имя                    | Описание                                                                                                                                                                |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| TUNA_TCP_PORT          | Номер зарезервированного порта или алиас                                                                                                                                |
| TUNA_SSH_AUTH          | Задать [статические username/password](https://tuna.am/docs/tunnels/ssh.md#%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%87%D0%BD%D1%8B%D0%B9-%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C) |
| TUNA_SSH_PASSWORD_AUTH | Включить или выключить аутентификацию с помощью логин/пароль                                                                                                            |
| TUNA_RECORD_SESSION    | [Запись SSH сессий](https://tuna.am/docs/tunnels/ssh.md#%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C-ssh-%D1%81%D0%B5%D1%81%D1%81%D0%B8%D0%B9)                                  |
| TUNA_CIDR_ALLOW        | Отклонять соединения, которые не соответствуют заданным CIDR                                                                                                            |
| TUNA_CIDR_DENY         | Отклонить соединения, соответствующие заданным CIDR                                                                                                                     |

## Для TRIGGER туннелей

| Имя                              | Описание                                                                    |
| -------------------------------- | --------------------------------------------------------------------------- |
| TUNA_TCP_PORT                    | Номер зарезервированного порта или алиас                                    |
| TUNA_TRIGGER_SMTP_USERNAME       | Имя пользователя для подключения по SMTP                                    |
| TUNA_TRIGGER_SMTP_PASSWORD       | Пароль пользователя для подключения по SMTP                                 |
| TUNA_TRIGGER_SMTP_LISTEN_ADDRESS | Локальный адрес SMTP-сервера триггера (умолчание "127.0.0.1:1025")          |
| TUNA_TRIGGER_WEBHOOK_SECRET      | Секрет, который будет проверяться со значением заголовка `X-Webhook-Secret` |

## Для Postgres/Redis туннелей

| Имя               | Описание                                                                                                       |
| ----------------- | -------------------------------------------------------------------------------------------------------------- |
| TUNA_TCP_PORT     | Номер зарезервированного порта или алиас                                                                       |
| TUNA_QR_CODE      | Сгенерировать и показать QR-код                                                                                |
| TUNA_INSPECT      | Включить или отключить [инспектор запросов](https://tuna.am/docs/tunnels/http/inspect.md) (`true` или `false`) |
| TUNA_INSPECT_ADDR | Задать адрес для инспектора запросов                                                                           |
| TUNA_CIDR_ALLOW   | Отклонять соединения, которые не соответствуют заданным CIDR                                                   |
| TUNA_CIDR_DENY    | Отклонить соединения, соответствующие заданным CIDR                                                            |

## Для Kubernetes туннелей

| Имя                       | Описание                                                                 |
| ------------------------- | ------------------------------------------------------------------------ |
| KUBECONFIG                | Путь к kubeconfig (один файл)                                            |
| TUNA_K8S_CONTEXT          | Контекст kubeconfig (по умолчанию `current-context`)                     |
| TUNA_K8S_SERVICE_ACCOUNT  | Сервисный аккаунт для гостя (`[namespace/]name`)                         |
| TUNA_K8S_NAMESPACE        | Ограничить доступ одним namespace                                        |
| TUNA_K8S_PRESET           | Пресет ограничений: `view`, `observer`, `debug`, `open`                  |
| TUNA_K8S_READ_ONLY        | Разрешить только чтение                                                  |
| TUNA_K8S_NO_DELETE        | Запретить удаление ресурсов                                              |
| TUNA_K8S_DENY_RESOURCE    | Запрещённые ресурсы (например, `secrets,configmaps`)                     |
| TUNA_K8S_DENY_SUBRESOURCE | Запрещённые субресурсы (`exec`, `attach`, `portforward`, `log`, `proxy`) |
| TUNA_K8S_TTL              | Срок действия доступа (например, `4h`, `0` — бессрочно)                  |
| TUNA_K8S_DOWNLOAD_LIMIT   | Сколько раз можно скачать kubeconfig (`0` — без лимита)                  |

## Для публикации 1С

Работают также переменные [HTTP туннелей](#%D0%B4%D0%BB%D1%8F-http-%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D0%B5%D0%B9): доступ, адрес, инспектор.

| Имя                 | Описание                                                                       |
| ------------------- | ------------------------------------------------------------------------------ |
| TUNA_1C_HOME        | Каталог установки 1С:Предприятие                                               |
| TUNA_1C_PLATFORM    | Разрядность платформы 1С: `x64` или `x86`                                      |
| TUNA_1C_PORT        | Локальный порт веб-сервера (по умолчанию случайный свободный)                  |
| TUNA_1C_PUBLISH_DIR | Каталог с файлами [публикации](https://tuna.am/docs/tunnels/1c.md#publish-dir) |

## Создание и управление сервисами

| Имя                           | Описание                                                    |
| ----------------------------- | ----------------------------------------------------------- |
| TUNA_SERVICE_NAME             | Имя сервиса                                                 |
| TUNA_SERVICE_INSTALL_USER     | Пользователь от под имени которого будет запускаться сервис |
| TUNA_SERVICE_INSTALL_PASSWORD | Пароль при указании иного пользователя (только Windows)     |

## Множественный запуск туннелей

| Имя                     | Описание                                                       |
| ----------------------- | -------------------------------------------------------------- |
| TUNA_START_TUNNELS_FILE | Путь файлу конфигурации с туннелями (по умолчанию `.tuna.yml`) |
| TUNA_START              | Имя туннеля для запуска                                        |
| TUNA_START_TAGS         | Теги туннелей для запуска                                      |
| TUNA_START_ALL          | Запуск всех туннелей                                           |

## Обнаружение портов

| Имя                 | Описание                                           |
| ------------------- | -------------------------------------------------- |
| TUNA_DETECT_SECONDS | Промежуток времени выделенный на обнаружение порта |

## Секреты

| Имя                              | Описание                                                                                                   |
| -------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| TUNA_SECRETS_SCOPE               | Конфигурация каталога для области действия (по умолчанию `.`)                                              |
| TUNA_SECRETS_PROJECT             | Алиас проекта                                                                                              |
| TUNA_SECRETS_CONFIG              | Алиас конфигурации                                                                                         |
| TUNA_SECRETS_FORMAT              | Формат вывода (json, yaml, env, env-no-quotes или docker) (по умолчанию `json`)                            |
| TUNA_SECRETS_NO_FILE             | Печатать на stdout (по умолчанию `false`)                                                                  |
| TUNA_SECRETS_WATCH               | Автоматически перезапускать процесс при изменении секретов (по умолчанию `false`)                          |
| TUNA_SECRETS_NO_INTERACTIVE      | Не спрашивать проект и конфигурацию в `tuna secrets setup`, а завершаться ошибкой (по умолчанию `false`)   |
| TUNA_SECRETS_FALLBACK_PASSPHRASE | Парольная фраза для файла офлайн-режима `tuna secrets run`                                                 |
| TUNA_SECRETS_MOUNT_PATH          | Путь к секретам при `tuna secrets run --mount`. Переменную устанавливает сам клиент для дочернего процесса |

## Работа с direnv

[direnv](https://direnv.net) — это менеджер переменных среды для терминала, он позволяет автоматически загружать и выгружать переменные среды в зависимости от текущего каталога – это позволяет иметь переменные среды, специфичные для каждого проекта, над которым вы работаете.

Перед каждым приглашением direnv проверяет наличие файла `.envrc` в текущем и родительском каталогах и если файл существует, он загружается в подшаблон bash, и все экспортированные переменные затем захватываются direnv, а затем становятся доступными для оболочки.

Перед началом использования direnv, его необходимо установить, инструкция по установке доступна в [официальной документации](https://direnv.net/#getting-started), после этого в каталоге проекта нужно создать файл `.envrc` с настройками tuna, например:

```shell
export TUNA_PORT=8080
export TUNA_SUBDOMAIN=my-project

```

При переходе в каталог проекта и вызове команды `tuna http` у вас будет создаваться туннель с учетом настроек из файла `.envrc`:

```shell
% tuna http
INFO[13:00:00] Welcome to Tuna
INFO[13:00:00] Account: test (Paid till 05.04.2024)
INFO[13:00:00] Web Interface: http://127.0.0.1:4040
INFO[13:00:00] Forwarding https://my-project.ru.tuna.am -> 127.0.0.1:8080

```
