django搭建一個資產管理系統1.環境搭建

系統Centos7.4python

架構 lnmp(python)mysql

首先安裝python3.6nginx

參照以前博客web

Centos7.4 yum安裝python3.6sql

而後安裝mysql(mariadb)django

yum install -y mariadb mariadb-libs mariadb-devel mariadb-server

nginxvim

yum install epel-release
yum install -y nginx

再安裝django2.2.0bash

pip install django==2.2.0

-------------------------------------更新於2019.10.24--------------------------------------------服務器

首先修改settings架構

ALLOWED_HOSTS = []修改成ALLOWED_HOSTS = ['*',]           即容許全部主機訪問

把剛作好IP管理的項目整個文件夾放在服務器上,此處我選擇的放在/data下

嘗試執行用django自帶的web服務器開啓服務

cd /data/sams
python manage.py run server 0:8000

發現有報錯

RuntimeError: Model class login.models.User doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

然而百度了一圈我仍是解決不了 因此我決定升級django版本

[root@sm-manage220 sams]# pip install Django==2.2.1
Collecting Django==2.2.1
  Using cached https://files.pythonhosted.org/packages/b1/1d/2476110614367adfb079a9bc718621f9fc8351e9214e1750cae1832d4090/Django-2.2.1-py3-none-any.whl
Requirement already satisfied: pytz in /usr/lib/python3.6/site-packages (from Django==2.2.1) (2019.2)
Requirement already satisfied: sqlparse in /usr/lib/python3.6/site-packages (from Django==2.2.1) (0.3.0)
Installing collected packages: Django
  Found existing installation: Django 2.2
    Uninstalling Django-2.2:
      Successfully uninstalled Django-2.2
Successfully installed Django-2.2.1
[root@sm-manage220 sams]# pip list
Package     Version
----------- -------
Django      2.2.1  
pip         19.3.1 
PyMySQL     0.9.3  
python-nmap 0.6.1  
pytz        2019.2 
setuptools  39.0.1 
sqlparse    0.3.0  
[root@sm-manage220 sams]#

而後在執行 python manage.py runserver,又特麼報錯了

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

這個解決就簡單一點了

File "/usr/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 36, in <module>
    raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

直接去註釋掉這一行就是了

好的註釋掉以後出現第二個異常了

File "/usr/lib/python3.6/site-packages/django/db/backends/mysql/operations.py", line 146, in last_executed_query
    query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'

將146行的decode改成encode便可

if query is not None:
    query = query.encode(errors='replace')
return query

而後執行python manage.py runserver 0:8000就能夠啓動服務了(0:8000即容許全部機器均可以經過8000端口訪問)

而後執行pip install uwsgi,仍是報錯

再安裝gcc吧

yum install -y gcc

再執行 pip install uwsgi就能夠了,而後開始配置它

在項目的根目錄下新建一個script目錄,新建一個uwsgi.ini文件。文件名能夠隨便,但後綴必須是ini。

在裏面寫入下面的配置內容:

[uwsgi]

chdir           = /data/sams      #整個項目的路徑
module          = sams.wsgi       #項目的名稱.wsgi
master          = true
processes       = 3
socket          = 0.0.0.0:8001    #若是想用nginx再作反向代理的話就輸入這個
http            = 0.0.0.0:8000    #不用nginx作就輸入這個,這個主要是測試當前配置的有沒有問題
vacuum          = true
pidfile = /data/sams/script/uwsgi.pid
daemonize  = /data/sams/script/uwsgi.log

注意直接複製會報錯找不到項目路徑,實際最好把註釋的文字自行刪除,包括空格

 

能夠直接用8000端口訪問了,接下來咱們再配置nginx

而後咱們把uwsgi停掉,註釋掉http那一行,改用nginx作代理

[root@sm-manage220 nginx]# ps -ef |grep uwsgi
root     14200     1  0 19:01 ?        00:00:00 uwsgi --ini uwsgi.ini
root     14202 14200  0 19:01 ?        00:00:00 uwsgi --ini uwsgi.ini
root     14203 14200  0 19:01 ?        00:00:00 uwsgi --ini uwsgi.ini
root     14204 14200  0 19:01 ?        00:00:00 uwsgi --ini uwsgi.ini
root     14205 14200  0 19:01 ?        00:00:00 uwsgi --ini uwsgi.ini
root     14532 13144  0 19:16 pts/0    00:00:00 grep --color=auto uwsgi
[root@sm-manage220 nginx]# pkill -f uwsgi -9
[root@sm-manage220 nginx]# ps -ef |grep uwsgi
root     14543 13144  0 19:16 pts/0    00:00:00 grep --color=auto uwsgi
[root@sm-manage220 nginx]# vim /data/sams/script/uwsgi.ini
[uwsgi]

chdir           = /data/sams
module          = sams.wsgi
master          = true
processes       = 3
socket          = 0.0.0.0:8001
#http            = 0.0.0.0:8000
vacuum          = true
pidfile = /data/sams/script/uwsgi.pid
#daemonize  = /data/sams/script/uwsgi.log #這種方式會以守護進程的方式存在,會致使後面設置systemctl的時候失敗
logto = /data/sams/script/uwsgi.log #推薦採起這樣子的方式記錄log
server {
            listen       80;
            server_name  localhost;

            access_log      /data/sams/script/sams_access.log;
            error_log       /data/sams/script/sams_error.log;


            client_max_body_size 75M;


            location / {
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:8001;
                uwsgi_param UWSGI_SCRIPT sams.wsgi;
                uwsgi_param UWSGI_CHDIR  /data/sams;

        }

        location /static {
                alias /data/sams/static;
        }
    }

配置靜態資源

cd /data/sams
mkdir static
vim /data/sams/sams/settings.py
在最後增長一行
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
而後 cd /data/sams
python manage.py collectstatic

而後啓動nginx和uwsgi並設置服務的自啓動

[root@sm-manage220 nginx]# systemctl restart nginx
[root@sm-manage220 nginx]# cd /data/sams/script/
[root@sm-manage220 script]# uwsgi --ini uwsgi.ini 
[uWSGI] getting INI configuration from uwsgi.ini
[root@sm-manage220 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
#設置uwsgi爲服務,方便管理
vim /usr/lib/systemd/system/uwsgi.service

[Unit]
Description=uWSGI instance to serve myproject
After=network.target

[Service]
[Unit]
Description=uWSGI instance to serve myproject
After=network.target

[Service]
WorkingDirectory=/data/sams
ExecStart=/usr/local/bin/uwsgi --ini /data/sams/script/uwsgi.ini
ExecStop=/usr/local/bin/uwsgi --stop /data/sams/script/uwsgi.pid
ExecReload=/usr/local/bin/uwsgi --reload /data/sams/script/uwsgi.pid


[Install]
WantedBy=multi-user.target

#而後執行命令設置成開機自啓動
systemctl enable uwsgi

--------------------------------------------------分割線-------------------------------------------------------

ps: 這樣子的方式便可使用systemctl start/stop/reload/enable/disable進行管理,我以前的方式開機啓動uwsgi是把啓動命令/usr/local/bin/uwsgi --ini /data/sams/script/uwsgi.ini寫在rc.local裏面,而且uwsgi.ini這個文件裏我使用的是daemonize記錄log而不是logto,這樣子就致使在重啓服務器時會卡在界面,一直提示a stop job is running for /etc/rc.d/rc.local,只能強制關機,再強制開機.

--------------------------------------------------分割線-------------------------------------------------------

重啓驗證已ok~

相關文章
相關標籤/搜索