Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1 2 След.
RSS
Установка UniFi на CentOS7 в виде службы, UniFi Network
 
Раздел с документацией по установке контроллера UniFi на CentOS выглядит немного устаревшим. Вот как я его поставил и запустил как сервис, чтобы перезагрузка не вызывала проблем. Несколько замечаний по настройке:

Данные фактически хранятся в /var/opt/UniFi/data/ и связаны ссылкой с /opt/UniFi/data/  
Файл сервиса тоже находится в /var/opt/UniFi и связан в /usr/lib/systemd/system/

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

Установка UniFi:  
Устанавливаем зависимости:  
yum install lsb  
yum install wget  
yum install unzip  
yum install nano  
yum install java

Скачиваем ПО UniFi:  
cd /usr/src  
wget <download URL>

Создаем каталоги UniFi:  
mkdir -p /opt/UniFi/data  
mkdir -p /var/opt/UniFi/data  
ln -s /var/opt/UniFi/data /opt/UniFi/data

Распаковываем UniFi:  
unzip UniFi.unix.zip -d /opt/

Устанавливаем MongoDB:  
rpm --import https://www.mongodb.org/static/pgp/server-3.2.asc  
nano /etc/yum.repos.d/mongodb-org-3.2.repo  

[mongodb-org-3.2]
name=MongoDB Repository  
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/  
gpgcheck=1  
enabled=1

yum install -y mongodb-org

Создаем пользователя и настраиваем права:  
useradd -M unifi  
usermod -L unifi  
usermod -s /bin/false unifi  
chown -R unifi:unifi /opt/UniFi  
chown -R unifi:unifi /var/opt/UniFi

Создаем сервис unifi:  
nano /var/opt/UniFi/unifi.service

[Unit]
Description=UniFi  
After=syslog.target  
After=network.target

[Service]
Type=simple  
User=unifi  
Group=unifi  
ExecStart=/usr/bin/java -jar /opt/UniFi/lib/ace.jar start  
ExecStop=/usr/bin/java -jar /opt/UniFi/lib/ace.jar stop  
# Даем разумное время на запуск/остановку сервера  
TimeoutSec=300

[Install]
WantedBy=multi-user.target

Создаем симлинк:  
ln -s /var/opt/UniFi/unifi.service /usr/lib/systemd/system/unifi.service

Настраиваем правила файрвола:  
firewall-cmd --zone=public --add-port=8080/tcp --permanent  
firewall-cmd --zone=public --add-port=8443/tcp --permanent  
systemctl restart firewalld

Включаем и запускаем сервис:  
systemctl enable /var/opt/UniFi/unifi.service  
systemctl start unifi.service  
systemctl status unifi.service
 
Это простое и аккуратное исправление... Всё, что они хотят — показать версию для каждого инструмента. Изменить цвет шрифта на зелёный, если современный, или на жёлтый, если нет, как видно. Всё. Почему это так сложно?
 
Если кто-то ищет простой способ установить или обновить контроллер, загляните в мою роль на Ansible Galaxy — https://galaxy.ansible.com/victorbrca/unifi_controller_centos. Пожалуйста, сделайте резервную копию перед использованием. И имейте в виду, что старую версию MongoDB (Epel) она удалит и поставит новую через репозиторий MongoDB.
 
#!/bin/bash
# Установка UniFi:

# Задаём номера версий для скачивания:
unifiversion="$(curl -L --silent https://help.ubnt.com/hc/en-us/articles/360008240754#1 | grep "Stable</td>" -a1 | tail -n 1 | sed 's/<[^>]*>//g')"
mongodbversion="$(curl -L --silent https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ | grep -o -P '(?<=/etc/yum.repos.d/mongodb-org-).*(?=.repo)')"

# Создаём файл репозитория mongodb
rpm --import https://www.mongodb.org/static/pgp/server-$mongodbversion.asc

