Файл конфигурации проекта

Файл конфигурации проекта это обязательный файл, который служит для настройки сервисов проекта, он должен быть разположен в корне проекта и его содержание должно соответствовать строгим правилам, которые описаны далее.

Если ваш проект находится в Git репозитории, то можно настраивать файл конфигурации прямо из браузера.

Для автоматического создания базового файла конфигурации вы можете обратиться к Инициализация проекта

Пример файла конфигурации якорь

name: name-of-project # Название проекта
services:
  node1:
    image: node # Среда исполнения Node.js
    size: mili # Размер сервиса (влияет на цену)
    active: true # Сервис запущен
    version: latest # Версия контейнера
    pwd: examples/postgres # Путь до рабочей папки (файлы и папки из этого пути будут загружены в облако)
    volumes: # [ОПЦИОНАЛЬНО] Загрузка дополнительных файлов в контейнер
      - https://raw.githubusercontent.com/kolserdav/conhos-cli/master/examples/php/install-extensions.sh:install-extensions.sh
      # Подключение локальномо тома
      - local:/path
    entrypoint: ['install-extensions.sh'] # [ОПЦИОНАЛЬНО] Скрипты запускаемые при создании контейнера
    exclude: # [ОПЦИОНАЛЬНО] Файлы и папки исключения (путь относительно корня "pwd")
      - tmp
      - node_modules
    command: npm i && npm run start # Команда при старте контейнера
    ports: # [ОПЦИОНАЛЬНО] Список внешних портов
      - port: 3000
        type: proxy
    deploy: # [ОПЦИОНАЛЬНО] Параметры развертывания
      replicas: 2 # [ОПЦИОНАЛЬНО] Количество реплик (каждая реплика оплачивается как отдельная единица)
      update_config: # [ОПЦИОНАЛЬНО] Параметры обновления
        parallelism: 1 # [ОПЦИОНАЛЬНО] Количество одновременно обновляемых реплик
        delay: 3s # [ОПЦИОНАЛЬНО] Задержка после обновления реплики перед обновлением следующей
    environment: # [ОПЦИОНАЛЬНО] Переменные окружения
      - PORT=3000
# Локальные тома
volumes:
  localVolume:
    name: local

Поля файла конфигурации верхнего уровня якорь

Название проекта якорь

Идентификатор проекта в облаке

name: my-awesome-project

Вам строго необходимо следить за уникальностью этого поля между разными проектами, иначе один ваш проект перезапишет другой проект в облаке.

Локальные тома якорь

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

volumes:
  key:
    name: 'name'

После создания локального тома в volumes необходимо также добавить данный том в service.volumes например:

services:
  node:
    volumes:
      # Указываем имя тома и путь
      - name:/path
    ...

Сервисы якорь

Перечень сервисов которые необходимы для работы приложения проекта

services:
  # Уникальное имя сервиса
  node0:
    # ... Поля конфигурации сервиса

Подробнее о сервисах смотрите в Поля конфигурации сервиса

Поля конфигурации сервиса якорь

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

Тип сервиса якорь

От этого зависит образ операционной системы и перечень установленных зависимостей сервиса

image: node

Поддерживаемые типы сервисов: 'node' | 'rust' | 'golang' | 'php' | 'ruby' | 'python' | 'redis' | 'postgres' | 'mysql' | 'mariadb' | 'mongo' | 'rabbitmq' | 'mongo_express' | 'adminer' | 'phpmyadmin' | 'custom'

Собрать образ из Dockerfile якорь

Для использования данной опции необходимо предварительно собрать кастомный образ с помощью команды conhos registry build -n my-image

image: custom # Обязательно такое значение для использования customImage
customImage: my-image:latest # Название и тег кастомного образа

Размер сервиса якорь

От этого зависит выделение ресуров облачного сервера для работы конкретного сервиса

Данный параметр влияет на цену. Таблицу цен смотрите на главной странице

size: mili

Поддерживаемые типы размеров: 'pico' | 'nano' | 'micro' | 'mili' | 'santi' | 'deci' | 'deca' | 'hecto' | 'kilo'

Активный сервис якорь

Чтобы сервис был добавлен или обновлен необходимо указать true. Если указано false то сервис будет удален из облака

active: true

Версия сервиса якорь

Версия сервиса взятая с оффициального DockerHub репозитория. Например для Node.js будет валидной один из поддерживаемых в нстоящее время тегов https://hub.docker.com/_/node

version: latest

Перезапуск сервиса якорь

Устанавливает политику автоматического перезапуска сервиса.

Возможные значения:

  • always [По умолчанию] - Перезапускается при падении и при команде deploy если были изменения в файлах pwd
  • on-failure - Перезапускается только при падении

    Такое значение предпочтительно использовать для сервисов, которые не нужно перезапускать при изменении файлов, например работающие на php-fpm.

  • no - не перезапускается никогда (временный сервис)

    Такое значение предпочтительно использовать для временных сервисов. Которые можно использовать, например, вместе с depends_on, для сборки проекта в более мощном сервисе.

# Опционально
restart: always

Стартовая команда якорь

