Документация по развертыванию приложений на JVM

Полная документация Amvera Cloud по ссылке https://docs.amvera.ru/

В разделе собрана базовая документация для быстрого ознакомления с процессом развертывания на время восстановления основного портала с документацией
JVM Gradle

Данная конфигурация подходит, если проект собирается при помощи 
Gradle и запускается на JVM. В этом случае проект может быть написан
на таких языках как Java или Kotlin.

#### Секция meta

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

```
meta:
  environment: jvm
  toolchain:
    name: gradle
    version: 17
```

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

Для фазы сборки это `gradle:jdk${meta.toolchain.version}`. 
Допустимые значения можно увидеть на странице [докер хаба](https://hub.docker.com/_/gradle/tags?page=1&name=jdk).

Для фазы запуска это `bellsoft/liberica-openjre-debian:${meta.toolchain.version}`. 
Допустимые значения можно увидеть на странице [докер хаба](https://hub.docker.com/r/bellsoft/liberica-openjre-debian/tags).

> ##### Важно
>
> Значение `meta.toolchain.version` должно быть допустимым как для фазы сборки, 
так и для фазы запуска. Лучше всего подходит простой номер LTS версии JDK.

#### Секция build

В секции `build` могут быть указаны следующие параметры:

 - `image`
 - `args`
 - `artifacts`

Параметр `image` позволяет использовать другой образ для сборки, а не тот, который предлагается Amvera. Образ должен удовлетворять следующим требованиям:

 - исходный код для сборки ожидается в папке /app (или образу без разницы, где будет находиться исходный код);
 - в образе присутствует команда `gradle`, которую можно вызвать по имени 
(без указания абсолютного пути) с параметром `build`.

Параметр `args` позволяет указать дополнительные параметры команде 
`gradle build ${build.args}`. Например, чтобы задать свойство `server.port`:

```
build:
  args: -Dserver.port=80
```

В этом случае для сборки будет выполнена команда `gradle build -Dserver.port=80`.

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

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

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

```
build:
  artifacts:
    "build/libs/*.jar": /
```

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

 - в качестве источника указываются только относительные пути (без / в начале);
 - если под маску попал файл, файл будет скопирован в папку назначения 
без исходного пути;
 - если под маску попала папка, она будет скопирована целиком в папку 
назначения вместе со всем содержимым.

#### Секция run

В сети `run` могут быть использованы следующие параметры:

 - `jarName`
 - `image`
 - `persistenceMount`
 - `containerPort`

Параметр `jarName` является обязательным. Он указывает путь до файла 
с расширением `jar`, который нужно запустить командой `java -jar ${run.jarName}`. 
Пример:

```
run:
  jarName: bin/bag-end.jar
```

Параметр `image` позволяет использовать другой образ для сборки, а не тот, 
который предлагается Amvera. Образ должен удовлетворять следующим 
требованиям:

 - результат сборки ожидается в папке /app (или образу без разницы, 
где будет находиться результат сборки);
 - в образе присутствует команда `java`, которую можно вызвать по имени 
(без указания абсолютного пути) с параметрами `-jar имя_образа`.

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

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

### Рецепты

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

```
meta:
  environment: jvm
  toolchain:
    name: gradle
    version: 17

run:
  jarName: bag-end.jar
```

#### Spring Boot

```
meta:
  environment: jvm
  toolchain:
    name: gradle
    version: 17

run:
  jarName: bag-end-1.0.0.jar
  containerPort: 8080
```
JVM Maven

Данная конфигурация подходит, если проект собирается при помощи Maven 
и запускается на JVM. В этом случае проект может быть написан на таких языках 
как Java или Kotlin.

#### Секция meta

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

```
meta:
  environment: jvm
  toolchain:
    name: maven
    version: 17
```

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

Для фазы сборки это `maven:3-openjdk-${meta.toolchain.version}`. 
Допустимые значения можно увидеть на странице [докер хаба](https://hub.docker.com/_/maven/tags?page=1&name=3-openjdk).

Для фазы запуска это `bellsoft/liberica-openjre-debian:${meta.toolchain.version}`. 
Допустимые значения можно увидеть на странице [докер хаба](https://hub.docker.com/r/bellsoft/liberica-openjre-debian/tags).

> ##### Важно
>
> Значение `meta.toolchain.version` должно быть допустимым как для фазы сборки, 
так и для фазы запуска. Лучше всего подходит простой номер LTS версии JDK.

#### Секция build

В секции `build` могут быть указаны следующие параметры:

 - `image`
 - `args`
 - `artifacts`

Параметр `image` позволяет использовать другой образ для сборки, а не тот, который предлагается Amvera. Образ должен удовлетворять следующим требованиям:

 - исходный код для сборки ожидается в папке /app (или образу без разницы, где будет находиться исходный код);
 - в образе присутствует команда `mvn`, которую можно вызвать по имени (без указания абсолютного пути) с параметрами `clean package`.

Параметр `args` позволяет указать дополнительные параметры команде `mvn clean package ${build.args}`. Например, если в проекте используется Spring Boot, может потребоваться следующий параметр:

```
build:
  args: spring-boot:repackage
```

В этом случае для сборки будет выполнена команда `mvn clean package spring-boot:repackage`.

Указывать можно несколько параметров, все они будут подставлены в команду. 
Например, если нужно указать еще и профиль мавен:

```
build:
  args: spring-boot:repackage -Pproduction
```

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

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

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

```
build:
  artifacts:
    "target/*.jar": /
```

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

 - в качестве источника указываются только относительные пути (без / в начале);
 - если под маску попал файл, файл будет скопирован в папку назначения без 
исходного пути;
 - если под маску попала папка, она будет скопирована целиком в папку назначения 
вместе со всем содержимым.

#### Секция run

В секции `run` могут быть использованы следующие параметры:

 - `jarName`
 - `image`
 - `persistenceMount`
 - `containerPort`

Параметр `jarName` является обязательным. Он указывает путь до файла с 
расширением `jar`, который нужно запустить командой `java -jar ${run.jarName}`. 
Пример:

```
run:
  jarName: bin/bag-end.jar
```

Параметр `image` позволяет использовать другой образ для сборки, а не тот, который предлагается Amvera. Образ должен удовлетворять следующим требованиям:

 - результат сборки ожидается в папке /app (или образу без разницы, где будет находиться результат сборки);
 - в образе присутствует команда `java`, которую можно вызвать по имени (без указания абсолютного пути) с параметрами `-jar имя_файла`.

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

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

### Рецепты

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

```
meta:
  environment: jvm
  toolchain:
    name: maven
    version: 17

run:
  jarName: bag-end.jar
```

#### Spring Boot

```
meta:
  environment: jvm
  toolchain:
    name: maven
    version: 17

build:
  args: spring-boot:repackage -Pproduction

run:
  jarName: bag-end-1.0.0.jar
  containerPort: 8080
```
Хотите попробовать?
Пожалуйста, оставьте контакты - мы свяжемся с вами как можно быстрее
Контакты
Москва, Пресненская Набережная 10с2