From 3a73b2e17305ec63ad67ff3198e53b6737aa668e Mon Sep 17 00:00:00 2001 From: bashmak Date: Mon, 21 Aug 2017 18:58:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ats.md | 0 docs/install.md | 190 +++++++++++++++++++++++++++++++++--------------- 2 files changed, 131 insertions(+), 59 deletions(-) create mode 100644 docs/ats.md diff --git a/docs/ats.md b/docs/ats.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/install.md b/docs/install.md index 772cd4c..0d879f4 100644 --- a/docs/install.md +++ b/docs/install.md @@ -12,7 +12,7 @@ Затем установим зависимости ``` -# dnf -y install python3 python3-devel python3-pip python3-pillow mariadb uwsgi nginx redis net-snmp net-snmp-libs net-snmp-utils net-snmp-devel net-snmp-python git redhat-rpm-config +# dnf -y install python3 python3-devel python3-pip python3-pillow mariadb mariadb-devel uwsgi nginx uwsgi-plugin-python3 redis net-snmp net-snmp-libs net-snmp-utils net-snmp-devel net-snmp-python git redhat-rpm-config ``` Условимся что путь к папке с проектом находится по адресу: */var/www/djing*. @@ -27,83 +27,155 @@ Скопируем конфиги из примеров в реальные: ``` -cd /var/www/djing -cp djing/settings_example.py djing/settings.py -cp agent/settings.py.example agent/settings.py +$ cd /var/www/djing +# cp djing/settings_example.py djing/settings.py +# cp agent/settings.py.example agent/settings.py ``` Затем отредактируйте конфиги для своих нужд. Для удобства я создаю пользователя и группу http:http, и всё что связано с web-сервером запускаю от имени http. ``` -groupadd -r http -useradd -l -M -r -d /dev/null -g http -s /sbin/nologin http -chown -R http:http /var/www -chown -R http:http /etc/nginx -chown -R http:http /etc/uwsgi.* +# groupadd -r http +# useradd -l -M -r -d /dev/null -g http -s /sbin/nologin http +# chown -R http:http /var/www +# chown -R http:http /etc/nginx +# chown -R http:http /etc/uwsgi.* +# chown -R http:http /run/uwsgi/ ``` ### Настройка WEB Сервера Конфиг Nginx на моём рабочем сервере выглядит так: +```nginx +user http; +worker_processes auto; +pid /run/nginx.pid; +events { + worker_connections 1024; +} +http { + sendfile on; + upstream djing { server unix:///run/uwsgi/djing.sock; } + + server { + listen 80; + server_name <ваш-домен>.com; + root /var/www/djing; + charset utf-8; + + # укажите где лежит ваш раздел с медиа для сайта + location /media { + alias /var/www/djing/media; + } - user http; - worker_processes auto; - pid /run/nginx.pid; - events { - worker_connections 1024; - } - http { - sendfile on; - upstream djing { server unix:///run/uwsgi/djing.sock; } - - server { - listen 80; - server_name <ваш-домен>.com; - root /var/www/djing; - charset utf-8; - - # укажите где лежит ваш раздел с медиа для сайта - location /media { - alias /var/www/djing/media; - } - - # местоположение статики - location /static { - alias /var/www/djing/static; - } - - # тут надо указать путь куда у вас установился Django + путь к статике админки - # путь к Django тут: /usr/lib/python3.5/site-packages/django - # путь к статике соответственно: contrib/admin/static/admin - location /static/admin { - alias /usr/lib/python3.5/site-packages/django/contrib/admin/static/admin; - } - - # на корневом url / реагируем с помощью сокета проекта - # у нас он называется "djing": upstream djing { server ... - location / { - uwsgi_pass djing; - include uwsgi_params; - } + # местоположение статики + location /static { + alias /var/www/djing/static; + } + + # тут надо указать путь куда у вас установился Django + путь к статике админки + # путь к Django тут: /usr/lib/python3.5/site-packages/django + # путь к статике соответственно: contrib/admin/static/admin + location /static/admin { + alias /usr/lib/python3.5/site-packages/django/contrib/admin/static/admin; + } + + # на корневом url / реагируем с помощью сокета проекта + # у нас он называется "djing": upstream djing { server ... + location / { + uwsgi_pass djing; + include uwsgi_params; } } +} +``` Это минимальный конфиг Nginx для работы. Проверте файл /run/uwsgi/djing.sock на доступность пользователю http для чтения. Далее настраиваем uWSGI. Мой конфиг для uWSGI в режиме emperor: +> /etc/uwsgi.ini +```ini +[uwsgi] +uid = http +gid = http +pidfile = /run/uwsgi/uwsgi.pid +emperor = /etc/uwsgi.d +stats = /run/uwsgi/stats.sock +chmod-socket = 660 +emperor-tyrant = true +cap = setgid,setuid +``` + +Зададим конфиг для *uwsgi vassal*: +> /etc/uwsgi.d/djing.ini +``` +[uwsgi] +chdir=/var/www/djing/ +module=djing.wsgi +master=True +processes=8 +;socket=/run/uwsgi/djing.sock +http-socket=:8000 +chmod-socket=664 +pidfile=/run/uwsgi/django-master.pid +vacuum=True +plugin=python3 +``` + +Перед пробой запуска отключим все ограничения фаервола: +> \# systemctl stop firewalld + +Попробуем запустить *uwsgi* и djing без Nginx: +> \# sudo uwsgi --gid http --uid http /etc/uwsgi.d/djing.ini + +пробуем зайти в биллинг с браузера на <адрес сервера>:8000. + +Для того чтоб uwsgi применял к своим файлам пользователя http надо подредактировать системный юнит uwsgi, у меня он имеет такой путь: +> /usr/lib/systemd/system/uwsgi.service - [uwsgi] - uid = http - gid = http - pidfile = /run/uwsgi/uwsgi.pid - emperor = /etc/uwsgi.d - stats = /run/uwsgi/stats.sock - chmod-socket = 660 - emperor-tyrant = true - cap = setgid,setuid +В нём надо чтоб chown менял пользователя не на uwsgi, а на http: +> ExecStartPre=/bin/chown -r http:http /run/uwsgi -У меня конфиг лежит по адресу /etc/uwsgi.ini +Теперь, если всё прошло успешно, поменяйте в конфиге *uwsgi vassal* сокет с http на unix socket: +Раскомментируйте это: +> socket=/run/uwsgi/djing.sock +И закомментируйте эту строку: +> http-socket=:8000 + +Строка *http-socket=:8000* была для теста, чтоб посмотреть работает-ли uwsgi сам по себе. + +Теперь можно попробовать запустить *nginx* и *uwsgi*. + +> \# systemctl start uwsgi\ +> \# systemctl start nginx + + +### Настраиваем биллинг +Все настройки биллинга находятся в файле *djing/settings.py*. Большинство опций вы можете найти в документации [Django settings](https://docs.djangoproject.com/en/1.9/ref/settings). +Те опции, которые были добавлены мной в рамках проекта *djing*, описаны ниже в этом разделе документации по установке. + +#### djing/settings.py +**USE_TZ** — Это опция *Django*, но если вы не работаете в разных часовых диапазонах то я не рекомендую включать эту опцию чтоб небыло путаницы со временем. Это связано с тем что +я ещё не тестировал поведение работу со временем при включённой этой опции. + +**DEFAULT_PICTURE** — Это путь к изображению по умолчанию, оно используется когда нужное изображение не найдено. + + +**PAGINATION_ITEMS_PER_PAGE** — Количество выводимых элементов списка на странце с таблицей. Например если поставить 30, +то на странице абонентов на одной странице будет выведено 30 строк абонентов. + +**pay_SERV_ID** — Эта опция, так же как и **pay_SECRET** опции для платёжной системы *AllTime24*, если вы используете любую +другую платёжную систему то можете удалить эти опции. + + +**DIALING_MEDIA** — Путь, где биллинг сможет найти файлы записей asterisk чтоб вывести статистику звонков. +Подробнее читайте в описании работы с [АТС](./ats.ms). + +**DHCP_TIMEOUT** — Время аренды настроек DHCP в секундах. + +**DEFAULT_SNMP_PASSWORD** — Пароль snmp по умолчанию для устройств, чтоб при создании устройства он был заполнен в нужном поле. +Если нет такого пароля то оставьте пустым или None. ### Настраиваем демоны Если ваша система работает с поддержкой *systemd* то в каталоге *systemd_units* проекта вы найдёте юниты для systemd. @@ -111,7 +183,7 @@ chown -R http:http /etc/uwsgi.* __Настоятельно рекомендую заглянуть внутрь этих юнитов__. Проверте пути исполняемых файлов, права и прочее. А теперь включим и запустим нужные демоны -``` +```bash # systemctl daemon-reload # systemctl enable djing_queue.service # systemctl start djing_queue.service