QQ羣:529063263html
GitHub:https://github.com/yjlch1016/dapipython
Nginx+uWSGImysql
前置條件:
如下全部操做均在root帳號下面進行
若是不是root用戶
請注意權限問題
由於是本身搭的服務器
因此無所謂安全問題
若是是公司的服務器
請不要使用root帳號nginx
1、安裝uWSGI服務器:git
當咱們在本地運行Django時
通常是python manage.py runserver
可是在服務器上面是結合uWSGI github
pip install uwsgi
安裝uWSGI
uWSGI是Python的Web服務器
相似於Java的Tomcat
find / -name uwsgi
找到uwsgi的執行位置
ln -s /usr/local/python/bin/uwsgi /usr/bin/uwsgi
建立軟鏈接
pip install uwsgitop
安裝uWSGI性能監控庫
相似於top命令
find / -name uwsgitop
找到uwsgitop的執行位置
ln -s /usr/local/python/bin/uwsgitop /usr/bin/uwsgitop
建立軟鏈接redis
uwsgi.ini文件:sql
[uwsgi]
socket = 127.0.0.1:3031
# Socket套接字
chdir = /django/dapi
# 工程的絕對路徑
wsgi-file = dapi/wsgi.py
# wsgi.py的相對路徑
master = true
# 啓用主進程
processes = 4
# 4個線程,每一個進程有2個線程
threads = 2
# 2個進程
# uWSGI默認單個進程和單個線程
uid = root
gid = root
# 啓動uwsgi的用戶名和用戶組
buffer-size = 65535
# 內部緩存區大小爲64k,默認4k
max-requests = 65535
# 每一個進程的最大請求數
stats = 127.0.0.1:9191
# stats子系統將uWSGI的內部統計信息導出爲JSON
memory-report = true
# 開啓內存使用狀況報告
pidfile = %(chdir)/uwsgi.pid
# pid
vacuum = true
# 當服務中止的時候,自動清理Unix Socket和pid文件
#logto = %(chdir)/uwsgi.log
daemonize = %(chdir)/uwsgi.log
# 使進程在後臺運行,並將日誌打到指定的日誌文件
2、上傳代碼:數據庫
由於本次是演示
因此直接把代碼上傳到服務器上面了
在實際的生活中
請按照規範流程git push到倉庫
否則要被打shidjango
mkdir /django
在根目錄下面建立django目錄
把dapi工程代碼上傳到此目錄下面
若是以前運行過而且上傳過文件
把/dapi/media/jmeter目錄刪掉
以避免佔磁盤空間
若是沒有
則不用管
chmod -R 777 /django
賦予此目錄及其全部的子目錄最高讀寫權限
cd /django/dapi
進入dapi工程根目錄
pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2
安裝適配Django2.0之後版本的xadmin
pip install -r requirements.txt
安裝工程所需的依賴
修改dapi/settings.py配置文件
把DEBUG = True改成
DEBUG = False
把ALLOWED_HOSTS = []改成
ALLOWED_HOSTS = ["*"]
或者指定的IP列表
ALLOWED_HOSTS = ["IP1", "IP2", "IP3"]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dapi',
'HOST': '192.168.1.111',
'PORT': '3306',
'USER': 'root',
'PASSWORD': 'Abcdef@123456',
}
}
# MySQL數據庫
CELERY_BROKER_URL = 'redis://:Abcdef@123456@192.168.1.111:6379/0'
# redis://:password@hostname:port/db_number
CELERY_BROKER_TRANSPORT = 'redis'
# 使用redis做爲中間件
3、遷移MySQL數據庫:
新建dapi庫
PyMySQL年久失修,
對Django2.0之後的版本支持不是很好
有2個小BUG
vim /usr/local/python/lib/python3.6/site-packages/django/db/backends/mysql/base.py
把第35~36行註釋掉
vim /usr/local/python/lib/python3.6/site-packages/django/db/backends/mysql/operations.py
把第145~146行註釋掉
請注意:
遷移以前要把/dapi/interface/migrations目錄下面除了__init__.py之外的全部文件都刪掉
若是以前沒有運行過
則不用管
python manage.py makemigrations
激活模型
報錯:
django.db.utils.ProgrammingError: (1146, "Table 'dapi.product_info' doesn't exist")
分析了一下緣由:
mysql服務已經啓動了
IP、端口、帳號與密碼都是對的呀
如今是直接鏈接本機的mysql
不存在root遠程訪問的問題
何況在安裝mysql時已經打開了root帳號的遠程訪問權限
繼續往上找:
(找跟dapi工程相關的報錯信息,而不是找Python源碼相關的報錯信息)
File "/django/dapi/dapi/urls.py", line 136, in <module>
url('^pyecharts/', include('interface.urls')),
File "/django/dapi/interface/urls.py", line 3, in <module>
from interface import pyecharts
File "/django/dapi/interface/pyecharts.py", line 45, in <module>
product_count = ProductInfo.objects.all().count()
當咱們在激活模型時
程序已經開始執行了
可是在urls.py文件下未能找到所需的表
因而便會出現報錯
vim /django/dapi/dapi/urls.py
把第136行註釋掉
等遷移完成後再恢復
python manage.py makemigrations
從新激活模型
此次成功了
python manage.py migrate
遷移
python manage.py createsuperuser
建立超級管理員帳號
由於靜態文件我已經放在工程的static目錄下面了
因此不用再python manage.py collectstatic收集靜態資源文件了
4、配置Nginx:
vim /usr/local/nginx/conf/nginx.conf
修改nginx配置文件
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031;
}
location /static {
alias /django/dapi/static/;
index index.html index.htm;
}
location /media {
alias /django/dapi/media/;
}
systemctl restart nginx
重啓nginx服務
uwsgi uwsgi.ini
啓動uwsgi服務
ls -a
查看dapi工程目錄下面的全部文件
tail -f uwsgi.log
查看日誌
5、Web頁面:
tail -f uwsgi.log
查看日誌
uwsgitop :9191
監控uwsgi性能
這個界面按Q退出
6、uwsgi命令:
uwsgi --ini uwsgi文件
# 啓動
uwsgi --stop pid文件
# 中止
uwsgi --reload pid文件# 重啓