Установка BAYRELL CLoud OS на Raspberry PI

Данная инструкция описывает процесс установки BAYRELL Cloud OS альфа версии 0.2. Репозиторий с ОС доступен на гихабе.

Что такое BAYRELL Cloud OS

Идея: Установка облачного программного обеспечения в 1 клик через веб интерфейс и создание облачной интегрированной системы.

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

Существуют два типа компаний:

  1. Вендоры — они разрабатывают софт, для сборки.
  2. Облачные интеграторы — собирают сборку (интегрированную систему), под потребности определенной ниши. Получается под разные ниши могут быть созданы разные сборки, с разным комплектом программного обеспечения. Сборку можно запускать на разных платформах, начиная от облачных систем Amazon, Google Cloud, до собственных серверов или ARM компьютеров, например Raspberry PI.

Облачные интеграторы бывают 3х видов:

  1. Консалтинговые компании. Это компании, которые берут готовую сборку, или создают ее, и размещают софт на выделенных серверах, или IaaS Платформах.
  2. PaaS Платформы. Это компании, которые создают сборки, и имеют в собственности свою облачную платформу, на которой размещают созданные сборки. Получается для клиента облачное решение, где клиент в 1 клик может заказать, адаптированное для его ниши, бизнес решение, где будут все необходимые компоненты, которые ему нужны для работы. Очень важно, что PaaS Платформа не разрабатывает само Облачное ПО. Оно интегрирует готовое ПО от разных вендоров в сборки в готовый продукт. Клиенты арендуют эти сборки, как сервис. Получается удобное SaaS решение. Только это получается SaaS на котором собрано все необходимое и не нужно заказывать дополнительные сервисы у других SaaS поставщиков.
  3. Кластеры. Это компании, которые обладают своей PaaS Платформой и на этой платформе выстраивают кросспроцесс между участниками, которые интегрируются с этой платформой. Например, фулфилмент кластеры, которые занимаются сбором заказов и доставкой товаров до конечного потребителя. На эту платформу заходят продавцы товаров и услуг, логистические компании, дропшиперы, вендоры производители програмного обеспечения для этой платформы и прочие участники.

Применение облачных интегрированный систем:

  1. Корпоративная бизнес система: CRM, IP телефония, сайт, личный кабинет клиента, система аналитики бизнеса, расчета ROI, 1С и т.п.
  2. IoT система умного дома.
  3. PaaS Платформы и Облачные кластеры.

Преимущества сборки, запущенной в облачной ОС по сравнению с SaaS:

1) У Saas есть одна сложность. Когда SaaS один — это удобно. Но когда SaaS систем становиться много, штук 10, это перестает быть удобным, потому что становится 10 таких систем, и теряется единое окно управления. Тем более каждая из система может "раз в месяц" зависнуть, а если таких систем 10, то будет 10 раз в месяц виснуть вся интегрированная система, из-за того что завис один какой-то компонент.

Используя облачную ОС можно собрать сборку на одном сервере или облаке, соотвественно вместо 10 разных компонентов у вас будет одна интегрированная система как единый компонент. Да риск сбоя есть, но он равен не 10, а 1. И его можно нивелировать создавая резервные системы. А на SaaS системе это сделать не получится, потому что там вендор лок.

2) Облачная ОС интегрирует программное обеспечение и создает единое окно для использования и управления им. Одно окно, один URL адрес, логином и паролем. Не нужно больше переключаться между разными системами. Вы получаете централизованную интегрированную сборку, которая решает ваши задачи и которой легче управлять.

3) Освобождаетесь от Vendor lock. Если вы используете SaaS решения, то система останется на этом SaaS и вы не сможете перенести ее на другую платформу. Используя облачную ОС, вы получаете возможность развернуть свою систему на любой облачной IaaS платформе, будь то свои железные сервера, или облачный платформы типо Amazon и Google Cloud. Вы не зависите от платформы, и можете переносить систему, в случае необходимости от одного провайдера к другому. Например, вы можете развернуть облачную систему в датацентре, который находится поближе к вашему офису.

4) Вы можете делегировать управление облачной ОС консалтинговой компании. При этом вы сами выбираете поставщика, который будет ее обслуживать.

