This commit is contained in:
Gogs
2020-05-10 18:29:14 +04:00
parent 7f4e11b073
commit 6a2cd57e6e
17 changed files with 297 additions and 60 deletions

7
.gitignore vendored
View File

@@ -1,5 +1,8 @@
/db/
/temp/
db/
db/Settings/
temp/
app/static/WAV/
config.py
# ---> Python
# Byte-compiled / optimized / DLL files

View File

@@ -1,5 +0,0 @@
FNAME=site_main.service
echo Install $FNAME
cp $FNAME /etc/systemd/system/$NAME
systemctl enable $FNAME

View File

@@ -1,9 +0,0 @@
echo " Загружаем настройки в память..."
#Создаем папку для программы, если её не было
DIR="/dev/shm/mainsite"
if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
#Копируем настройки
#rsync -ah --delete db/Settings $DIR

View File

@@ -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

28
Scripts.py Executable file
View File

@@ -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])) #отправляем аргумент в процедуру

View File

@@ -1,3 +0,0 @@
git config --global credential.helper cache
git fetch
git pull

171
shell/0-CheckSystem.sh Executable file
View File

@@ -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"

12
shell/1-UpdateClient.sh Executable file
View File

@@ -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

25
shell/2-InstallService.sh Executable file
View File

@@ -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

6
shell/3-Sudoers.sh Executable file
View File

@@ -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

View File

@@ -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

27
shell/Prepare.sh Executable file
View File

@@ -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

8
shell/Restart.sh Executable file
View File

@@ -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

7
shell/StopServer.sh Executable file
View File

@@ -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

View File

@@ -1,4 +1,6 @@
cd ..
git config --global credential.helper cache
git add .
git commit -m "Updates"
git push

View File

@@ -1,10 +0,0 @@
[Unit]
Description=Запуск Основного сайта
[Service]
ExecStart=/home/elforcer/FlaskSite/MainSite/Gunicorn.sh
[Install]
WantedBy=multi-user.target