1. ホーム
  2. Python

Python Djangoプロジェクトログクエリシステム

2022-02-14 20:57:38

このプロジェクトは、ログクエリを扱う中小企業に向いています。大企業はelkなどを使ってください。elkはパフォーマンスメトリクスやデータ分析などもできます。ログクエリのデータ分析アプリケーションとして優れています。しかし、各企業は、独自のニーズを持って、我々は唯一の限り、最も原始的なログを確認する必要がある場合、このシステムは、もともとから来た。

このシステムでは、実際にabsibleコマンドを呼び出してログを調べ、その出力を閲覧するためのページに落としています。
このツールは、0から1まで私が完全に開発したもので、まだ最適化すべき点がたくさんあります。セキュリティ面も含めて。しかし、様々な理由で最適化を続けることができず、それ以来メンテナンスしていません。

ですから、このシステムはイントラネットへの展開にしか向いていません。そうでなければ、非常に危険なシステムです。

<ブロッククオート

 プロジェクトの起源。
私はモバイルアウトソーシング会社で働いていた、サーバーは、イントラネットを使用して、輸出は、モバイルファイアウォールを持っているので、相対的なクラウドサーバー絶対安全保障。内部コンポーネントは、基本的にイントラネットの通信です。ポートマッピングを行う外部のWebページやバックエンドは、外部ドメインのみです。
研究開発で内部ネットワークマシンにログインしてログを見るというモバイルの制約があるため、エルクも使えるが、トラブル時のアクセス、ドッキングの両端、欲しいログが取れないまま効率が落ちる。元のログを参照する唯一の方法は、それを見つけるために直接システムコマンドを使用することで、問題のトラブルシューティングを容易にすることです。


プロジェクトコードのgitアドレスです。
https://github.com/MYF12/logsquery3.0.git