В случае SaaS системы, вы не можете выбрать компанию, которая будет обслуживать SaaS решение. Обычно обслуживанием занимается та же компания, что и создала SaaS сервис. Вы только можете выбрать консалтинговую компанию, которая поможет вам настроить этот SaaS. И если возникнет какая либо проблема в SaaS технического характера, то консалтинговая компания не сможет самостоятельно ее решить. Ей нужно будет обратиться в SaaS компанию, чтобы те решили проблему. Получается двойной телефон. Вы звоните консалтинговой компании, так звонит в SaaS сервис. Это влияет на скорость решения проблемы. Т.к. к SaaS обращаются все их клиенты, она может несколько дней обрабатывать запрос и решать техническую проблему. А это влияет на ваш бизнес, так как в этом время, система может не работать.

Логичнее, чтобы консалтинговая компания, которая помогает вам настривать IT систему, ее же и администрировала, обслуживала и решала технические вопросы. Тогда скорость решения технических вопросов будет быстрой.

5) Вы сможете оплачивать обслуживание системы через банк, через юр лицо. Зачастую в SaaS решений применяется Visa оплата картой. Для бизнеса это неудобно, так как нужны документы для бухгалтерии. При использовании Облачной ОС, вы можете обратиться к консалтинговой компании интегратору в вашем городе и заказать у него сборку, и оплатить ее по банку с документами для бухгалтерии.

6) Если вы обслуживаетесь у облачного интегратора в вашем городе, вам больше не нужно звонить по межгороду, чтобы они по тимвиеру к вам подключились и что-то настроили, как это случается с SaaS. Консалтинговая компания в вашем городе сможет лично к вам приехать в офис, обучить и решить вопросы связанные с техникой. Согласитеть это удобно, чем звонить в другой город или страну, и ждать пока там ответят, если вообще ответят.

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

8) Бизнес преимущество. На разработку одного сервиса, по скромным оценкам, требуется 50 тыс долларов. Если таких сервисов 10, то нужно уже пол миллиона долларов. SaaS не сможет полноценно разработать 10 интегрированных сервисов, которые будут максимально решать потребности рынка, для этого ему нужно потратить на разработку более полумиллиона долларов, и постоянно развивать и поддерживать проект. Логичнее найти 10 компаний, у которых есть такие продукты и интегрировать их решения в сборку, договорившись об аренде.

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

Вендорам интересно сотрудничать с несколькими облачными интеграторами. Например, вендор продает по оптовой цене лицензии 10 облачным интеграторам. А те, в свою очередь, продают сборки, в которых включен продукт вендора, 100 клиентам. Получается вендор делает продажи на 1000 лицензий. Таким образом можно делегировать продажи облачным интеграторам, и сконцентрироваться на разработке качественного софта, и не нести лишние расходы на содержание отдела продаж и технической поддержки. Эти функции вендорная компания делегирует облачным интеграторам.

Эта модель отличается от SaaS бизнес модели. Если SaaS компания занимается и разработкой, и продажами и тех поддержкой, соответсвенно несет расходы. Каждый новый клиент — это новые клиенты. И с ростом количества клиентов падает уровень технической поддержки.

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

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

Снижение цен происходит следующим образом. Вендорная компания не тратит деньги для того, чтобы произвести новый экземпляр их софта. Например, чтобы физически произвести 100 экземпляров CRM и чтобы произвести 1000 экземпляров CRM нужно затратить примерно одинаковое количество денег. Потому что производство нового софта, это скачивание этого софта по ссылке. Затраты есть на выпуск новых версий, маркетинг, а продажи софта делегированы облачным интегратором.

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

Базовая настройка и установка Docker

1) Установите и настройте Raspberry PI как описано в инструкции.

2) Установите Docker и дополнительные приложения

apt-get install -y docker.io git

3) В файл /etc/iptables/rules.v4 добавьте строчки перед -A ALLOW-INPUT -j RETURN

# Разрешить Docker Swarm
-A ALLOW-INPUT -p tcp -m tcp --dport 2376 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 2377 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 7946 -j ACCEPT
-A ALLOW-INPUT -p udp -m udp --dport 7946 -j ACCEPT
-A ALLOW-INPUT -p udp -m udp --dport 4789 -j ACCEPT

4) В файле /etc/docker/daemon.json пропишите. Это нужно для хранения логов рекомендуется journald, чтобы автоматически происходила ротация логов.

{
  "log-driver": "journald"
}

5) В крон через команду sudo crontab -e пропишите команду, которая будет автоматически очищать контейнеры

0 0 * * * yes | docker container prune > /dev/null

6) Создайте кластер

docker swarm init

Если у вас несколько IP адресов у распы, то нужно указать конкретный IP адрес, по которому должен создаваться кластер, например так:

