Node.JS Server

Данная конфигурация подходит если проект использует окружение node.js и пакетный менеджер npm. В этом случае проект может быть написан на таких языках как JavaScript или TypeScript. Данная конфигурация предназначена для серверных приложений. Для браузерных приложений см. Node.JS Browser.

Написать yaml файл можно как самостоятельно, используя инструкцию ниже, так и воспользоваться нашим генератором yaml, перейдя по ссылке.

Секция meta

Секция meta файла amvera.yml будет выглядеть следующим образом:

meta:
  environment: node
  toolchain:
    name: npm
    version: 18

Из параметров, которые можно здесь менять это meta.toolchain.version. Логически это версия node.js, которую нужно использовать для работы. Технически значение version подставляется в имя образа Docker, который будет использован.

Как для фазы сборки, так и для фазы запуска используется образ node:${meta.toolchain.version}. Так как для обеих фаз используется один и тот же образ, meta.toolchain.version может быть любым тегом этого образа на докер хабе.

Секция build

Секция build может содержать следующие необязательные параметры:

  • skip

  • additionalCommands

  • artifacts

Параметр skip может использоваться если у проекта нет зависимостей и/или отсутствует файл package.json. Указание skip: yes будет означать, что фаза сборки будет целиком пропущена.

Во время сборки скрипт выполняет команду npm install. Если нужно выполнить дополнительные команды (например, npm run build), используется параметр additionalCommands:

build:
  additionalCommands: npm run build

В этом случае во время сборки будет выполнена команда npm install && npm run build.

Параметр artifacts позволяет указать какие файлы должны попасть в итоговое приложение. По умолчанию будут скопированы все файлы в корень папки приложения.

Параметр artifacts в отличие от других параметров это не строка, а словарь. Ключ в нем это маска файлов источника копирования, а значение: папка, в которую будут скопированы файлы.

Так, значение artifacts по умолчанию:

build:
  artifacts:
    "*": /

Мы используем следующие правила копирования:

  • в качестве источника указываются только относительные пути (без / в начале);

  • если под маску попал файл, файл будет скопирован в папку назначения без исходного пути;

  • если под маску попала папка, она будет скопирована целиком в папку назначения вместе со всем содержимым.

Секция run

Секция run может содержать следующие параметры:

  • scriptName

  • scriptArguments

  • nodeArguments

  • command

  • persistenceMount

  • persistenceMount

Параметр scriptName является обязательным.

Для запуска используется команда node ${run.nodeArguments} ${run.scriptName} ${run.scriptArguments}.

Параметр scriptName это путь до скрипта, который нужно запустить, относительно корня репозитория.

run:
  scriptName: index.js

Если нужно передать дополнительные аргументы node для запуска, их нужно указать в параметре nodeArguments.

Если нужно передать дополнительные аргументы сприкту для запуска, их нужно указать в параметре scriptArguments.

Параметр command это альтернативный способ запустить приложение. При использовании этого параметра игнорируются параметры scriptName, scriptArguments и nodeArguments. Он должен содержать полную команду запуска:

run:
  command: npm run start

Параметр persistenceMount позволяет указать, в какую директорию будет примонтирована папка с постоянным хранилищем. По умолчанию имеет значение /data.

Параметр containerPort позволяет указать какой порт слушает приложение. По умолчанию имеет значение 80.

Рецепты

Минимальный файл amvera.yml

meta:
  environment: node
  toolchain:
    name: npm
    version: 18

run:
  scriptName: index.js

Приложение на Express.JS

meta:
  environment: node
  toolchain:
    name: npm
    version: 18

run:
  scriptName: index.js
  containerPort: 3000

Приложение с фазой сборки (Webpack, tsc и т.п.)

Данный файл предполагает, что скрипт запуска сборки прописан в задаче build, а также скрипт запуска приложения прописан в задаче start в файле package.json

meta:
  environment: node
  toolchain:
    name: npm
    version: 18

build:
  additionalCommands: npm run build

run:
  command: npm run start
  containerPort: 3000