From 6a2cd57e6ed90b2e84ac07bedd82d7b5754cee07 Mon Sep 17 00:00:00 2001 From: Gogs Date: Sun, 10 May 2020 18:29:14 +0400 Subject: [PATCH] Updates --- .gitignore | 7 +- InstallService.sh | 5 - Prepare.sh | 9 -- Restart.sh | 27 ----- Scripts.py | 28 +++++ UpdateClient.sh | 3 - shell/0-CheckSystem.sh | 171 +++++++++++++++++++++++++++ shell/1-UpdateClient.sh | 12 ++ shell/2-InstallService.sh | 25 ++++ shell/3-Sudoers.sh | 6 + Gunicorn.sh => shell/Gunicorn.sh | 8 +- shell/Prepare.sh | 27 +++++ shell/Restart.sh | 8 ++ StartFlask.sh => shell/StartFlask.sh | 0 shell/StopServer.sh | 7 ++ UpdateGit.sh => shell/UpdateGit.sh | 4 +- site_main.service | 10 -- 17 files changed, 297 insertions(+), 60 deletions(-) delete mode 100644 InstallService.sh delete mode 100644 Prepare.sh delete mode 100755 Restart.sh create mode 100755 Scripts.py delete mode 100755 UpdateClient.sh create mode 100755 shell/0-CheckSystem.sh create mode 100755 shell/1-UpdateClient.sh create mode 100755 shell/2-InstallService.sh create mode 100755 shell/3-Sudoers.sh rename Gunicorn.sh => shell/Gunicorn.sh (50%) create mode 100755 shell/Prepare.sh create mode 100755 shell/Restart.sh rename StartFlask.sh => shell/StartFlask.sh (100%) create mode 100755 shell/StopServer.sh rename UpdateGit.sh => shell/UpdateGit.sh (82%) delete mode 100644 site_main.service diff --git a/.gitignore b/.gitignore index 7823f80..bd6b660 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ -/db/ -/temp/ +db/ +db/Settings/ +temp/ +app/static/WAV/ +config.py # ---> Python # Byte-compiled / optimized / DLL files diff --git a/InstallService.sh b/InstallService.sh deleted file mode 100644 index 0b87631..0000000 --- a/InstallService.sh +++ /dev/null @@ -1,5 +0,0 @@ -FNAME=site_main.service - -echo Install $FNAME -cp $FNAME /etc/systemd/system/$NAME -systemctl enable $FNAME diff --git a/Prepare.sh b/Prepare.sh deleted file mode 100644 index 19bc0d7..0000000 --- a/Prepare.sh +++ /dev/null @@ -1,9 +0,0 @@ -echo " Загружаем настройки в память..." -#Создаем папку для программы, если её не было -DIR="/dev/shm/mainsite" -if [ ! -d "$DIR" ]; then - mkdir $DIR -fi - -#Копируем настройки -#rsync -ah --delete db/Settings $DIR diff --git a/Restart.sh b/Restart.sh deleted file mode 100755 index 3a799aa..0000000 --- a/Restart.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -###!/usr/bin/env bash - -echo "Мягко закрываем службу" -killall -s 15 gunicorn -r -x=7 -#P = if pgrep 'gunicorn'; -#echo $P -while [ $x -gt 0 ] && pgrep 'gunicorn' ; -do - sleep 1 - echo "Ожидание закрытия сек: $x" - x=$(( $x - 1 )) -done - - -if pgrep 'gunicorn'; -then - echo "Принудительно убиваем службу" - killall -s 9 gunicorn -r - sleep 3 -else - echo "Служба успешно закрыта" - -fi - -sh Gunicorn.sh diff --git a/Scripts.py b/Scripts.py new file mode 100755 index 0000000..2017899 --- /dev/null +++ b/Scripts.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- + +import sys #для работы с аргументами + +#активация FLASK +from flask import Flask +app = Flask(__name__, static_url_path='', static_folder='') +app.config.from_object('config') #активируем файл конфигурации + +#======================================================================= +#Процедура чтения переменных из файла config.py +#======================================================================= +def GetConfig(VarName): + try: + return app.config[VarName] #чтение конфига + except: + return "" #если переменная не задана в конфиге, то выдаем пустоту + +#======================================================================= +#MAIN +#======================================================================= +if __name__ == "__main__": + if len (sys.argv) > 1: #если что-то передано кроме имени файла + if (sys.argv[1]=='--getconfig'): #получаем команду + print (GetConfig(sys.argv[2])) #отправляем аргумент в процедуру + + diff --git a/UpdateClient.sh b/UpdateClient.sh deleted file mode 100755 index a5fac0c..0000000 --- a/UpdateClient.sh +++ /dev/null @@ -1,3 +0,0 @@ -git config --global credential.helper cache -git fetch -git pull \ No newline at end of file diff --git a/shell/0-CheckSystem.sh b/shell/0-CheckSystem.sh new file mode 100755 index 0000000..efdea29 --- /dev/null +++ b/shell/0-CheckSystem.sh @@ -0,0 +1,171 @@ +#!/bin/bash +cd .. +#====================================================================== +#Pip 3 +#====================================================================== +UpdatePip3() +{ + echo "" + echo "=============================================================" + echo "Pip 3" + echo "=============================================================" + echo "Обновляем Pip 3 на всякий случай" + sudo pip3 install --upgrade pip +} + +#====================================================================== +#Проверка Python3 +#====================================================================== +CheckPython3() +{ + echo "" + echo "=============================================================" + echo "Python 3.7.7" + echo "=============================================================" + echo "Проверяем наличие Python3 в системе " + T=$(python3 -V | grep 3.7.7) + if [ "$T" == "" ]; + then + echo "Устанавливаем зависимости для Python 3.7 " + sudo apt-get build-dep python3.7 + + echo "Скачиваем Python 3.7.7 " + cd /tmp/ + wget -c https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tgz + + echo "Распаковываем архив... " + tar -xvzf Python-3.7.7.tgz + cd Python-3.7.7 + + echo "Настраиваем пакет... " + ./configure --enable-optimizations + + echo "Компилируем пакет... " + make + make test + + echo "Устанавливаем Python 3.7.7... " + sudo make install + else + echo "Уже установлен Python 3.7.7" + return 1 + fi + + echo "Перепроверяем " $1 + T=$(python3 -V | grep 3.7.7) + if $T= "" + then + echo "Не удалось установить " $1 + return 0 #Неудача + fi + echo "Успешно установлен " $1 + echo "Рекомендуется перезагрузить Linux командой: sudo reboot 0" + return 1 #Успех +} + +#====================================================================== +#Проверка пакетов Linux +#====================================================================== +Check() +{ + echo "" + echo "=============================================================" + echo "Linux:" $1 + echo "=============================================================" + + echo "Проверяем наличие пакета Python 3 в системе " + T=$(dpkg --get-selections | grep $1 | grep install) + if [ "$T" == "" ]; + then + echo "Устанавливаем " $1 + sudo apt-get -y install $1 + else + echo "Уже установлен " $1 + return 1 + fi + + echo "Перепроверяем " $1 + T=$(dpkg --get-selections | grep $1 | grep install) + if [ "$T" == "" ]; + then + echo "Не удалось установить " $1 + return 0 #Неудача + fi + echo "Успешно установлен " $1 + return 1 #Успех +} + +#====================================================================== +#Проверка пакетов Python 3 +#====================================================================== +CheckPip() +{ + echo "" + echo "=============================================================" + echo "Pip 3: " $1 + echo "=============================================================" + + echo "Проверяем наличие пакета в Python 3 " + T=$(sudo pip3 freeze | grep $1) + if [ "$T" == "" ]; + then + echo "Устанавливаем " $1 + sudo pip3 install $1 + else + echo "Уже установлен " $1 + return 1 + fi + + echo "Перепроверяем " $1 + T=$(sudo pip3 freeze | grep $1) + if [ "$T" == "" ]; + then + echo "Не удалось установить " $1 + return 0 #Неудача + fi + echo "Успешно установлен " $1 + return 1 #Успех +} + + +echo "Обновление существующих пакетов Linux..." +sudo apt-get update +sudo apt-get -y upgrade + +Check "git" #Система управления репозиториями +Check "rsync" #Копировальщик +Check "build-essential" #информационный список пакетов необходимых для сборки +Check "make" #утилита управления компиляцией +Check "libssl-dev" #для работы с SSL +Check "libcurl4-gnutls-dev" #development files and documentation for libcurl (GnuTLS flavour). libcurl is an easy-to-use client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP. +Check "libgnutls28-dev" #GNU TLS library - development files GnuTLS is a portable library which implements the Transport Layer Security (TLS 1.0, 1.1, 1.2, 1.3) and Datagram Transport Layer Security (DTLS 1.0, 1.2) protocols. +Check "zlib1g-dev" #для сжатия +Check "libbz2-dev" #библиотека сжатия по алгоритму Барроуза—Уилера (версия для разработки) Статические библиотеки и заголовочные файлы, требуемые для сборки приложений, использующих библиотеку bzip2. +Check "libreadline-dev" #GNU readline and history libraries, development files +Check "libsqlite3-dev" #SQLite 3 development files +Check "wget" #Для возможности скачивания с Инета, например Python3 +Check "curl" #передача данных с синтаксисом URL, инструмент командной строки. curl — инструмент командной строки для передачи данных с синтаксисом URL, поддерживающий DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET и TFTP. +#Check "llvm" #Low-Level Virtual Machine (LLVM). The Low-Level Virtual Machine (LLVM) is a collection of libraries and tools that make it easy to build compilers, optimizers, Just-In-Time code generators, and many other compiler-related programs. +#Check "libncurses5-dev" # transitional package for libncurses-dev. This is a transitional package that can safely be removed. +#Check "libncursesw5-dev" #transitional package for libncurses-dev. This is a transitional package that can safely be removed. +#Check "xz-utils" #утилита для работы с архивами в формате XZ +Check "tk-dev" #Toolkit for Tcl and X11 (default version) - development files Tk is a cross-platform graphical toolkit which provides the Motif look-and-feel and is implemented using the Tcl scripting language. +Check "postfix" #высокопроизводительный агент пересылки почты +Check "ssh" #для возможности работы по удаленке + +CheckPython3 #Проверка и установка Python3 +UpdatePip3 # Обновление Pip3 + +CheckPip "Flask" +CheckPip "Flask-Compress" +CheckPip "grab" +CheckPip "gunicorn" +CheckPip "pymssql" +CheckPip "XlsxWriter" +CheckPip "wget" +CheckPip "crypto" +CheckPip "pycrypto" +CheckPip "config" +CheckPip "dnspython" +CheckPip "python-whois" +CheckPip "websockets" diff --git a/shell/1-UpdateClient.sh b/shell/1-UpdateClient.sh new file mode 100755 index 0000000..e227115 --- /dev/null +++ b/shell/1-UpdateClient.sh @@ -0,0 +1,12 @@ +git config --global credential.helper cache #чтение настроек авторизации +git reset --hard #игнорировать изменения у клиента +git fetch +git pull + +#systemctl --user restart $(ls *.service | sed 's/\..*//') +#Устанавливаем получаем имя файла сервиса +FNAME=$(ls *.service ) + +echo "Запускаем сервис для пользователя $FNAME" +systemctl --user restart $FNAME + diff --git a/shell/2-InstallService.sh b/shell/2-InstallService.sh new file mode 100755 index 0000000..186f41d --- /dev/null +++ b/shell/2-InstallService.sh @@ -0,0 +1,25 @@ +#!/bin/bash +./Prepare.sh +cd .. + +ServiceName=$(python3 Scripts.py --getconfig PROGNAME) +SHMName=$(python3 Scripts.py --getconfig SHMNAME) + +echo '[Unit] +Description=Запуск '$ServiceName' + +[Service] +ExecStart='$PWD'/shell/Gunicorn.sh +User='$USER' +Group='$USER' + +[Install] +WantedBy=multi-user.target + + +' > /tmp/site_$SHMName.service + +#echo "Устанавливаем сервис для пользователя $FNAME" +sudo cp /tmp/site_$SHMName.service /etc/systemd/system/site_$SHMName.service +sudo systemctl enable site_$SHMName.service +sudo systemctl restart site_$SHMName.service diff --git a/shell/3-Sudoers.sh b/shell/3-Sudoers.sh new file mode 100755 index 0000000..5a9b7aa --- /dev/null +++ b/shell/3-Sudoers.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +echo $USER' ALL=NOPASSWD: /usr/bin/service, /usr/bin/apt-get update, /usr/bin/apt-get upgrade +' > /tmp/tmp_sudoers + +sudo cp /tmp/tmp_sudoers /etc/sudoers.d/$USER diff --git a/Gunicorn.sh b/shell/Gunicorn.sh similarity index 50% rename from Gunicorn.sh rename to shell/Gunicorn.sh index c46f93a..3e49159 100755 --- a/Gunicorn.sh +++ b/shell/Gunicorn.sh @@ -1,7 +1,9 @@ #!/bin/sh -e -cd /home/elforcer/FlaskSite/MainSite/ + + echo "Подготовка..." sh Prepare.sh +cd .. -echo "Запускаем сервер Gunicorn с MainSite..." -gunicorn -w 4 --timeout 900 --keep-alive 900 --keyfile=/etc/letsencrypt/live/elforcer.udm.ru/privkey.pem --certfile=/etc/letsencrypt/live/elforcer.udm.ru/cert.pem --bind 0.0.0.0:8009 StartServer:app +echo "Запускаем сервер Gunicorn с Проигрывателем записей разговоров..." +gunicorn -w 4 --timeout 900 --keep-alive 900 --keyfile=/etc/letsencrypt/live/elforcer.udm.ru/privkey.pem --certfile=/etc/letsencrypt/live/elforcer.udm.ru/cert.pem --bind 0.0.0.0:8001 StartServer:app diff --git a/shell/Prepare.sh b/shell/Prepare.sh new file mode 100755 index 0000000..9846796 --- /dev/null +++ b/shell/Prepare.sh @@ -0,0 +1,27 @@ +#!/bin/bash +cd .. + +#Копируем файл конфигурации, если его не было +if [ ! -f "config.py" ]; then + echo " Не найден файл конфигурации. Копируем его из примера..."; + cp samples/config_sample.py config.py +fi + +DIR="app/static/WAV" +if [ ! -d "$DIR" ]; then + echo " Создаем папку настроек для звуковых записей.." + mkdir $DIR +fi + +echo " Загружаем настройки в память..." +#Создаем папку для программы, если её не было +DIR="/dev/shm/"$(python3 Scripts.py --getconfig SHMNAME) #"/dev/shm/phonecalls" + +if [ ! -d "$DIR" ]; then + echo " Создаем папку настроек в памяти..." + mkdir $DIR + +fi + +#Копируем настройки +rsync -ah --delete db/Settings $DIR diff --git a/shell/Restart.sh b/shell/Restart.sh new file mode 100755 index 0000000..5775ce1 --- /dev/null +++ b/shell/Restart.sh @@ -0,0 +1,8 @@ +#!/bin/bash +./Prepare.sh + +ServiceName=$(python3 Scripts.py --getconfig PROGNAME) +SHMName=$(python3 Scripts.py --getconfig SHMNAME) + +echo 'Перезапуск '$ServiceName +sudo systemctl restart site_$SHMName.service diff --git a/StartFlask.sh b/shell/StartFlask.sh similarity index 100% rename from StartFlask.sh rename to shell/StartFlask.sh diff --git a/shell/StopServer.sh b/shell/StopServer.sh new file mode 100755 index 0000000..c83ec17 --- /dev/null +++ b/shell/StopServer.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +ServiceName=$(python3 Scripts.py --getconfig PROGNAME) +SHMName=$(python3 Scripts.py --getconfig SHMNAME) + +echo 'Остановка '$ServiceName +sudo systemctl stop site_$SHMName.service diff --git a/UpdateGit.sh b/shell/UpdateGit.sh similarity index 82% rename from UpdateGit.sh rename to shell/UpdateGit.sh index a9d9e80..9bde242 100755 --- a/UpdateGit.sh +++ b/shell/UpdateGit.sh @@ -1,4 +1,6 @@ +cd .. git config --global credential.helper cache git add . git commit -m "Updates" -git push \ No newline at end of file +git push + diff --git a/site_main.service b/site_main.service deleted file mode 100644 index 7be9bfa..0000000 --- a/site_main.service +++ /dev/null @@ -1,10 +0,0 @@ - -[Unit] -Description=Запуск Основного сайта - -[Service] -ExecStart=/home/elforcer/FlaskSite/MainSite/Gunicorn.sh - -[Install] -WantedBy=multi-user.target -