Django2.2 + uwsgi + Nginx+python3 的生产环境部署
Nginx搭建Django
使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了。比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署
环境
ubuntu 16.04 python3.5+ nginx1.10 django2.2
一,在本地安装搭建Django项目
> python3 manage.py runserver > 确认启动正常
二,安装uwsgi
1.安装uwsgi sudo pip3 install uwsgi --upgrade 2.安装完成后使用命令测试 先进入项目目录,启动命令 uwsgi --http :8080 --chdir /home/yc/web/ --module web.wsgi # --home 指定virtualenv 路径,如果没有可以去掉。web.wsgi 指的是 web/wsgi.py 文件 3.访问测试,启动成功后 127.0.0.1:8080
三,配置uwsgi文件启动项目
第一步:创建一个uwsgi.ini文件 第二步:在django项目同级目录创建script目录,用于存放配置脚本等等 /home/yc/web/ script/ web/ db.sqlite3 manage.py uwsgi.ini 第三步:编辑uwsgi.ini文件内容如下: 目录参考个人目录进行修改
# uwsig使用配置文件启动 [uwsgi] # 项目目录 chdir=/home/yc/web/ # 指定项目的application module=web.wsgi:application # 指定sock的文件路径 socket=/home/yc/web/script/uwsgi.sock # 进程个数 workers=5 pidfile=/home/yc/web/script/uwsgi.pid # 指定IP端口 http=127.0.0.1:8080 # 指定静态文件 #static-map=/static=/home/yc/web/static # 启动uwsgi的用户名和用户组 uid=root gid=root # 启用主进程 master=true # 序列化接受的内容,如果可能的话 thunder-lock=true # 启用线程 enable-threads=true # 设置自中断时间 harakiri=30 # 设置缓冲 post-buffering=4096 # 设置日志目录 daemonize=/home/yc/web/script/uwsgi.log
第四步:执行命令,启动项目测试 uwsgi --ini uwsgi.ini 在浏览器访问127.0.0.1:800
四,安装nginx
1.安装nginx sudo apt-get install python-dev nginx 2.安装完成后,可以使用localhost测试访问 3.创建项目的配置文件,或者直接修改原nginx配置文件都可以 vim /etc/nginx/sites-available/webtest.conf
server { listen 80; server_name www.pyabc.com; charset utf-8; client_max_body_size 75M; location / { uwsgi_pass unix:///home/yc/web/script/uwsgi.sock; include /etc/nginx/uwsgi_params; } #location /media { # alias /path/to/project/media; #} #location /static { # alias /path/to/project/static; #} }
4,创建完配置文件后创建软连接 sudo ln -s /etc/nginx/sites-available/webtest.conf /etc/nginx/sites-enabled/webtest.conf 5.执行配置文件 sudo a2ensite myproject.conf 6.启动nginx,重新加载配置文件 nginx -s reload
重启后如果访问成功则ok
出现的几个问题
1,我在nginx中给项目配置了一个域名 server_name www.pyabc.com; 那么对应的在host文件中需要有这个域名配置 /etc/hosts 127.0.0.1 www.pyabc.com 2.注意在nginx的配置中uwsgi_pass这一项 uwsgi_pass unix:///home/yc/web/script/uwsgi.sock; 它需要找到你在启动uwsgi后的sock文件,并且要注意权限 3.在使用uwsgi --ini uwsgi.ini启动后会创建 .sock文件 那么在后面更新代码时不需要把 script目录下的文件都删除 只需要重启即可 uwsgi --reload xxx.pid
下一篇:
IBM服务器DASD指示灯报警