centos7 服务器配置uWSGI+Nginx+Django
本篇文章参考uWSGI官网Setting up Django and your web server with uWSGI and nginx英语不错的的小伙伴可以自行阅读
1. 配置环境
-
创建虚拟环境
conda create -n django-env python=3.6
conda activate django-env
-
下载Django
conda install django
-
下载uwsgi
pip install uwsgi
2. the web client <-> uWSGI <-> python
-
创建test.py文件
vi test.py
i(进入编辑)
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
esc(退出编辑)
:wq!(保存并强制退出(!强制 w保持 q退出))
-
运行uwsgi
uwsgi --http :8000 --wsgi-file test.py
配置项解释:
-
--http :8000
:使用http协议连接,连接端口为8000
-
--wsgi-file
:加载指定的文件
注意:
如果在网页上看到了你看到了 Hello World
恭喜你 the web client <-> uWSGI <-> Python
在个流程没问题了
3. the web client <-> uWSGI <-> Django
-
创建Django项目
django-admin startproject mysite
-
配置项目
cd mysite/mysite
vi setting.py
修改:
1. 数据库从sqlite3改为mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名',
'USER': '数据库用户',
'PASSWORD': '数据库密码',
'HOST': '数据库连接地址',
'PORT': '3306',
}
}
2. 语言从英语改成中文(可以不改)
LANGUAGE_CODE = 'en-us' ---> LANGUAGE_CODE = 'zh-hans'
3. 时间标准从国际协调时间改为亚洲上海时间(可以不改)
TIME_ZONE = 'UTC' ---> TIME_ZONE = 'Asia/Shanghai'
esc(退出编辑)
:wq!(保存并强制退出(!强制 w保持 q退出))
-
创建数据库
进入mysql:
create database 数据库名
退出mysql
python manage.py migrate
-
runserver 运行Django项目
python manage.py runserver 0.0.0.0:8000 运行django项目
注意:
-
如果你是远程服务器运行,访问地址:http://ip:8000,并且网站显示Invalid HTTP_HOST header: 'ip:8000'. You may need to add 'ip' to ALLOWED_HOSTS.
提示
ALLOWED_HOSTS = [] ---> ALLOWED_HOSTS = ['ip',]
-
如果你是本机访问,访问地址:http://loaclhost:8000
如果你看到了Django运行成功的小火箭,就说明没问题了,加入下一步
-
uwsgi运行Django项目
uwsgi --http :8000 --module mysite.wsgi
配置项解释:
--module
:加载指定的wsgi模块
接下来你去刷新一下刚才 runserver
时打开的网页,如果还是小火箭,恭喜你 the web client <-> uWSGI <-> Django
这个流程没问题了
the web client <-> the web server
安装启动Nginx
(看我文章Nginx安装)
默认配置启动Nginx后,Nginx监听80端口
- 如果你是远程服务器运行,访问地址:http://ip:80
- 如果你是本机访问,访问地址:http://loaclhost:80
如果看到的是Nginx的欢迎页面, 页面上有加粗的Welcome to nginx!
,恭喜你 the web client <-> the web server
流程没有问题
the web client <-> the web server <-> the socket <-> uWSGI <-> Python
配置Nginx和uWSGI需要一个uwsgi_params
文件,这个文件Nginx自带在/usr/local/nginx/conf
里面
-
配置Nginx
-
接下来创建一个配置文件mysite_nginx.conf
:
# 官方给的配置文件(我们需要修改一下)
# mysite_nginx.conf
upstream django {
# server unix:///path/to/your/mysite/mysite.sock;
server 127.0.0.1:8001;
}
server {
listen 8000;
server_name example.com;
charset utf-8;
client_max_body_size 75M;
location /media {
alias /path/to/your/mysite/media;
}
location /static {
alias /path/to/your/mysite/static;
}
location / {
uwsgi_pass django;
include /path/to/your/mysite/uwsgi_params;
}
}
# 将配置文件中的 /path/to/your/mysite 改为你的项目文件路径(manage.py上级目录) /home/python/project/django/mysite
# uwsgi_params除外,把这个的 /path/to/your/mysite 修改为 /usr/local/nginx/conf
# 将 server_name example.com; 改为 server_name ip地址;
# ip地址: 本机localhost或127.0.0.1、服务器:服务器IP
upstream django {
# server unix:///home/python/project/django/mysite/mysite.sock;
server 127.0.0.1:8001;
}
server {
listen 8000;
server_name ip地址;
charset utf-8;
client_max_body_size 75M;
location /media {
alias /home/python/project/django/mysite/media;
}
location /static {
alias /home/python/project/django/mysite/static;
}
location / {
uwsgi_pass django;
include /usr/local/nginx/conf/uwsgi_params;
}
}
-
在项目目录下创建文件夹media
在下面放一张图片,用于别是否成功连接
-
接下来将配置文件mysite_nginx.conf
引入Nginx默认配置nginx.conf
# 在nginx.conf末尾加上
include /usr/local/nginx/conf/sites-available/*.conf;
# include指令用于从外部文件中引入配置参数
# *.conf 引入该文件夹下的所有以.conf结尾的文件
# "/usr/local/nginx/conf/sites-available/"是我创建配置文件的路径
-
然后我们重启Nginx,浏览器访问http://ip:8000/media/图片名称.后缀名(ip
同上)
注:访问如果出现403 Forbidden
,需要修改Nginx配置文件
# user nobody
# 改为 media 文件夹的所有用户,我的是python
# 不知道的去media的父级目录使用命令 ll 查看
user python
修改完毕后重启Nginx,如果你看到了你的图片,恭喜你现在nginx没有问题了
-
配置Django
-
nginx + uwsgi + test.py
-
还记得一开始的test.py
吗,让我们先用它测试一下
配置项解释:
socket :8001
:使用协议 uwsgi,端口 8001
如果你看的了Hello World
,恭喜你,the web client <-> the web server <-> the socket <-> uWSGI <-> Python
流程没有问题了
使用套接字Unix 启动项目而不是端口
-
修改配置文件
大家记得配置文件mysite_nginx.conf
有一行注释server unix:///home/python/project/django/mysite/mysite.sock;
我们去打开它,然后将server 127.0.0.1:8001;
注释
server unix:///home/python/project/django/mysite/mysite.sock;
# server 127.0.0.1:8001;
-
重启nginx
-
再次运行 uWSGI
uwsgi --socket mysite.sock --wsgi-file test.py
如果网页显示502 Bad Gateway
,我们去看一下错误如果是看我的Nginx安装博客的小伙伴,错误日志位置/usr/local/nginx/logs
,我们使用cat
命令看一下,错误日志cat error.log
,如果你看到了
connect() to unix:///home/python/project/django/mysite/mysite.sock failed
首先看一下unix:///home/python/project/django/mysite/mysite.sock
是否是你test.py
文件所在的地址,如果是那么我们可能需要管理套接字上的权限,以便允许nginx使用它。
初始使用一下命令启动:
uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=666
还是不行,尝试这个
uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=664
最后:你看到了Hello World
,恭喜你成功使用Unix套接字
启动了python文件
使用uwsgi和nginx运行Django应用程序
提示
官网文档上在后面还讲了怎么设置全局的uwsgi,有需要的小伙伴可以去看看,链接在最顶部