docker swarm init --advertise-addr 192.168.1.25

Важно, что сменить IP адрес потом будет нельзя.

После инициализации кластера, команда выдаст ключ подключения к Docker swarm. Если вы забыли Token, то введите команду docker swarm join-token manager на primary node. Подключитесь к остальным серверам и выполните команду, для того чтобы их подключить к кластеру.

docker swarm join --token TOKEN IP-АДРЕС-ГЛАВНОГО-СЕРВЕРА

Если вы забыли токен, его можно узнать командой:

docker swarm join-token manager

7) Выдайте всем нодам в кластере уникальные имена

Узнать ID нод можно командой

docker node ls

Назначить имя можно командой:

docker node update --label-add name=docker0 raspberrypi

Рекомендуется первый сервер назвать именем docker0, т.к. это имя далее указано в конфигах Cloud OS.

Проверить назначенные label можно командой

docker node inspect self --pretty

8) Добавьте пользователя pi в группу docker

usermod -a -G docker pi

9) Перезагрузите распу

init 6

Установка BAYRELL Cloud OS

1) Предварительно скачайте необходимые образы

docker pull bayrell/bus_gateway:0.2.0
docker pull bayrell/cloud_os_standard:0.2.0
docker pull bayrell/load_balancer_http:0.2.0
docker pull bayrell/alpine_mariadb:10.4
docker pull rabbitmq:3.8.9-management
docker pull bayrell/alpine_php_fpm:7.3-3

2) Чтобы попробовать альфа версию операционной системы нужно скачать конфиги. Зайдите под пользователем pi в домашнюю папку и выполните команду:

https://github.com/bayrell-os/cloud_os

3) Перейдите в папку cloud_os_example

cd cloud_os

4) Запустите web интерфейс

./cloud_os.sh setup

5) Откройте в браузере страницу <ip-адрес-распы>:8080

6) Перейдите на страницу "Yaml Files"

Выполните Функцию compose у файлов: gateway.yaml, rabbitmq.yaml, mysql.yaml, http.yaml, standard.yaml.

7) Создайте новый сервис со Stack name "dev" и File name "php.yaml" со следующим содержимым:

version: "3.3"

services:
    php:
        image: bayrell/alpine_php_fpm:7.3-3
        hostname: "{{.Service.Name}}.{{.Task.ID}}.local"
        volumes:
            - "php_data:/data"
        deploy:
            replicas: 2
            endpoint_mode: dnsrr
            update_config:
                parallelism: 1
                failure_action: rollback
                delay: 5s
            restart_policy:
                condition: "on-failure"
                delay: 10s
                window: 120s
            placement:
                constraints:
                    - node.labels.name == docker0
        networks:
            - load_balancer
        logging:
            driver: journald

volumes:
    php_data:

networks:

    load_balancer:
        external: true

8) Подождите минут 10, пока Docker скачает файлы и запустит все эти сервисы

9) Перейдите во вкладку Adminer. Если вкладка не открывается, значит Docker еще не установил ПО. Дождитесь установки ПО и страница должна открыться. Создайте базу данных: cloud_os_standard и установите базу

10) Перейдите на вкладку Services. На этой странице проверьте количество реплик. Оно не должно быть равно 0. Если равно 0, то образ еще не был скачен. Подождите пока все скачается.

11) На этой же странице измените содержимое сервиса bus_rabbitmq

Admin port: 15672
Admin route: /

Admin custom nginx:

location ~* /admin/services/bus_rabbitmq/api/(.*?)/(.*) {
        proxy_pass http://15672.bus_rabbitmq.cloud_admin.example/api/$1/%2F/$2?$query_string;
        include proxy_params;
}
location /admin/services/bus_rabbitmq/ {
        proxy_pass http://15672.bus_rabbitmq.cloud_admin.example/;
        include proxy_params;
}

Это позволит получить доступ к админке RabbitMQ

12) Перейдите на вкладу Domains и добавьте домен. Например cloud_os.local. Этот домен, должен указывать на вашу распу.

13) Создайте маршрут на вкладке Routes с вашим доменом

Enable: Yes
Protocol: HTTP
Domain name: cloud_os.local
Route: /
Docker name: dev_php
Target port: 80
Route prefix: /

14) Подождите 1 минуту и откройте домен cloud_os.local в браузере. Вы должны будете увидеть приветствие от сервиса dev_php.

15) Установка завершена!