<スパン 質問がある場合は、私のQQ:1016401546に連絡することができます。

                                       ログクエリシステム

                                                                          メンテナンスマニュアル
                                                                         著者 陳 土峰
                                                                      日付 2020年6月11日(木

<スパン 目次

前置き... 1

I. 基礎となるシステムロジックの説明...2

II. 環境に関する記述... 2

III. システム構築...2

3.1 Python 3.2 のインストール

3.1.1 依存関係のインストール... 2

3.1.2 Python 3.のダウンロード 3

3.1.3 Python3のインストール。3

3.1.4 Python3とpip3とのソフトリンクの作成:. 3

3.1.5 で、PATH に /usr/local/python3/bin を追加します。3

3.2 仮想環境のインストール... 4

3.2.1 本番環境 仮想環境 パッケージパス: ... 4

3.2.2 distlib-0.3.0.zipを先にインストールします。4

3.2.3 仮想環境の作成... 5

3.3 Djangoをインストールする。6

3.4 プロジェクトが正常に動作するかテストする... 7

3.4.1 プロジェクトの展開... 7

3.4.2 プロジェクトテスト... 8

IV. nginx+uwsgi+Djangoのプロキシプロジェクト... 8

4.1 uwsgiのインストール 8

4.2 uwsgiの設定 9

4.3 uwsgi の起動 10

4.4 Djangoのプロキシにnginxを設定する。10

V. Django 3.0.7のインストール... 12

前文

1. このプログラムは、現在のシステム管理レベルであるxxxxxxをベースに開発されているため、xxxxxxシステム・プラットフォームのみに適用可能です。
2. R&Dがオンラインで生産ログやオンライン設定などの環境を照会する際の運用保守の必要性を減らすために、当初は開発されたシステムです。
3. 3. Python3+Django+uwsgi+nginxのインフラを使用したアーキテクチャです。
4. ansibleコマンドの基礎となる呼び出し

I. 基本システムロジックの説明

1.1 フロントエンドのコードは、フォームを介してユーザーのインタラクション情報をバックエンドに送信します。
1.2 バックエンドが入力を受け取り、論理処理の後、サーバーの ansible コマンドを呼び出してリモートコマンドを実行します。
1.3 リモートコマンドによって返された結果は、ユーザーが閲覧できるようにテキスト形式でフロントエンドページに表示されます。
1.4 テキストファイルの行数が多い場合、ユーザーはダウンロードリンクからテキストをダウンロードして、ローカルで閲覧することができます。 

II. 環境の説明


2.1 ansibleコマンドのサーバーインストール(前提条件)
2.2 ansible サーバは、以下のコマンド形式により、リモートコマンドを実行できること。
例:ansible slivr --sudo -m shell -a "ls -l "
もしあなたがrootユーザーなら、コードを修正する必要がないように、sudoerファイルにrootユーザーのsudo権限を追加すればいいのです。
2.3 Python3 のインストール
2.4 仮想環境のインストール
2.5 Django バージョン 1.8 のインストール (最新版の Django 3.5 ではコードの URL 転送方式を変更する必要があります)

III. システム構築

3.1 Python3 のインストール

3.1.1 依存関係のインストール

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel コマンドを入力し、インストールします。

3.1.2 Python3のダウンロード

1. optファイルディレクトリに移動してcd opt/
2. python3のダウンロード(まずは公式サイトで最新版を確認することができます。)
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz というコマンドを入力します。

3.1.3 Python3のインストール

usr/local/python3 にインストールします(正確な場所は個人の好みです)。
(1) ディレクトリの作成: mkdir -p /usr/local/python3
(2) ダウンロードしたPython-3.x.x.tgzパッケージを解凍する(パッケージ名はダウンロードしたPythonのバージョンによって異なる。)
tar -zxvf Python-3.7.1.tgz のコマンドを入力します。
解凍後、pythonフォルダが表示されます。
解凍したディレクトリに入り、コンパイルとインストールを行います(コンパイルとインストールの前に、yum install gccでコンパイラをインストールする必要があります)。
(3) pythonフォルダに移動し、コンパイルスクリプトを生成する(インストールディレクトリを指定する)。
 cd python-3.7.1
. /configure --prefix=/usr/local/python3 .  
#/usr/local/python3は、上記の手順で作成されたディレクトリです。
(4) コンパイル:make
(5) コンパイルに成功したら、コンパイルとインストール:make install
インストールに成功しました。
(6) python3.7のコンパイラを確認:/usr/local/python3/bin/python3.7

3.1.4 Python3 と pip3 のソフトリンクを作成する。

ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

3.1.5 で、/usr/local/python3/bin を PATH に追加します。

(1) vim /etc/profile
(2) "I"を押し、以下を貼り付けます。

# vim ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/local/python3/bin
export PATH
source ~/.bash_profile

3.2 仮想環境のインストール

3.2.1 本番環境 仮想環境パッケージのパス。/xxxx/xxxx/

pip3を使って、以下のコマンドでダウンロードします。

vim requirements.txt
appdirs==1.4.3
distlib==0.3.0
filelock==3.0.12
importlib-metadata==1.6.0
importlib-resources==1.4.0
pbr==5.4.5
setuptools==39.0.1
six==1.14.0
stevedore==1.32.0
virtualenv==20.0.18
virtualenv-clone==0.5.4
virtualenvwrapper==4.8.2
zipp==3.1.0
#download
pip3 download requirements.txt

ダウンロード後、以下のパッケージが表示されます。

appdirs-1.4.3-py2.py3-none-any.whl
distlib-0.3.0.zip
filelock-3.0.12-py3-none-any.whl
importlib_metadata-1.6.0-py2.py3-none-any.whl
importlib_resources-1.4.0-py2.py3-none-any.whl
pbr-5.4.5-py2.py3-none-any.whl
six-1.14.0-py2.py3-none-any.whl
stevedore-1.32.0-py2.py3-none-any.whl
virtualenv-20.0.18-py2.py3-none-any.whl
virtualenv_clone-0.5.4-py2.py3-none-any.whl
virtualenvwrapper-4.8.2-py2.py3-none-any.whl
zipp-3.1.0-py3-none-any.whl

3.2.2 最初にインストールする distlib-0.3.0.zip

unzip distlib-0.3.0.zip
cd distlib-0.3.0
python3 setup.py build
python3 setup.py install
Then install all the whl packages.
pip3 install *.whl

3.2.3 環境を設定する

mkdir /root/.virtualenvs
#locate virtualenvwrapper.sh to find the path to this file, which is usually in the python3 bin directory of the installation
vim ~/.bashrc 
export WORKON_HOME=/root/.virtualenvs 
#load environment
source /usr/local/python3/bin/virtualenvwrapper.sh

vim /usr/local/python3/bin/virtualenvwrapper.sh
VIRTUALENVWRAPPER_PYTHONキーワードを見つけ、以下のifの上に赤字のコードを追加し、正しいpythonのパスを指定します。

VIRTUALENVWRAPPER_PYTHON=/usr/local/python3/bin/python3
if [ "${VIRTUALENVWRAPPER_PYTHON:-}" = "" ]である。
では
ソース ~/.bashrc

virtualenvコマンドにソフト接続します。そうしないと、その後の仮想環境の作成でエラーが報告されます。

ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv

[root@ansible-server2 dwlirui2]# pip3 list -- you can see that the following packages are installed
Package Version
------------------- -------
appdirs 1.4.3
distlib 0.3.0
filelock 3.0.12
importlib-metadata 1.6.0
importlib-resources 1.4.0
pbr 5.4.5
pip 20.0.2
setuptools 39.0.1
stevedore 1.14.0
stevedore 1.32.0
virtualenv 20.0.18
virtualenv-clone 0.5.4
virtualenvwrapper 4.8.2
zipp 3.1.0

3.2.3 仮想環境の作成

<ブロッククオート

[root@ansible-server2 dwlirui2]# mkvirtualenv -p python3 env1

作成に成功すると、仮想環境をデフォルトで作成します(例:env1を作成)。

[root@ansible-server2 dwlirui2]# mkvirtualenv -p python3 env1
created virtual environment CPython3.6.5.final.0-64 in 1210ms
  creator CPython3Posix(dest=/root/.virtualenvs/env3, clear=False, global=False)
  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/root/.local/share/virtualenv/ seed-app-data/v1.0.1)
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
virtualenvwrapper.user_scripts creating /root/.virtualenvs/env3/bin/predeactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/env3/bin/postdeactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/env3/bin/preactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/env3/bin/postactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/env3/bin/get_env_details

