Skip to content

Backend development and operation configuration

vadimicus edited this page Feb 1, 2018 · 4 revisions

В данный момент запустить backend можно явно (программные составляющие как процессы) и через докеры. Данное руководство ставит цель обеспечить безболезненный запуск Multy-back обоими способами.

1. Установка без докеров

1.1. Back-end

Бек-енд представляет собой монолит, написанный на 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. Если нужно задеплоить вручную на машину

1.2. MongoDB

MongoDB должна быть установлена обязательно версии 3.6.2+. Иначе запросы, котороые используются в backend, не будут работать. В Linux дистрибутивах Ubuntu, Debian, ребята не обновляют версии, поэтому из официпльных реп скачивается 3.4. Переустанавливать больно. БД лучше ставить в Docker.

1.3. NSQ

Распределенные очереди сообщений.

http://nsq.io/deployment/installing.html - установка

http://nsq.io/overview/quick_start.html - запуск

  1. nsqlookupd
  2. nsqd --lookupd-tcp-address=127.0.0.1:4160
  3. nsqadmin --lookupd-http-address=127.0.0.1:4161

1.4. BTCD

https://github.com/btcsuite/btcd

Лучше подключаться к уже установленным нодам на сервере. В данный момент testnet btcd слушает на 0.0.0.0 (в целях дебага). Указать адрес в конфиге multy.conf

2. Установка c использованием докеров

Установка докера

Установить докер из офф репозитория согласно выбранной OC: https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1

Установка docker-compose click

Использование docker-compose

Краткий обзор

В директории с 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

Файл переменных окружения .env

В 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

3. Конфигурация

В 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 прикреплен архив со всеми конфигами и скриптами.

4. Настройка продакшена

В целях безопасности было принято решение ставить продакшн руками (в данный момент в drone все еще есть target на деплой по пушу из master Multy-back, но это можно убрать в любой момент).

Следовательно, для того, чтобы запустить продакшн, нужно:

  1. Установить на OC докеры
  2. Добавить директорию (например, prod) с docker-compose файлом и необходимыми файлами, и
  3. Запустить его

Создайте директорию prod (НЕ ОТ РУТА).

Выбор docker-compose файла

В зависимости от того, как планируется осуществлять запуск сервиса, можно использовать следующие 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-режима

5. Запуск

Зайти в директорию, выполнить:

docker-compose up

Для того, чтобы остановить контейнеры:

docker-compose stop

ВАЖНО: очень рекомендуется после запуска проверить логи на наличие ошибок.

Clone this wiki locally