首先要明白整个部署过程的核心,请看下图
- 发起请求者发送http等协议的请求到nginx服务器
- nginx服务器判断是静态资源请求还是动态请求,静态请求直接将静态文件数据发给请求端
- 动态请求会传给uwsgi服务器,uwsgi服务器在将请求以wsgi协议发给django项目的app处理请求,最后将数据返回给上一端
创建Django工程并测试
我的工程就建在了 /home/pi/Videos/ 目录下
-
创建工程
django-admin startproject myweb
-
测试工程
python manage.py migrate
python manage.py runserver 8000
-
访问http://192.168.123.209:8000看页面显示是否成功
安装uwsgi并测试
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
#return ["Hello World"] # python2
运行uwsgi:
(这段命令的意思是 使用http协议 端口为8000 加载指定的wsgi文件 tset.py)
uwsgi --http :8000 --wsgi-file test.py
成功的话会得到hello world
安装nginx,配置并测试
1.安装nginx sudo apt-get install nginx
2. 启动nginx sudo /etc/init.d/nginx start
3.测试 访问http://192.168.123.209/
显示成功安装页面
4.确保你的nginx目录里面有uwsgi_params文件,(我的就有)没有的话新建文件uwsgi_params
去这里 将内容复制到文件里,并将其放到nginx安装目录(即/etc/nignx/uwsgi_params)
5.创建myweb_nginx.conf
文件写入以下内容:
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock;
server 127.0.0.1:8001;
}
# server配置
server {
# web站点端口
listen 8000;
server_name 192.168.123.209;
charset utf-8;
client_max_body_size 75M;
location /media {
alias /path/to/your/mysite/media; # 媒体文件路径
}
location /static {
alias /home/pi/Videos/myweb/static; # 静态文件路径
}
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params; # uwsgi_params 文件路径
}
}
6.最后将这个文件链接到/etc/nginx/sites-enabled
sudo ln -s ~/home/pi/Videos/myweb/myweb_nginx.conf /etc/nginx/sites-enabled/
7.在django项目设置里面(myweb/settings.py中添加)
设置静态文件部署
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
回到项目根目录执行命令python manage.py collectstatic
8.重启nginxsudo /etc/init.d/nginx restart
nginx+uwsgi连接并测试
1.nginx+uwsgi+test.py
uwsgi --socket :8001 --wsgi-file test.py
访问http://192.168.123.209:8000/ 会出现hello world
解释:使用uwsgi协议端口为8001
事实上使用Unix socket会比端口更好(开销更少)所以我们选择使用Unix socket
- 编辑myweb_nginx.conf
- 将下面这段改为
upstream django {
server unix:///home/pi/Videos/myweb/myweb.sock;
# server 127.0.0.1:8001;
}
修改之后重启nginx,再次运行uwsgi
uwsgi --socket myweb.sock --wsgi-file test.py --chmod-socket=666
解释:加上权限,不然报错
2.uwsgi+nginx+django项目
这里我们只需要使用以下命令运行即可
uwsgi --socket myweb.sock --module myweb.wsgi --chmod-socket=666
3.更方便的运行django项目
使用很长的命令实在是太不方便了,这里我们只需要将创建一个uwsgi配置文件,运行时用这个配置文件会更好
创建myweb_uwsgi.ini
文件
[uwsgi]
#绝对路径
chdir = /home/pi/Videos/myweb
#django wsgi 文件
module = myweb.wsgi
#进程设置
master = true
#最大工作进程数
processes = 10
#socket
socket = /home/pi/Videos/myweb/myweb.socket
#权限
chmod-socket = 666
运行uwsgi配置文件来运行整个项目
uwsgi --ini myweb_uwsgi.ini
运行项目
经过以上操作只需运行uwsgi --ini myweb_uwsgi.ini
即可运行django项目了