# nolay.toml

URL: https://docs.nolay.ru/reference/nolay-toml/
Updated: 2026-09-23

> Все поля файла настроек проекта с типами и значениями по умолчанию.

`nolay.toml` лежит в корне репозитория проекта. Все поля необязательны: без файла агент определит сборщик и порт сам. Файл в репозитории имеет приоритет над формой в панели, а панель никогда не умеет больше, чем этот файл.

Секреты в `nolay.toml` не пишутся: файл лежит в репозитории. Их задают в панели на странице [Секреты](/guides/secrets/).

## Пример

```toml
builder = "auto"

[run]
port = 3000

[env]
NODE_ENV = "production"

[health]
path = "/healthz"

[proxy]
domains = ["app.example.com"]
redirect_www = true

[[volumes]]
name = "data"
path = "/app/data"

[backup]
schedule = "0 3 * * *"
targets = ["volumes"]
```

## Поля

Таблица собрана из схемы протокола `nolay-toml.v1.json`. Путь с `[]` означает элемент списка таблиц, например `[[cron]]`; `source(git)` и `source(archive)` это два варианта секции `[source]`.

| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
| `builder` | string | `"auto"` | Как собирается образ. `auto` выбирает сам: свой Dockerfile, затем шаблон Nolay, затем Railpack. `compose` пока не поддержан, `nixpacks` оставлен для старых проектов и в `auto` не участвует. Значения: `auto`, `nixpacks`, `railpack`, `dockerfile`, `compose`, `static`, `image`, `template:node`, `template:next-standalone`, `template:python-uvicorn`, `template:python-gunicorn`, `template:go`, `template:bun`, `template:ruby`, `template:static`. |
| `backup` | table |  | Расписание бэкапов в ваше S3-хранилище. Нет секции, нет бэкапов. Ключи S3 здесь не пишутся: это секреты проекта `NOLAY_S3_*`. |
| `backup.db` | table |  | Как снимать дамп базы. Нужна, если в `targets` есть `db`. |
| `backup.db.container_env` | string |  | Имя переменной с паролем базы, например `POSTGRES_PASSWORD`. Само значение агент берёт из секретов проекта. |
| `backup.db.database` | string |  | Имя базы для `postgres` и `mysql`. |
| `backup.db.kind` | string | `"postgres"` | Какая база в контейнере проекта. Значения: `postgres`, `mysql`, `sqlite`. |
| `backup.db.service` | string |  | Имя сервиса каталога из `uses`, из которого снимать дамп. Пользователь, база и пароль тогда берутся из сервиса. |
| `backup.db.sqlite_path` | string |  | Путь к файлу базы внутри контейнера, только для `sqlite`. |
| `backup.db.user` | string |  | Пользователь базы для `postgres` и `mysql`. Это не секрет. |
| `backup.keep_daily` | integer | `7` | Сколько суточных копий хранить. |
| `backup.keep_monthly` | integer | `3` | Сколько месячных копий хранить. |
| `backup.keep_weekly` | integer | `4` | Сколько недельных копий хранить. |
| `backup.schedule` | string | `"0 3 * * *"` | Расписание в формате cron, пять полей, время UTC. |
| `backup.targets` | array of string | `["volumes"]` | Что бэкапить: тома проекта, дамп базы или оба. Значения: `volumes`, `db`. |
| `build` | table |  | Параметры сборки образа. |
| `build.args` | table of string |  | Аргументы сборки (`ARG` в Dockerfile). Ключи заглавными латинскими буквами, цифрами и `_`. Секретам здесь не место: файл лежит в репозитории. |
| `build.base_dir` | string |  | Зарезервировано. Агент пока не читает это поле, подкаталог репозитория задаётся в `source.subdir`. |
| `build.build_cmd` | string |  | Команда сборки для Railpack, nixpacks и шаблонов, например `npm run build`. |
| `build.dockerfile` | string |  | Путь к Dockerfile внутри каталога проекта. По умолчанию `Dockerfile`. |
| `build.image` | string |  | Готовый образ для `builder = "image"`, например `nginx:alpine`. Для остальных сборщиков не используется. |
| `build.install_cmd` | string |  | Только nixpacks: заменяет его шаг установки целиком. Без него nixpacks сам ставит зависимости по `package.json` и похожим файлам. |
| `build.static_dir` | string |  | Каталог с уже собранной статикой для `builder = "static"`, по умолчанию `dist`. Фронтенд агент не собирает. |
| `cron` | array of table |  | Задачи по расписанию. Каждый срок запускает одноразовый контейнер из образа проекта. Не больше 20 задач на проект. |
| `cron[].cmd` | string |  | Команда, которая выполняется как `sh -c <cmd>` в контейнере задачи. |
| `cron[].name` | string |  | Имя задачи, уникальное в проекте: строчные латинские буквы, цифры и дефис, до 32 символов. |
| `cron[].schedule` | string |  | Расписание cron, пять полей, UTC. Если прошлый запуск ещё идёт, срок пропускается. |
| `cron[].timeout_secs` | integer | `900` | Сколько секунд может идти один запуск, от 1 до 21600. Потом контейнер останавливается. |
| `env` | table of string |  | Несекретные переменные окружения. Секреты задаются в панели; если ключ есть и там, и здесь, побеждает секрет. |
| `health` | table |  | Проверка готовности. Нет секции: проект готов, когда контейнер работает. Есть `path`: агент ждёт ответа 2xx или 3xx по этому пути. |
| `health.interval_sec` | integer | `10` | Пауза между попытками проверки, секунды. |
| `health.path` | string |  | Путь HTTP-проверки, например `/healthz`. Без него проверяется `HEALTHCHECK` образа. |
| `health.timeout_sec` | integer | `60` | Сколько всего ждать готовности, секунды. Не дождались: новая версия не включается, старая продолжает работать. |
| `protection` | table |  | Защита домена на входном прокси. Нет секции: действуют значения по умолчанию из этой таблицы. |
| `protection.allow_ips` | array of string | `[]` | Адреса и подсети, которым открыт домен. Пусто: доступ открыт всем. Проверка сертификата ACME не закрывается никогда. |
| `protection.block_bad_bots` | boolean | `true` | Отвечать 403 известным сканерам по `User-Agent`. Поисковых роботов в списке нет. |
| `protection.frame_options` | string | `"SAMEORIGIN"` | Значение заголовка `X-Frame-Options`: `SAMEORIGIN` или `DENY`. Убрать поле: заголовок не ставится. |
| `protection.https_redirect` | boolean | `true` | Перенаправлять HTTP на HTTPS кодом 308. Для `*.localhost`, `*.test` и IP не действует. |
| `protection.max_body_mb` | integer | `32` | Предельный размер тела запроса в МиБ. Больше: ответ 413. |
| `protection.rate_limit` | string | `"300/1m"` | Лимит запросов с одного IP в виде `<число>/<окно>`, например `300/1m`, или `off`. |
| `protection.waf` | string | `"off"` | Фильтр атак Coraza с правилами OWASP CRS. `low` почти без ложных срабатываний, `medium` строже. Стоит около 100 МиБ памяти. Значения: `off`, `low`, `medium`. |
| `protection.waf_exclude` | array of string | `[]` | Пути, на которых фильтр не работает, по префиксу, например `/api/upload`. |
| `proxy` | table |  | Домены проекта. Нет доменов: проект доступен только внутри сети Docker на сервере. |
| `proxy.domains` | array of string | `[]` | Домены в нижнем регистре, без `*`. Сертификат выпускает агент на вашем сервере. |
| `proxy.redirect_www` | boolean | `false` | Перенаправлять `www.<домен>` на `<домен>` кодом 308. |
| `resources` | table |  | Лимиты контейнера проекта. |
| `resources.cpu` | float |  | Доля процессора, например `0.5` или `2`. |
| `resources.mem_mb` | integer |  | Лимит памяти в МиБ для контейнера и для сборки. Не задан: сборка идёт с лимитом 512 МиБ. |
| `run` | table |  | Как запускается проект. |
| `run.expose` | array of string | `[]` | Зарезервировано, агент пока не читает это поле. |
| `run.port` | integer |  | Порт, на котором отвечает приложение. У шаблонов свой порт по умолчанию, задавать не обязательно. |
| `run.post_deploy` | string |  | Зарезервировано, агент пока не читает это поле. |
| `run.pre_deploy` | string |  | Зарезервировано, агент пока не читает это поле. Миграции запускайте из команды запуска приложения. |
| `run.privileged_caps` | array of string | `[]` | Linux capability сверх базового набора, без префикса `CAP_`, не больше восьми. Каждая пишется в журнал агента. |
| `run.start_cmd` | string |  | Команда запуска, если сборщик не угадал её сам, например `npm start`. |
| `source` | table |  | Откуда агент берёт код. Обычно секцию пишет панель, в репозитории её держать не нужно. |
| `source(git).commit` | string |  | Точный коммит. Проставляет панель, в репозитории это поле не пишут. |
| `source(git).kind` (обязательно) | string |  | `git` для репозитория. Значения: `git`. |
| `source(git).ref` | string | `"main"` | Ветка, тег или хеш коммита. |
| `source(git).subdir` | string |  | Подкаталог репозитория, из которого идёт сборка. Не задан: корень. |
| `source(git).url` | string |  | Адрес репозитория по HTTPS или SSH. Логин и токен в адрес не пишутся: для закрытого репозитория есть секреты `NOLAY_GIT_TOKEN` и `NOLAY_GIT_SSH_KEY`. |
| `source(archive).format` | string | `"tar_gz"` | Формат архива. Проставляет панель при загрузке. Значения: `tar_gz`, `zip`, `tar`, `tar_zst`, `tar_xz`, `tar_bz2`. |
| `source(archive).kind` (обязательно) | string |  | `archive` для архива, загруженного через панель. Значения: `archive`. |
| `source(archive).sha256` | string |  | Контрольная сумма архива. Агент сверяет её до распаковки. |
| `source(archive).size` | integer | `0` | Размер архива в байтах. |
| `source(archive).upload_id` | string | `"00000000-0000-0000-0000-000000000000"` | Номер загрузки. Проставляет панель. |
| `uses` | array of string | `[]` | Сервисы каталога сервера, к которым подключается проект, например `["db", "cache"]`. Строка подключения приходит секретом `DATABASE_URL`, `REDIS_URL` или `MONGO_URL`. |
| `volumes` | array of table |  | Тома Docker для постоянных данных. Без томов содержимое контейнера пропадает при следующем деплое. |
| `volumes[].name` (обязательно) | string |  | Имя тома в проекте: строчные латинские буквы, цифры и дефис. |
| `volumes[].path` (обязательно) | string |  | Абсолютный путь внутри контейнера, куда монтируется том. |
| `workers` | array of table |  | Фоновые процессы: контейнеры из того же образа без порта и домена. Не больше 10 на проект. |
| `workers[].cmd` | string |  | Команда запуска как `sh -c <cmd>`. Второе имя ключа `start_cmd`. |
| `workers[].name` | string |  | Имя процесса, уникальное в проекте. |
| `workers[].replicas` | integer | `1` | Сколько одинаковых контейнеров держать, от 1 до 10. |
| `workers[].resources` | table |  | Лимиты процесса. Не заданы: берутся из `[resources]` проекта. |
| `workers[].resources.cpu` | float |  | Доля процессора. |
| `workers[].resources.mem_mb` | integer |  | Лимит памяти в МиБ. |