touch /etc/yum.repos.d/mongodb-org-$mongodbversion.repo
echo "[mongodb-org-$mongodbversion]" > /etc/yum.repos.d/mongodb-org-$mongodbversion.repo
echo "name=MongoDB Repository" >> /etc/yum.repos.d/mongodb-org-$mongodbversion.repo
echo "baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/$mongodbversion/x86_64/" >> /etc/yum.repos.d/mongodb-org-$mongodbversion.repo
echo "gpgcheck=1" >> /etc/yum.repos.d/mongodb-org-$mongodbversion.repo
echo "enabled=1" >> /etc/yum.repos.d/mongodb-org-$mongodbversion.repo

# Устанавливаем необходимые пакеты и обновляем ОС:
yum install -y lsb smartmontools wget unzip nano java mongodb-org
yum update -y

# Создаём директории UniFi:
mkdir -p /opt/UniFi/
mkdir -p /var/opt/UniFi/data
ln -s /var/opt/UniFi/data /opt/UniFi/5

# Скачиваем софт UniFi:
cd /usr/src
wget "http://dl.ubnt.com/unifi/$unifiversion/UniFi.unix.zip" -O /usr/src/UniFi.unix.zip

# Распаковываем UniFi:
unzip UniFi.unix.zip -d /opt/

# Создаём сервис unifi:
touch /etc/systemd/system/unifi.service
echo "[Unit]" > /etc/systemd/system/unifi.service
echo "Description=UniFi" >> /etc/systemd/system/unifi.service
echo "After=syslog.target" >> /etc/systemd/system/unifi.service
echo "After=network.target" >> /etc/systemd/system/unifi.service
echo -e "\n" >> /etc/systemd/system/unifi.service
echo "[Service]" >> /etc/systemd/system/unifi.service
echo "Type=simple" >> /etc/systemd/system/unifi.service
echo "User=unifi" >> /etc/systemd/system/unifi.service
echo "Group=unifi" >> /etc/systemd/system/unifi.service
echo -e "\n" >> /etc/systemd/system/unifi.service
echo "ExecStart=/usr/bin/java -jar /opt/UniFi/lib/ace.jar start" >> /etc/systemd/system/unifi.service
echo "TimeoutSec=300" >> /etc/systemd/system/unifi.service
echo -e "\n" >> /etc/systemd/system/unifi.service
echo "[Install]" >> /etc/systemd/system/unifi.service
echo "WantedBy=multi-user.target" >> /etc/systemd/system/unifi.service
echo "WorkingDirectory=/opt/UniFi" >> /etc/systemd/system/unifi.service

ln -s /etc/systemd/system/unifi.service /var/opt/UniFi/unifi.service
ln -s /etc/systemd/system/unifi.service /usr/lib/systemd/system/unifi.service

# Создаём пользователя и задаём права:
useradd -M unifi
usermod -L unifi
usermod -s /bin/false unifi
chown -R unifi:unifi /opt/UniFi
chown -R unifi:unifi /var/opt/UniFi

# Настраиваем правила фаервола:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
###firewall-cmd --zone=public --add-port=8081/tcp --permanent # Уже не нужен
firewall-cmd --zone=public --add-port=8443/tcp --permanent
firewall-cmd --zone=public --add-port=8880/tcp --permanent
firewall-cmd --zone=public --add-port=8843/tcp --permanent
firewall-cmd --zone=public --add-port=3478/udp --permanent
firewall-cmd --zone=public --add-port=3478/tcp --permanent
firewall-cmd --zone=public --add-port=10001/udp --permanent

systemctl restart firewalld

# Включаем и запускаем сервис:
systemctl enable unifi
systemctl start unifi
systemctl status unifi
systemctl enable smartd
systemctl start smartd
smartctl -s on -o on -S on /dev/sd

Я бы опустил всё, что связано со smartctl — это скорее уже кастомизация, чем необходимая часть установки.
 
Работаю, спасибо. Не забудь установить mongodb.
 
Привет, не уверен, было ли такое где-то ещё, но я обнаружил, что мой файрвол на CentOS 7 блокирует соединения (adoption). Вот лог:  
Jul 28 17:02:14 cfc lfd[39129]: *Suspicious File* /tmp/.unifi-4292224756690055859 [ubnt:ubnt (985:978)] - Подозрительная директория.
Не знаю, что делать, чтобы исправить эту ситуацию.
 
