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

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

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

Без перезагрузки якорь

Чтобы сервис не перезапускался при перезапуске проекта - true

Используется там где перезапуск контейнера не требуется после обновления файлов приложения. Например для сервисов работающих на php-fpm.

no_restart: true

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

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

command: npm i && npm run start

Порты якорь

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

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

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

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

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

deploy:
  replicas: 2
  update_config:
    parallelism: 1
    delay: 3s

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

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

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

deploy:
  replicas: 2

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

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

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

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

deploy:
  update_config:
    parallelism: 1
Задержка якорь

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

deploy:
  update_config:
    delay: 3s

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

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

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

environment:
  - PORT=3000

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

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

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

Внедрение конфигурации якорь

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

volumes служит только для передачи небольших файлов внутрь контейнеров для настройки процессов контейнера.

# Опционально
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 узла на котором расположен ваш проект. Для получения IP узла проекта введите команду:

conhos ip

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

conhos deploy