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

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

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

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

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

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

name: my-awesome-project

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

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

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

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

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

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

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

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

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

image: node

Поддерживаемые типы сервисов: 'node' | 'rust' | 'golang' | 'php' | 'ruby' | '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

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

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

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

no_restart: true

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

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

command: npm i && npm run start

Порты якорь

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

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

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

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

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

Поддерживается использование переменных среды вашего устройства в любом месте файла, например: ${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