Привет, zwerg82! Я еще новичок в скриптах, последняя строка была в оригинальном сообщении, всё, что я знаю — это то, что она связана с умными данными с жесткого диска. Я только что обновил скрипт, чтобы он работал так, как задумано. Не стесняйся выложить свою версию скрипта! Я точно многому у тебя научусь.
 
Привет, atris316, что ты пытался сделать в последней строке: smartctl -s on -o on -S on /dev/sd? Разве там не должен быть реально существующий девайс, а не просто "/dev/sd"?  
Ты также можешь создать сервис firewalld для unifi:  

# Firewall Service  
cat <<EOF > /etc/firewalld/services/unifi.xml  
<?xml version="1.0" encoding="utf-8"?>  
<service>  
   <short>Unifi firewalld service</short>  
   <description>Unifi Controller</description>  
   <port protocol="tcp" port="8080"/>  
   <port protocol="tcp" port="8443"/>  
   <port protocol="tcp" port="8880"/>  
   <port protocol="tcp" port="8843"/>  
   <port protocol="tcp" port="3478"/>  
   <port protocol="udp" port="3478"/>  
   <port protocol="udp" port="10001"/>  
</service>  
EOF  

firewall-cmd --add-service=unifi --permanent  
firewall-cmd --reload  
Привет!
 
Обновление скрипта для установки: доработал скрипт, чтобы он работал с текущими версиями при чистой установке Centos 7. Тестировалось с Unifi 5.11.50 и MongoDB 4.2

#!/bin/bash  
# Установка UniFi:

# Задаём номера версий для загрузки:  
unifiversion="$(curl -L --silent https://help.ubnt.com/hc/en-us/articles/360008240754#1 | grep "Stable</td>" -a1 | tail -n 1 | sed 's/<[^>]*>//g')"
mongodbversion="$(curl -L --silent https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ | grep -o -P '(?<=/etc/yum.repos.d/mongodb-org-).*(?=.repo)')"

# Создаём файл репозитория mongodb  
rpm --import https://www.mongodb.org/static/pgp/server-$mongodbversion.asc

touch /etc/yum.repos.d/mongodb-org-$mongodbversion.repo  
echo "[mongodb-org-$mongodbversion]" > /etc/yum.repos.d/mongodb-org-$mongodbversion.repo
echo "name=MongoDB Repository" >> /etc/yum.repos.d/mongodb-org-$mongodbversion.repo  
echo "baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/$mongodbversion/x86_64/" >> /etc/yum.repos.d/mongodb-org-$mongodbversion.repo  
echo "gpgcheck=1" >> /etc/yum.repos.d/mongodb-org-$mongodbversion.repo  
echo "enabled=1" >> /etc/yum.repos.d/mongodb-org-$mongodbversion.repo

# Устанавливаем необходимые пакеты и обновляем ОС:  
yum install -y lsb smartmontools wget unzip nano java mongodb-org  
yum update -y

# Создаём директории UniFi:  
mkdir -p /opt/UniFi/  
mkdir -p /var/opt/UniFi/data  
ln -s /var/opt/UniFi/data /opt/UniFi/5

# Скачиваем ПО UniFi:  
cd /usr/src  
wget "http://dl.ubnt.com/unifi/$unifiversion/UniFi.unix.zip" -O /usr/src/UniFi.unix.zip

# Распаковываем UniFi:  
unzip UniFi.unix.zip -d /opt/

# Создаём сервис unifi:  
touch /etc/systemd/system/unifi.service  
echo "[Unit]" > /etc/systemd/system/unifi.service
echo "Description=UniFi" >> /etc/systemd/system/unifi.service  
echo "After=syslog.target" >> /etc/systemd/system/unifi.service  
echo "After=network.target" >> /etc/systemd/system/unifi.service  
echo -e "\n" >> /etc/systemd/system/unifi.service  
echo "[Service]" >> /etc/systemd/system/unifi.service
echo "Type=simple" >> /etc/systemd/system/unifi.service  
echo "User=unifi" >> /etc/systemd/system/unifi.service  
echo "Group=unifi" >> /etc/systemd/system/unifi.service  
echo -e "\n" >> /etc/systemd/system/unifi.service  
echo "ExecStart=/usr/bin/java -jar /opt/UniFi/lib/ace.jar start" >> /etc/systemd/system/unifi.service  
echo "TimeoutSec=300" >> /etc/systemd/system/unifi.service  
echo -e "\n" >> /etc/systemd/system/unifi.service  
echo "[Install]" >> /etc/systemd/system/unifi.service
echo "WantedBy=multi-user.target" >> /etc/systemd/system/unifi.service  
echo "WorkingDirectory=/opt/UniFi" >> /etc/systemd/system/unifi.service