すでに仮想環境に入っていることがわかります env1というのは この仮想環境内にインストールされたソフトウェアは、外部環境とは別に

<スパン (env1) [root@ansible-server2 dwlirui2]#

3.3 Djangoのインストール

古い仮想環境を通じてエクスポートされたパッケージ:requirements.txt ファイル内に格納されています。
旧環境が仮想環境にログインし、exportコマンドを実行:pip3 freeze >requirements.txt

cat requirements.txt -- Download the following package
certifi==2020.4.5.1
chardet==3.0.4
Django==1.8.2
idna==2.9
requests==2.23.0
urllib3==1.25.8


次に、テスト環境としてインターネットに接続できるマシンを探し、パッケージをダウンロードします。

[root@vm44 django_instaa]# pip3 download -r requirements.txt
[root@vm44 django_instaa]# ls -- Downloaded the following packages in total
backcall-0.1.0.tar.gz idna-2.9-py2.py3-none-any.whl
backcall-0.1.0.zip requests-2.23.0-py2.py3-none-any.whl
certifi-2020.4.5.1-py2.py3-none-any.whl requirements.txt
chardet-3.0.4-py2.py3-none-any.whl
distlib-0.3.0.zip urllib3-1.25.8-py2.py3-none-any.whl
Django-1.8.2-py2.py3-none-any.whl

scp * [email protected]:/data/python_install/django_install -- パッケージをリモートオフラインサーバーに渡す
オフラインサーバーから仮想環境にログイン
workon env1 -- 仮想環境上で以下のコマンドが実行されます。
cd /data/python_install/django_install
オフライン仮想環境での最初のインストール:backcall-0.1.0.zip, distlib-0.3.0.zip
例としてbackcall-0.1.0.zipをインストールする場合。

unzip backcall-0.1.0.zip
cd backcall-0.1.0
python3 setup.py build
python3 setup.py install
Then install all the whl packages.
pip3 install *.whl

インストールしたら、以下のパッケージが存在するかどうかを判断します。

[root@ansible-server2 logs]# workon env1
 (env1) [root@ansible-server2 logs]# pip list
Package Version  
---------- ----------
backcall 0.1.0    
certifi 2020.4.5.1
chardet 3.0.4    
distlib 0.3.0    
Django 1.8.2    
idna 2.9      
pip 20.0.2   
requests 2.23.0   
setuptools 46.1.3   
urllib3 1.25.8   
uWSGI 2.0.18   
wheel 0.34.2 


3.4 プロジェクトが正しく動作するかテストする

仮想環境を通して構築しました。nginxはサーバの上にインストールし、uwsgiとDjangoは仮想環境の上に展開しました。uwsgiとDjangoは仮想環境内で起動し、nginxはサーバレベルで起動します。
プロジェクトコードは xx.xx.xx:/share/logs_bak/xx.xx.xx/logsquerybak/logsquery.20200601.tar.gz にバックアップされています。

3.4.1 プロジェクトの展開

私のDjangoプロジェクトのデプロイメントです。
デプロイメントパスです。
/biao/hly_yw_project/ です。
logsquery.20200601.tar.gzを/biao/hly_yw_projectディレクトリに直接解凍してください。
manage.pyのファイルパスです。/biao/hly_yw_project/logsquery/manage.py
wsgi.pyのファイルパス。/biao/hly_yw_project/logsquery/logsquery/wsgi.py
settings.py のファイルパスです。/biao/hly_yw_project/logsquery/logsquery/settings.py
クエリのファイルはここに置かれます。
/biao/hly_yw_project/logsquery/queryapp/static/files/
現在、7日間だけ予約されているファイルです。

0 2 * * * * find /biao/hly_yw_project/logsquery/queryapp/static/files -name "*.txt" -mtime +7 -type f |xargs rm -f


プロジェクトの構成はこのようになっています。

3.4.2 プロジェクトテスト

