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

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

Если ваш проект находится в 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'

Кастомный контейнер якорь

Чтобы запустить сервис на основе любого из образов на Docker Hub нужно указать custom а в version прописать 'автор/название:версия' образа.

image: custom
version: dart # Будет устаовлено из официального репозитория Dart версия latest (по умолчанию)

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

Собрать специальный образ для сервиса из Dockerfile. Срабатывает только при команде conhos deploy.

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

image: custom # Обязательно такое значение для использования build
build:
  dockerfile: Dockerfile # Относительный путь до Dockerfile в контексте "project-path/pwd"

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

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

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

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