ln -s /etc/systemd/system/unifi.service /var/opt/UniFi/unifi.service  
ln -s /etc/systemd/system/unifi.service /usr/lib/systemd/system/unifi.service

# Создаём пользователя и задаём права:  
useradd -M unifi  
usermod -L unifi  
usermod -s /bin/false unifi  
chown -R unifi:unifi /opt/UniFi  
chown -R unifi:unifi /var/opt/UniFi

# Настраиваем правила файрвола:  
firewall-cmd --zone=public --add-port=8080/tcp --permanent  
###firewall-cmd --zone=public --add-port=8081/tcp --permanent # Больше не нужно  
firewall-cmd --zone=public --add-port=8443/tcp --permanent  
firewall-cmd --zone=public --add-port=8880/tcp --permanent  
firewall-cmd --zone=public --add-port=8843/tcp --permanent  
firewall-cmd --zone=public --add-port=3478/udp --permanent  
firewall-cmd --zone=public --add-port=3478/tcp --permanent  
firewall-cmd --zone=public --add-port=10001/udp --permanent

systemctl restart firewalld

# Включаем и запускаем сервис:  
systemctl enable unifi  
systemctl start unifi  
systemctl status unifi  
systemctl enable smartd  
systemctl start smartd  
smartctl -s on -o on -S on /dev/sd
 
Извиняюсь за поднятие старой темы, но, возможно, через год я снова буду искать этот ответ. Может, тогда и найду. Логи сервера записываются в относительный путь. Поэтому всё, что нужно сделать — убедиться, что рабочая директория совпадает с местом установки UniFi. У меня логи лежат в /opt/UniFi/logs, поэтому я добавил это в файл unifi.service:  
# Устанавливаем рабочую директорию, чтобы логи работали  
WorkingDirectory=/opt/UniFi  
Затем (после перезагрузки systemd и перезапуска unifi) я могу сделать lsof -u ubnt и увидеть, что хочу:  
java  14700 ubnt  61w     REG       253,0  103145 16866838 /opt/UniFi/logs/server.log  
mongod 15532 ubnt   4w     REG       253,0  486144 16866818 /opt/UniFi/logs/mongod.log
 
Замените строку под ~ #Set version numbers for download ~ на: unifiversion="$(curl -L --silent https://help.ubnt.com/hc/en-us/articles/360008240754#1 | grep -a1 "LTS Stable[/td]" | egrep -o "([0-9]{1,}\.)+[0-9]{1,}")" Да, я знаю, что другие уже писали об этом, но я только что провёл последние 4 часа, ковыряясь в коде, чтобы это заработало, и хочу поделиться своей победой!
 
Из любопытства: кто-нибудь уже пробовал создать Ansible playbook на основе этих шагов? И нельзя ли обойтись без создания репозитория mongodb и просто добавить software collections? Я просто пытаюсь разобраться, как получить все нужные файлы для Unifi (это не так просто, как некоторые утверждают на этом форуме). Но как только разберусь, с удовольствием помогу.
 
Страница, судя по всему, теперь работает через websocket. Это, наверное, работает, но явно не самый аккуратный способ.  
curl --silent --include --no-buffer --header "Connection: Upgrade" --header "Upgrade: websocket" --header "Sec-WebSocket-Version: 13" https://help.ubnt.com/hc/en-us/articles/360008240754#1 | grep -A1 ">LTS Stable<" | egrep -o "([0-9]{1,}\.)+[0-9]{1,}"
 