1. Django プロジェクトが動作すること、つまり Python3 manage.py runserver 0.0.0:8000 で実行できることを確認します。

(env1) [root@ansible-server2 logs]# cd /biao/hly_yw_project/logsquery/
(env1) [root@ansible-server2 logs]# Python3 manage.py runserver 0.0.0.0:8000


ブラウザでip:8000にアクセスし、以下のページに正しくアクセスできるかどうか確認してください。

IV. nginx+uwsgi+Djangoのプロキシプロジェクト

4.1 uwsgiのインストール

uwsgiはwsgiプロトコルの実装サービスです.
オフラインでインストールしました。
uwsgi-2.0.18.tar.gzのダウンロード
インターネットに接続できるサーバーを探して、pip downloadコマンドでダウンロードし、オフラインのサーバーに転送します。
解凍してインストールします。(仮想環境内)

workon env1
tar zxf uwsgi-2.0.18.tar.gz
cd uwsgi-2.0.18
python3 setup.py build
python3 setup.py install
pip list to see if the installation is successful
uWSGI 2.0.18

4.2 uwsgiの設定

mkdir /etc/uwsgi_conf/
cat /etc/uwsgi_conf/uwsgi.ini

# uwsig is started using the configuration file
[uwsgi]
# The root directory where the project is located
chdir=/biao/hly_yw_project/logsquery
# Specify the project's application, as distinct from the startup command - wsgi-filemysite/wsgi.py
# The name of logsquery's own application
module=logsquery.wsgi:application
#the local unix socket file than commnuincate to Nginx
# Specify the path to the sock file, which will be configured in nginx's uwsgi_pass and used for communication between nginx and uwsgi
# Support ip+port mode and socket file mode
# sockets=/etc/uwsgi_conf/uwsgi.sock
socket=127.0.0.1:9050
# Number of processes
processes = 8
# number of workers per process
workers=5
procname-prefix-spaced=queryapp # process name prefix for uwsgi
py-autoreload=1 # py file modification, auto-load
# Specify IP port, web access portal
http=0.0.0.0:9051
# User name and user group to start uwsgi
uid=root
gid=root
# Enable master process
master=true
# Automatically remove unix sockets and pid files when the service is stopped
vacuum=true
# Serialize accepted content, if possible
thunder-lock=true
# Enable threads
enable-threads=true
# Set a timeout for interrupting additional requests that exceed the server request limit
harakiri=30
# Set buffering
post-buffering=4096
# Set the logging directory
daemonize=/var/log/uwsgi_conf/uwsgi.log
# uWSGI process number storage
pidfile=/etc/uwsgi_conf/uwsgi.pid
#monitor uwsgi status The load of uwsgi can be monitored through this port
# support ip+port mode and socket file mode
# stats=%(chdir)/uwsgi_conf/uwsgi.status

4.3 uwsgiの起動

cd /etc/uwsgi_conf/
uwsgi --ini uwsgi.ini
Stops.
uwsgi --stop uwsgi.pid

4.4 Djangoのプロキシにnginxを設定する

nginxはサーバーを追加します。  

server {
            listen 8000;
            server_name xxxxxx;
            #comment the following configuration to support both https and http access
            #ssl on;
            #access_log off;
            access_log /var/log/nginx/nginx.log;
            error_log /var/log/nginx/nginx.log;
            charset utf-8;
            client_max_body_size 100M;
            location /static{
                    alias /biao/hly_yw_project/logsquery/queryapp/static;
            }
            location / {
                    include /etc/nginx/uwsgi_params;
                    uwsgi_pass 0.0.0.0:9050;
                    proxy_read_timeout 3600s;
                    proxy_send_timeout 3600s;
                    uwsgi_read_timeout 600;
                    uwsgi_send_timeout 600;
                    uwsgi_connect_timeout 600;
            }
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
                root html;
            }
            # rewrite to http using 497 state
        }

nginxの再起動またはnginxの再読み込み
nginx -s reload
ページのアクセス
http://ip:8000即可访问Django项目

V. Django 3.0.7インストール

1.8.2のバグにより、最新版へのアップグレードが必要です。一部のモジュールは最新版と互換性がなく、コードの一部が1.8.2から変更されています。
Django 3.0 にはこのパッケージが必要です。
xx.xx.x.xx: /biao/hly_yw_project/logsquery.django3.0.7.tar.gz
他のアプリケーションも同じように、Django 3.0.7 をインストールすることで、インストールできます。
インストールパッケージのバックアップディレクトリです。
xx.x.xx.xx: /usr/local/vvm/logs/django
xx.xx.xx.xx:/share/logs_bak/xx.xx.xx/django
仮想環境にアクセスするため。
ワークオン env1
#解凍
tar zxf django3.0.tar.gz
#インストール
pip install *whl
その他の構成は1.8.2を参照してください。