Linux下安装部署 Nginx + uWSGI + Django

前言

上一篇文章,我们提到了Python3+Django2 配置后台管理,在开发环境中这样启动测试是没有任何问题的,我们可以使用 Django 默认的服务器。但是,如果部署到外网就要考虑 Django 运行的性能问题了,默认服务器的处理能力是远远不够的。

项目结构

│  manage.py
├─news
│  │  admin.py
│  │  apps.py
│  │  models.py
│  │  tests.py
│  │  views.py
│  │  __init__.py
│  │
│  ├─migrations
│  │  │  __init__.py
│  │  │
└─itstyle
    │  settings.py
    │  urls.py
    │  wsgi.py
    │  __init__.py

配置

服务器还是选择Linux,部署前需要做以下操作。

Django

由于之前外网没有安装 Django,需要先安装:

pip install Django

sqlite

为了测试方便,这里我们选择 Django 默认自带的 sqlite 数据库:

yum install sqlite*

安装成功以后需要重新配置并编译安装 Python3:

# 配置编译
./configure
# 编译安装
make && make install

uwsgi

安装服务器 uwsgi,你可以把它想象成Java界的Tomcat

pip3 install uwsgi

切换到 news目录,启动:

uwsgi --http :8000 --file itstyle/wsgi.py

你可以可以自定义参数:

# 目录下新建文件夹
mkdir script

在 script 下新增 uwsgi.ini:

# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/www/news/
# 指定项目的application
module=itstyle.wsgi:application
# 指定sock的文件路径       
socket=/www/news/script/uwsgi.sock
# 进程个数       
workers=5
pidfile=/www/news/script/uwsgi.pid
# 指定IP端口       
http=127.0.0.1:8000
# 指定静态文件
static-map=/static=/www/news/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/www/news/script/uwsgi.log

然后使用以下命令启动:

uwsgi  --ini uwsgi.ini

执行命令,查看是否启动成功:

[root@AY140216131049Z script]# ps -ef|grep uwsgi  
root      3040     1  0 Nov21 ?        00:00:03 uwsgi --ini uwsgi.ini
root      3041  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3042  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3043  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3044  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3045  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3046  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      6606  6580  0 18:13 pts/0    00:00:00 grep --color=auto uwsgi

可以通过以下命令杀死进程:

killall  -9 uwsgi

Nginx

最后一步,配置Nginx 转发,具体安装这里不再说明,直接上配置:

 server {
        listen  80;
        server_name  news.52itstyle.com;
        charset utf-8;
        location / {
           #proxy_pass http://127.0.0.1:8000;
           include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
           uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
           uwsgi_pass unix:/www/news/script/uwsgi.sock; # 指定uwsgi的sock文件所有动态请求就会直接丢给他
        }
   }

重启Nginx,你以为这样就成功了么?显然不是,由于静态没有加载,这里还需要对静态文件进行映射。

修改配置setting.py,在最后面加入以下配置:

STATIC_ROOT = '/www/news/static/'

然后执行命令:

python3 manage.py collectstatic

最后不要忘了修改一下域名限制参数,否则无法通过域名访问:

# 修改为 * 允许所有
ALLOWED_HOSTS = ['*']

重启服务,如果正常显示,说明没有问题,如果无法访问,再回头仔细检查一下配置。

调优

既然,我们使用了 Nginx 做代理,最好做动静分离,Nginx处理静态资源的能力可以大大高于uWSGI 的。

server {
        listen  80;
        server_name  news.52itstyle.com;
        charset utf-8;
        location / {
           include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
           uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
           uwsgi_pass unix:/www/news/script/uwsgi.sock; # 指定uwsgi的sock文件所有动态请求就会直接丢给他
        }
        # 动静分离 Nginx 处理静态请求
        location /static {
            root /www/news/;
        }

   }

好了,这就是最终版,动静分离。

访问地址:http://news.52itstyle.com/admin/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏狂码一生

CentOS-7搭建FTP服务器

一、检查vsftpd是否安装     rpm -qa | grep vsftpd 二、安装     yum install vsftpd -y 三、配置  ...

1.2K8
来自专栏抠抠空间

Linux下设置python脚本文件为服务

--------------------------------------------------------------------------------...

2062
来自专栏SpringBoot

第七节,Springboot日志配置SLF4J

trace:跟踪,级别最低的日志 debug:调试,用来查看调试内容 info:信息,一般记录一些方法执行等 warn:警告,可能发生错误的代码 err...

1.5K2
来自专栏破晓之歌

在PythonAnyWhere上部署Django项目

在PAW(PythonAnyWhere)上创建免费beginner账户,网址为: https://www.pythonanywhere.com/pricing...

1562
来自专栏闵开慧

windows中django的安装

1 下载python,解压,配置环境变量,将python的路径复制出来D:\tools\python273,粘贴到环境变量path中即可。 2 下载django...

3638
来自专栏用户2442861的专栏

SpringMVC访问静态资源

http://www.cnblogs.com/yank/p/4477204.html

6741
来自专栏破晓之歌

Python文件处理(持续) 原

1074
来自专栏小夜博客

GoAccess 最优秀的Nginx日志分析工具

92211
来自专栏iOSDevLog

在Mac OS X上安装Python 3并使用virtualenv和virtualenvwrapper

这篇文章解释了如何在Mac OS X中安装Python 3,包括Mavericks和Yosemite。如果要清理安装Python 2.7,请查看此帖子。你也可以...

2791
来自专栏网络

Jenkins实现SpringBoot应用自动部署

工具的出现,目的就是为了提高我们的工作效率,让我们把时间花在做重要的事情上。学习本文你需要具备基本的Linux知识,学习自动部署的前提是你能够手动在服务器完成部...

5045

扫码关注云+社区

领取腾讯云代金券