Команда выполняемая при старте сервиса. Должна содержать команды установки и сборки перед запуском программы если это необходимо.

command: npm i && npm run start

Порты якорь

Порты, которые должны быть проброшены для публичных сервисов наружу, для каждого порта будет использоваться отдельный адрес в сети на 80 и 443 порту.

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

Подробнее о портах

Развертывание якорь

Настройка горизонтального масштабирования сервиса

# Опционально
deploy:
  replicas: 2
  storage: 1.0
  update_config:
    parallelism: 1
    delay: 3s

Реплики якорь

Количество экземпляров (контейнеров) сервиса, которые будут отвечать через балансировщик нагрузки.

Данный параметр допустим только для исполняемых сервисов и для кастомного контейнера

deploy:
  # Опционально
  replicas: 2

Дополнительный объем диска якорь

Количество гигабайт дополнительного дискового пространства сервиса

В настоящее время доступно подключение объема, который не более объема диска по тарифу сервиса, смотрите таблицу тарифов

deploy:
  # Опционально
  storage: 1.5

Настройка обновления якорь

Настройки политики обновления сервиса.

Параллелизм якорь

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

deploy:
  # Опционально
  update_config:
    parallelism: 1
Задержка якорь

Время задержки после перезапуска реплики до начала запуска следующей.

deploy:
  update_config:
    delay: 3s

Переменные среды якорь

Массив переменных среды, которые будут доступны процессам внутри сервиса

Поддерживается использование переменных среды вашего устройства в любом месте файла, например: ${PORT}

environment:
  - PORT=3000

Порядок запуска якорь

Массив имен сервисов которые должны быть запущены перед данным сервисом.

Когда сервис зависит от другого сервиса у которого restart имеет значение no (временный сервис) то после окончания работы временного сервиса данный сервис будет перезапущен.

depends_on:
  - postgres0

Загрузка файлов из Git якорь

Данный параметр подгружает файлы из Git репозитория и следит за изменениями в указанной ветке, в случае необходимости обновляет сервис.

Если указан приватный репозиторий, то необходимо настроить в личном кабинете права доспупа к приватным репозиториям для приложения Conhos

Обратите внимание на параметр pwd при наличии git он будет скачивать из репозитория только ту папку, которая указана в pwd и сделает её корнем в контейнере

git:
  url: https://github.com/user/repository.git # Адрес репозитория
  branch: master # Название рабочей ветки
  # Опционально
  untracked: merge # Политика слияния

Поддерживаетмые политики слияния якорь

В случае изменений на диске, git pull работает по следующим правилам:

  • merge: По умолчанию. Сервис пробует выполнить автоматическое слияние с файлами из рабочей ветки и обновить рабочую ветку с учетом локальных изменений. Если слияние не может быть выполнено автоматически, то изменения на сервере выгружаются в новую ветку, а сервис продолжает работу с файлами из рабочей ветки.
  • push: Изменения на сервере сразу выгружаются в новую ветку, а сервис продолжает работу с файлами из рабочей ветки.
  • checkout: Локальные изменения на сервере отменяются и сервис продолжает работу с файлами из рабочей ветки.

Рабочая папка якорь

Данная директория будет загружена в облако и станет рабочей директорией сервиса

Если для сервиса указан параметр git, то данное правило (pwd) будет указывать на директорию внутри Git проекта

pwd: ./ # Только относительный путь

Исключения якорь

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

# Опционально
exclude:
  - node_modules
  - dist
  - some/nested

Подключение тома якорь

Для перезаписи конфигурационных файлов внутри контейнера:

Данный способ подходит только для внедрения небольших файлов, и служит для перезаписи дефолтных файлов конфигурации внутри контейнера. Для загрузки файлов приложения нужно использовать pwd

# Опционально
volumes:
  # - [абсолютный или относительный путь до файла или ссылка для скачивания]:[абсолютный путь до файла внутри контейнера]
  - examples/mysql/config/my.cf:/etc/mysql/conf.d/custom.cnf

Для подключения тома к хост системе, чтобы сохранить файлы между изменениями в контейнере воспользуйтесь механизмом локальных томов

Запуск скрипта при старте контейнера якорь

За исключением сервиса postgres, в котором для запуска скриптов при создании не нужно передавать entrypoint вместо этого передаем через volumes внутрь контейнера файл /docker-entrypoint-initdb.d/init.sql с примерным содержанием:

#!/bin/sh
config_path=/var/lib/postgresql/data/postgresql.conf
echo "Add include dir to config $config_path"
echo "include_dir='/etc/postgresql'" >> $config_path
# Опционально
entrypoint: ['install-extensions.sh']

Использование своего домена якорь

Для установки своего домена просто добавьте такое поле в конфигурацию сервиса:

domains:
  '3000': example.ru

Чтобы собственный домен заработал, обязательно убедитесь, что в хостинговой зоне этого домена добавлены две A записи с IP узла на котором расположен ваш проект, которые ссылаются на сам домен а также на домен с префиксом www например www.example.ru.

Для получения IP узла проекта введите команду:

conhos ip

Чтобы изменения вступили в силу, после смены домена введите команду:

conhos deploy