-
Notifications
You must be signed in to change notification settings - Fork 0
Backend development and operation configuration
В данный момент запустить backend можно явно (программные составляющие как процессы) и через докеры. Данное руководство ставит цель обеспечить безболезненный запуск Multy-back обоими способами.
Бек-енд представляет собой монолит, написанный на Go. Запустить его можно, собрав из исходного кода на github. В дальнейшем, после выпуска альфа-релиза, к tag будет запушен релизный готовый бинарник для трех операционных систем, пользователи смогут скачать его и сразу пользоваться.
Таким образом, для того, чтобы получить бинарник работающего монолита, нужно:
- Корректно установить golang (с gopath, etc):
https://golang.org/doc/install
- Скачать Multy-back:
go get github.com/Appscrunch/Multy-back
- В директории с проектом (
$GOPATH/src/github.com/Appscrunch/Multy-back
) запуститьmake all-with-deps
Помимо команды выше Makefile
имеет следующие команды:
Для пользователей:
-
run
- запуск бинарникаmulty
из директорииcmd
-
setup
- скачивание и установка govendor (менеджера пакетов для go). Желательно убедиться, что govendor установлен и работает корректно: выполнить командуgovendor
-
build
- сборка бинарника из исходного кода. Бинарник сохраняется вcmd
с именемmulty
Для разработчиков:
-
todo
- парсит исходный код и отображает список todo -
deps
- обновление зависимостей Пакеты пушатся вместе с проектом, поэтому выполнять эту команду пользователям при запуске нет нужды -
dist
- сборка бинарника под ОС Linux. Если нужно задеплоить вручную на машину
MongoDB должна быть установлена обязательно версии 3.6.2+. Иначе запросы, котороые используются в backend, не будут работать. В Linux дистрибутивах Ubuntu, Debian, ребята не обновляют версии, поэтому из официпльных реп скачивается 3.4. Переустанавливать больно. БД лучше ставить в Docker.
Распределенные очереди сообщений.
http://nsq.io/deployment/installing.html - установка
http://nsq.io/overview/quick_start.html - запуск
nsqlookupd
nsqd --lookupd-tcp-address=127.0.0.1:4160
nsqadmin --lookupd-http-address=127.0.0.1:4161
https://github.com/btcsuite/btcd
Лучше подключаться к уже установленным нодам на сервере.
В данный момент testnet
btcd
слушает на 0.0.0.0
(в целях дебага).
Указать адрес в конфиге multy.conf
Установить докер из офф репозитория согласно выбранной OC: https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1
Установка docker-compose click
В директории с docker-compose можно запустить все сразу (без btc
), выполнив команду docker-compose up
В файле docker-compose.yml
(https://github.com/Appscrunch/Multy-CI
, директория backend
) в multy-back
образе скачивается последняя стабильная версия из Docker Hub.
Для того, чтобы запустить со своими изменениями, нужно собрать образ и добавить его в docker-compose
.
В рутовой директории проекта:
docker build -t multy-back .
В поле image
в multy-back
заменить multyio/backend:latest
на multy-back
В docker-compose
используются переменные окружения.
Рядом с docker-compose.yml
coздать файл .env
, где эти переменные объявляются, например:
MONGO_DATA_DIR=./mongo/data
MONGO_LOG_DIR=./mongo/logs
NSQD_DATA_DIR=./nsqd
BACKEND_LOGS=./backend/logs
BACKEND_CONF=./multy.config
BTCD_CERT=./rpc.cert
BTCD=./../../../../root/.btcd
BTCCTL=./../../../../root/.btcctl
BTCD_KEY=./../../../../root/go/bin/rpc.key
В cmd
директории Multy-back проекта лежит пример конфиругационного файла - multy.config-example
. Переименовать его на multy.example
Обратить внимание на следующие поля:
-
mongodb:27017
для запуска с докерами,localhost:27017
- без них -
NSQAddress
:nsq:4150
,localhost:4150
BTCNodeAddress
Firebase
BTCSertificate
Notice: к таске https://appscrunch.atlassian.net/browse/MUL-661
прикреплен архив со всеми конфигами и скриптами.
В целях безопасности было принято решение ставить продакшн руками (в данный момент в drone все еще есть target на деплой по пушу из master Multy-back, но это можно убрать в любой момент).
Следовательно, для того, чтобы запустить продакшн, нужно:
- Установить на OC докеры
- Добавить директорию (например,
prod
) сdocker-compose
файлом и необходимыми файлами, и - Запустить его
Создайте директорию prod (НЕ ОТ РУТА).
В зависимости от того, как планируется осуществлять запуск сервиса, можно использовать следующие docker-compose файлы:
docker-compose-btcd.yml
Запуск всего сервиса с btcd. Может потребоваться некоторое время, чтобы правильно примонтировать необходимые пути для btcd
, чтобы нода продолжила работу, а не начинала синхронизироваться сначала.
docker-compose-full.yml
Запуск всей ноды без btcd
, то есть mongoDB
, nsg
, backend
.
У докер-контейнеров и у программ, запущенных локально, РАЗНЫЕ подсети. поэтому, если запустить ноду, которая слушает на localhost, подключиться к ней из докера не удастся.
Нужно (возможные варианты):
a) Запускать ноду из докера (так сделано на Антоне)
b) Изменять в ноде listen addr=0.0.0.0 (так сделано на использованном ранее сервере, при этом важно закрыть порт извне: iptables + whitelist btcd ноды)
c) Менять режим сети в докере (см. ниже)
Поключиться к локалхосту из докерконтейнера можно, для этого надо настроить network_mode=host (по умолчанию bridge)
Сложности возникают в случае, если надо подклчаться как к локалхосту, так и к сети docker-compose.
В этом случае поставлены две задачи:
Определить:
1 IP, к которому осуществляется подключение из докер-контейнера (localhost хост-машины), и
2 Адрес, с которого осуществляется подключение (например, сервис слушает локалхост и надо добавить адрес докер-контейнера)
1 При network mode = bridge адрес хост машины ставится по умолчанию '172.17.0.1'
2 Адрес докер контейнера каждый раз меняется. его можно узнать через ip route в докер-контейнере, на gateway
но он будет меняться каждый раз. можно его прибиндить:
docker.json
{
"bip": "192.168.1.5/24",
"fixed-cidr": "192.168.1.5/25",
"fixed-cidr-v6": "2001:db8::/64",
"mtu": 1500,
"default-gateway": "10.20.1.1",
"default-gateway-v6": "2001:db8🔡:89",
"dns": ["10.20.1.2","10.20.1.3"]
}
Подробнее про настройку gateway в докере здесь: https://docs.docker.com/engine/userguide/networking/default_network/custom-docker0/
-
docker-compose-prod.yml
Запускается только бекенд. Использовать этот метод. То есть запустить отдельно:
docker run --name my_mongo -d -p 27017:27017 mongo:3.6.2
docker-compose up -f docker-compose-nsq.yml
docker-compose up -f docker-compose-prod.yml
-
.env
файл - файл со всеми environment переменными для docker-compose файла. См. вhttps://github.com/Appscrunch/Multy-CI/blob/master/README.md
. Желательно все файлы, относящиеся к сервису, положить в текущую директорию и указать путь к ним в.env
-
backend
- директория, в которой хранятся логиbackend
-
mongo
- директория, в которой хранятся логи и таблицыmongoDB
-
nsqd
- директория, в которой хранятся логи и данные дляnsqd
-
multy.config
- конфигурационный файл для сервиса -
rpc.cert
- сертификат дляbtcd
ноды -
[additional]
ssl
- директория с ключом и сертификатом для ssl-режима
Зайти в директорию, выполнить:
docker-compose up
Для того, чтобы остановить контейнеры:
docker-compose stop
ВАЖНО: очень рекомендуется после запуска проверить логи на наличие ошибок.