Привет, OverkillSD! Похоже, Ubiquiti внесли изменения на своём сайте, и твоя команда grep больше не может правильно распознать номер версии. Я не знаю точного синтаксиса для исправления на ходу, но решил сообщить тебе об этом. К слову: любой, кто хочет использовать эту версию, может просто заменить команду на конкретный номер версии, как это сделано с mongodb в скрипте. Спасибо!
 
Я не совсем понимаю вашу потребность в разделе подкачки или swap-файле?  
[root@services22 ~]# free -m
total used free shared buff/cache available  
Mem:   992  561   90     57        340       166  
Swap: 2047  233 1814  

Системные требования для моей версии таковы: mongoDB 2.4.14 (http://www.mongodb.org/downloads) и Oracle Java 8.
 
Похоже, на моём VPS нет раздела подкачки или swap-файла, и создание их запрещено. Видимо, нужно искать другой онлайн-вариант.
 
Я на версии 5.7.23, и, по-моему, без проблем. Не знаю, поможет ли это как-то?

cat /proc/version  
Linux version 3.10.0-693.2.2.v7.x86_64 (mockbuild@build64-1.clearsdn.local) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)) #1 SMP Sun Sep 17 14:53:19 MDT 2017

java -version  
openjdk version "1.8.0_151"  
OpenJDK Runtime Environment (build 1.8.0_151-b12)  
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

mongod --version  
db version v2.6.12  
2018-06-26T16:12:44.273-0400 git version: nogitversion  
2018-06-26T16:12:44.273-0400 OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
 
К сожалению, вручную тоже не работает. Очень раздражает и ставит меня в тупик. ДОПОЛНЕНИЕ: Переустановил снова, версия 5.2.9 работает, но при попытке установить более свежую версию возникает та же проблема.
 
Мне кажется, что процесс 3925 — это "призрачный" процесс, даже если служба уже остановлена. Второй процесс 3286, скорее всего, упал из-за того, что процесс 3925 держит свои потоки. К тому же, я не думаю, что параметр -Xmx1024M тут поможет. Когда операционная система не может выделить новый нативный поток, возникает эта ошибка OutOfMemoryError. Я бы убил java-процессы так, как описано в ссылке, которую я давал раньше, и запустил службу вручную.
 
src]# ps -fea|grep -i java  
root 3945 1119 0 17:38 pts/0 00:00:00 grep --color=auto -i java  

● unifi.service - UniFi Controller  
Loaded: загружен (/etc/systemd/system/unifi.service; включён; поставщик по умолчанию: отключён)  
Active: неудача (Результат: код выхода) с вт 2018-06-26 17:37:41 CEST; 14 сек назад  
Process: 3925 ExecStop=/usr/bin/java -jar /opt/UniFi/lib/ace.jar stop (код выхода=0/УСПЕХ)  
Process: 3286 ExecStart=/usr/bin/java -Xmx1024M -jar /opt/UniFi/lib/ace.jar start (код выхода=1/ОШИБКА)  
Main PID: 3286 (код выхода=1/ОШИБКА)  

26 июня 17:37:41 h2789894.stratoserver.net java[3925]: at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
26 июня 17:37:41 h2789894.stratoserver.net java[3925]: at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
26 июня 17:37:41 h2789894.stratoserver.net java[3925]: at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
26 июня 17:37:41 h2789894.stratoserver.net java[3925]: at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
26 июня 17:37:41 h2789894.stratoserver.net java[3925]: at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
26 июня 17:37:41 h2789894.stratoserver.net java[3925]: at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
26 июня 17:37:41 h2789894.stratoserver.net java[3925]: at org.apache.log4j.Logger.getLogger(Logger.java:104)
26 июня 17:37:41 h2789894.stratoserver.net java[3925]: at com.ubnt.service.B.oooo.o00000(Unknown Source)
26 июня 17:37:41 h2789894.stratoserver.net java[3925]: at com.ubnt.service.B.oooo.<clinit>(Unknown Source)
26 июня 17:37:41 h2789894.stratoserver.net java[3925]: at com.ubnt.ace.Launcher.<clinit>(Unknown Source)

Вот что у меня есть.
Страницы: 1 2 След.
Читают тему (гостей: 1)