Файл конфигурации проекта это обязательный файл, который служит для настройки сервисов проекта, он должен быть разположен в корне проекта и его содержание должно соответствовать строгим правилам, которые описаны далее.
Для автоматического создания базового файла конфигурации вы можете обратиться к Инициализация проекта
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 репозитория и следит за изменениями в указанной ветке, в случае необходимости обновляет сервис.
Если указан приватный репозиторий, то необходимо настроить в личном кабинете права доспупа к приватным репозиториям для приложения 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