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

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

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

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

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
    entrypoint: ['install-extensions.sh'] # [ОПЦИОНАЛЬНО] Скрипты запускаемые при создании контейнера
    exclude: # [ОПЦИОНАЛЬНО] Файлы и папки исключения (путь относительно корня "pwd")
      - tmp
      - node_modules
    command: npm i && npm run start # Команда при старте контейнера
    ports: # [ОПЦИОНАЛЬНО] Список внешних портов
      - port: 3000
        type: http
    environment: # [ОПЦИОНАЛЬНО] Переменные окружения
      - PORT=3000

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

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

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

name: my-awesome-project

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

Сервисы:

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

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

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

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

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

Тип сервиса

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

image: node

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

Размер сервиса

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

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

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

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

command: npm i && npm run start

Порты

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

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

ports:
  - port: 3000
    type: http
    # Опционально
    location: /path-url # По умолчанию "/"
    # Опционально
    proxy_path: / # По умолчанию ""
    # Опционально
    timeout: 30s
    # Опционально
    buffer_size: 64k
    # Опционально
    static:
      - location: /static
        path: static
        # Опционально
        index: index.html

Поддерживаемые типы портов: 'http' | 'ws' | 'chunked' | 'php'

Переменные среды

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

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

environment:
  - PORT=3000

Внутренние ссылки

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

depends_on:
  - postgres0

Когда в качестве внутренней ссылки указан один из подключаемых сервисов например postgres то переменная среды с адресом этой ссылки будет автоматически добавлена сервису в процессе работы команды deploy

Загрузка файлов из 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