Для установки желательно 2 сервера с установленной ОС FreeBSD 11.X. Первый сервер будет выполнять роль NOC Tower, c него будет разворачиваться NOC.
Назовём их, условно, noc-tower и noc-main01
В случае, если установка ведётся на единственный сервер, то имена будут совпадать. Также, возможен вариант развёртывания Tower на хост с Linux, а развёртывание NOCa на FreeBSD |
В случае, если установка ведётся на компьютер без доступа в Интернет - необходимо указать HTTP прокси. Это делается установкой переменных окружения HTTP_PROXY и HTTPS_PROXY |
Если установка ведётся на версию FreeBSD Release, необходимо заменить в в /etc/pkg/FreeBSD.conf url c "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly" на "pkg+http://pkg.FreeBSD.org/${ABI}/latest", иначе будет недоступен Telegraf и Nginx 1.10, что приведёт к ошибкам во время установки. |
Используется ansible для развёртывания окружения NOC
# pkg install sudo |
Если на целевой системе не установить sudo, то при попытке сделать Deploy Нока выведется ошибка: |
Python 2.7
необходим для работоспособности NOC'a и Ansible
# pkg install python |
Если на целевой системе не будет установлен Python, то при попытке произвести деплой (Deploy) NOC'a из башни выведется ошибка вида: "stderr": "Traceback (most recent call last):\n File \"/opt/noc/scripts/deploy/install-packages\" |
Остальные необходимые приложения будут установлены Ansible при развёртывания НОКа.
На всех машинах, на которые будет производиться развёртывание NOC'a через башню, необходимо добавить пользователя ansible, задать ему пароль и установить в качестве оболочки (shell'a) csh
# pw groupadd -n ansible # pw useradd -g ansible -s /bin/csh -d /home/ansible -n ansible -m # passwd ansible |
В Ansible 2.0.X присутствует баг, если для пользователя ansible использовать shell sh (/bin/sh), то при установке не будет работать подсчёт контрольной суммы конфиг файлов: |
Добавляем пользователя в sudoers
# echo 'ansible ALL=(ALL) NOPASSWD:ALL' >> /usr/local/etc/sudoers |
Установка башни возможна в 2 вариантах: установка в контейнере docker или установка напрямую на хост. Docker доступен для FreeBSD начиная с версии 10.3 Release.
Установка описана в NOC Tower FAQ. Приведём команды для FreeBSD.
На данном этапе (в версии FreeBSD 10.3) поддержка docker находится в эксперементальном режиме. Поэтому рекомендуется установка напрямую на хост. |
Устанавливаем и запускаем docker
# pkg install docker # service docker start |
Скачиваем образ NOC Tower
# docker pull registry.gitlab.com/nocproject/tower:latest |
Запускаем
# docker run -t registry.gitlab.com/nocproject/tower |
Для установки башни можно воспользоваться скриптом на shell.
#!/bin/sh info ( ) { printf "\033[1;32m$1\033[0m\n" 1>&2 } OSNAME=`uname -s` rc_arg=$1 if [ -z $rc_arg ]; then towerdir="tower" else towerdir="$rc_arg" fi info "Installing packages..." if [ $OSNAME = "FreeBSD" ]; then PREFIX="/usr/local" pkg install -y python2 libffi py27-setuptools27 py27-pip py27-virtualenv ca_root_nss py27-sqlite3 rehash if [ ! -d "/home/tower" ]; then info "Creating user..." pw groupadd -n tower pw useradd -g tower -s /bin/csh -d /home/tower -n tower -m fi else PREFIX="/opt" apt-get install python-virtualenv libffi6 libffi-dev python-dev gcc libssl-dev if [ ! -d "/home/tower" ]; then info "Creating user..." groupadd tower useradd -d /home/tower -g tower -s /bin/bash -m tower fi fi if [ ! -f "/home/tower/.ssh/id_rsa.pub" ]; then info "Generating SSH key..." su - tower -c "ssh-keygen -t rsa -b 4096" && exit fi if [ ! -d $PREFIX/$towerdir ]; then mkdir $PREFIX/$towerdir else rm -rf $PREFIX/$towerdir/* fi cd $PREFIX/$towerdir info "Installing virtual enviropment..." virtualenv . info "Installing tower..." ./bin/pip install --upgrade pip ./bin/pip install https://cdn.getnoc.com/tower/noc-tower-latest.zip chown -R tower var/ info "Running tower..." su - tower -c "cd $PREFIX/$towerdir && ./bin/tower-web" |
Инструкция по ручной установке noc-tower: https://bitbucket.org/nocproject/noc-tower/overview
Eсли при попытке запуска башни появилось сообщение: "tower-web peewee.OperationalError: unable to open database file" необходимо проверить права на папку var/ - владельцем должен быть пользователь tower (или из-под которого запускается башня).
Заходим в веб-интерфейс Башни и оказываемся в пункте "Environments". Переходим по клавише "Create new" в форму создания окружения.
В случае первой установки можно оставить по умолчанию (или поменять только пароли к базам). В поле host необходимо добавить IP адрес машины, на которой будет устанавливаться веб-интерфейс НОКа (IP адрес в формате XX.XX.XX.XX)
Названии окружения доспустимы только буквенно-цифровые символы. Наличие специсимволов приведёт к невозможности развёртывания NOC'a. |
Тип на данный момент можно выбрать любой, единственное отличие - при типе Productive папка с NOC'ом очищается при каждом развёртывании.
После выполнения всех настроек нажимаем клавишу Save.
Следующий шаг - это скачивание файлов, необходимых для развёртывания NOC'a (это playbook'и для ансибля). Для этого: выделяем в пункте меню "Environments" созданное окружение, и нажимаем кнопку "Pull". Запустится процесс загрузки файлов дистрибутива НОКа и правил развёртывания.
Далее выделяем окружение и переходим на пункт меню "Datacenters". Нажимаем кнопку "Create new" сверху и создаём "Datacenters" (при необходимости прописываем http прокси в формате IP:port)
Datacenters образно говоря это множество машин на которые будут разворачиваться компоненты нока. На данный момент там доступна только одна опция - http_proxy. |
Далее переходим в пукт меню "Pools". Здесь проверяем что уже создался пул default.
Pools или пулы это сущность NOC'a, в пределах пула NOC раздаёт задания для выполнения (по сборке конфигураций, опросу оборудования и пр.). |
Далее переходим в пункт меню "Nodes". В нём добавляем наши ноды (хосты), на которые будут разворачиваться компоненты NOC'a (в нашем случае нода одна - noc-main01).
Name ноды должен совпадать с hostname сервера, который вы добавляете. Иначе возникнут проблемы при запуске NGINX. При развёртывании НОКа на тот же самый сервер, необходимо указывать его имя и внешний IP адрес! |
В "Node Type" выбираем "FreeBSD" (мы же пишем руководство для FreeBSD:), адрес заполняем IP адрес ноды noc-main01, в поле login As должен находиться ansible (менять его необходимо только в случае если для развёртывания NOC'а применяется другой пользователь). После заполнения всех обязательных полей нажимаем "Save".
Переходим в самое главное меню - Services. В нём определяется на какой хост, какие службы будут установлены. Поскольку, в нашем случае, хост у нас 1 - это облегчает нам задачу - всё будем ставить на него.
Если в подпунктах меню "Global" и "default" пусто, значит на первой странице - Environments - не был выполнен Pull. Либо он завершился неудачно - необходимо выяснить причину неудачного выполнения по логам и повторно его запустить |
Кликаем на подменю "Global", проходим по всем пунктам и везде напротив нашего хоста проставляем галочку:
Будьте очень аккуратны при простановке галочек. Фиксация галочки происходит при событии потери фокуса с поля. Поэтому делаем так:
Если так случилось - что произошло переключение на следующий пункт без фиксации значения Instances - необходимо обновить окно браузера (F5) и начать заново. |
После распределения инстансов - нажимаем кнопку Save сверху и переходим к следующему пункту. Проверить правильность установки можно, обновив окно браузера, после нажатия кнопки Save: напротив сервисов (в жёлтом кружке) должна появиться цифра 1.
Те же действия повторяем с Пулом default (именно в сервисах можно определить на какие хосты будут установлены различные сервисы для пулов, и если были созданы пулы кроме default - они покажутся здесь). После внесения всех изменений нажимаем Save.
Осталась последняя страница - Settings. На ней находятся настройки местонахождения Башни. Необходимо посмотреть что тут всё верно и нажать Save.
Если не нажать Save на странице Settings, то при развёртывание вы получите ошибку на этапе "TASK [node : Pull NOC] " |
После выполнения всех настроек имеет смысл посмотреть, а нормально ли отработает Ansible. Для этого, на хосте, на котором работает башня необходимо:
# su - tower # cd /usr/local/tower # setenv NOC_ENV MyFirstEnv # ./bin/ansible -vvvvv -m ping -c ssh -u ansible -i bin/tower-inv noc-main01 |
После выполнения мы должны получить:
noc-main01 | SUCCESS => { "changed": false, "invocation": { "module_args": { "data": null }, "module_name": "ping" }, "ping": "pong" } |
После того как все настройки сделаны и выполнены проверки. Теперь можно запустить деплой. Для этого переходим в пункт меню "Environments", выбираем созданное нами окружение и нажимаем клавишу "Deploy".
Всё. Можно идти отдыхать минут на 10-15. Ansible будет делать работу за вас.
Материалы
TASK [migrate : Synchronize collections] 04:06 fatal: [Node1]: FAILED! => {"changed": true, "cmd": ["./noc", "collection", "sync"], "delta": "0:00:01.862260", "end": "2016-07-24 17:20:51.126712" |
Часто встречающаяся ошибка при синхронизации коллекций. Необходимо пройти на НОДУ с ноком и из папки НОКа выполнить (возможно, придётся повторить команду несколько раз):
# ./noc collection sync |
TASK [post : check if noc running] 00:43 fatal: [Node1]: FAILED! => {"changed": true, "cmd": "/opt/noc/noc ctl status", "delta": "0:00:00.007324", "end": "2016-07-24 17:13:09.872542", "failed": true, "rc": 127, "start": "2016-07-24 17:13:09.865218", "stderr": "./commands/ctl.sh: 2: exec: ./bin/supervisorctl: not found", "stdout": "", "stdout_lines": [], "warnings": []} |
В списке опций развёртывания - "Deploy Options" (список справа от Deploy) не выбрана опция "Install Everything".