Django+Uwsgi+Nginx部署
这几天一直在捣腾Django部署,一只菜鸡的上山路
如果什么不对,还请多多指教。
参考:如何使用Django与uWSGI,Uwsgi文档
Linux使用的是ubuntu18.04.4版本,自带python3.6
更新Linux资源
sudo apt-get updatesudo apt-get upgrade
安装pip3
sudo apt install python3-pip # 完成之后,使用pip3 -version 查看版本则安装成功
安装uwsgi
pip3 install uwsgi # 提示没有权限,使用sudo进行安装
创建测试文件
cd /homevim test.py
test.py
def application(env, start_response):start_response('200 OK', [('Content-Type','text/html')])return [b"Hello World"]
将其部署HTTP9090端口上
启动uWSGI来运行HTTP服务器/路由器,将请求传递到您的WSGI应用程序:
uwsgi --http :9090 --wsgi-file test.py
如果显示
*** uWSGI is running in multiple interpreter mode ***spawned uWSGI worker 1 (and the only) (pid: 3797, cores: 1)[pid: 3797|app: 0|req: 1/1] 123.10.3.118 () {38 vars in 827 bytes} [Mon Feb 24 08:58:53 ] GET / => generated 11 bytes in 0 msecs (HTTP/1.1 200) 1 headers in 44 bytes (1 switches on core 0)[pid: 3797|app: 0|req: 2/2] 123.10.3.118 () {38 vars in 769 bytes} [Mon Feb 24 08:58:53 ] GET /favicon.ico => generated 11 bytes in 0 msecs (HTTP/1.1 200) 1 headers in 44 bytes (1 switches on core 0)
则为运行成功。
如果是
# 提示端口号已被使用,如果想继续使用则找到端口的pid,然后kill掉# 最简单的就是换个端口号,用以测试thunder lock: disabled (you can enable it with --thunder-lock)probably another instance of uWSGI is running on the same address (:8000).bind(): Address already in use [core/socket.c line 769]
如果还有其他的报错,请在云管理中将端口打开
测试是否运行成功
公网ip:9090 打开页面显示Hello World则为成功
导入Django项目
在可以正常运行的情况下批量导出所需模块
pip freeze >requirements.txt
将文件放在linux的目录下进行批量导入
sudo pip3 install -r requirements.txt
创建Django存放目录,并运行
mkdir -p projkect
然后将Django项目导入
修改settings.py
DEBUG = FalseALLOWED_HOSTS = ["*"]
在项目下运行
python3 manage.py runserver 0.0.0.0:8000
然后在浏览器中输入公网ip:8000,如果正确访问则没有问题
安装Nginx
sudo apt install niginx
启动nginx
service nginx start
在浏览器中测试,输入公网ip会出现
给项目创建一个uwsgi的配置文件,以ini结尾
mysite_uwsgi.ini
[uwsgi]# Django-related settingssocket = 127.0.0.1:9001# 项目绝对路径chdir = /home/project/mysite //此处要修改 此处是你项目的路径# Django的wsgi文件相对路径wsgi-file = mysite/wsgi.py//此处也要修改 填写项目的名称# process-related settings# mastermaster= True# 最大进程数processes = 4# 线程数threads = 2#设置此参数,有一个主进程master=True#守护进程的方式运行,log日志存在此log文件里deamonize=/var/log/uwsgi/djangoProject.log#主进程id写入文件里pidfile= /var/log/nginx/uwsgi.pid# ... with appropriate permissions - may be needed# chmod-socket = 664#退出时,清理环境vacuum= Truereload-mercy = 10max-requests = 5000limit-as = 512buffer-size= 30000
注意:上述文件后的双斜杠注释在文件中是不存续存在的,只是在本文章中作为说明存在
# 检查nginx配置文件是否正确nginx -t
正确输出为:
the configuration file /etc/nginx/nginx.conf syntax is okconfiguration file /etc/nginx/nginx.conf test is sucessful
错误按照上面的提示进行修改
找到nginx的配置文件
vim /etc/nginx/nginx.conf
默认加载/etc/nginx/conf.d目录下的以.conf结尾的配置文件
# 进入conf.dcd /etc/nginx/conf.d# 创建自己的配置文件vim mysite_nginx.conf# 内容如下server {# 监听8000端口listen 8000;server_name 127.0.0.1;access_log/var/log/nginx/mysite_access.log;# 错误日志error_log /var/log/nginx/mysite_error.log;# 编码charsetutf-8;# 浏览器最大缓存client_max_body_size 75M;root /home/project/mysite;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:9001;uwsgi_read_timeout 2;}# 项目所需的静态文件location /static/ {expires 30d;autoindex on;add_header Cache-Control private;alias /home/project/mysite/static/;}# 项目所需资源文件location /media/ {expires 30d;autoindex on;add_header Cache-Control private;alias /home/project/mysite/media/;}}
配置完成,重启nginx
sudo service nginx restart
网上找的资源提示说 重启报错,但是nginx -t 不报错,需要重启服务器 --ps:这个情况我没有遇到
最后一步让uwsgi使用自定义的ini文件
uwsgi --ini /home/mysite_uwsgi/mysite_uwsgi.ini
上述需要ini配置文件的全路径
到此为全文
最后在浏览器中输入ip即可
如果报错,查看mysite_error.log
,对应解决。
但是nginx -t 不报错,需要重启服务器 --ps:这个情况我没有遇到
最后一步让uwsgi使用自定义的ini文件
uwsgi --ini /home/mysite_uwsgi/mysite_uwsgi.ini
上述需要ini配置文件的全路径
到此为全文
最后在浏览器中输入ip即可
如果报错,查看mysite_error.log
,对应解决。
截至到目前为止,才对Uwsgi和Nginx有一点点的了解,呜呜呜