virtualvenv+django+uWSGI+nginx 部署
1. virtualvenv
virtualvenv install
首先要安装python3
因为系统已经装了 python3.6 所以接下来直接装虚拟环境 virtualvenv
mkdir yourwebproject folder
cd yourwebproject
/usr/python3.6/bin/python3.6 -m venv venv #建立一个独立于系统的虚拟环境 不会跟系统环境混淆
source venv/bin/activate #运行环境
deactivate #退出环境
2. django
- 运行虚拟环境,在环境中安装django
pip install django
- 新建项目
1). django-admin startproject proName
2). cd proName
3). python manage.py runserver # run
- 新建app
不用也可以进行接下来的操作
3. uWSGI
注意区别:WSGI/uwsgi/uWSGI
- WSGI 是一种通信协议。
- uwsgi 是一种线路协议,在此常用于在 uWSGI 服务器与其他网络服务器的数据通信。
- uWSGI 是实现了 uwsgi 和 WSGI 两种协议的Web服务器。
安装
在虚拟环境中
pip install uwsgi
检测 uwsgi 是否正常工作
- 在与venv同目录下写一个模拟站点文件 test.py
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
- 运行
uwsgi --http :8080 --wsgi-file test.py # 假设访问端口号8080
- 浏览器访问
http://serverIP:8080
若显示站点文件中的输出,说明uwsgi生效
路径 web client <-> uwsgi <-> python
部署 django
- 首先运行django确保django能正常工作
python manage.py runserver 0.0.0.0:8000
- 在manage.py同级目录下运行
uwsgi --http :8080 --module djangoProName.wsgi
--module djangoProName.wsgi 代表 djangoProName 目录下的 wsgi.py 文件
- 浏览器访问
http://serverIP:8080
4. nginx
不在虚拟环境中安装
由于服务器上已经安装了 nginx 所以安装步骤省略,只需要在 nginx.conf 中添加配置即可。
- 配置 nginx
nginx.conf 结构:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
# server{ ... }
}
添加 server
server {
listen 98 default_server; # 访问时输入的端口 本地和外部浏览器后面都要加这个端口号
server_name 10.41.95.85; # 自己网站的域名
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / { # location : 文件系统配置 去应答一些要服务器资源的请求
include uwsgi_params;
uwsgi_pass 127.0.0.1:9898; # 与ini文件对接端口 与上面的 93 端口没有关系
}
}
配置完了之后记得重启nginx
- 配置 uwsgi
将配置项全部写入ini文件
在venv同目录下自己新建uwsgi的ini文件
[uwsgi]
socket = 127.0.0.1:9898 ; 与 nginx 对接 IP
; django pro dir
chdir = /root/Odin/TrackManagement/TrackManagement/ ; django project dir
wsgi-file = TrackManagement/wsgi.py ; 代表 TrackManagement 目录下的 wsgi.py 文件
; module = TrackManagement.wsgi ; 有上面的wsgi配置这个就不用写了
processes = 2 ; 进程
threads = 1 ; 线程
stats = 127.0.0.1:9696 ; 通过该端口可以监控 uwsgi 的负载情况 内部配置访问ip 与socket区别开
- 浏览器访问
http://10.41.95.85:98
若显示django画面 则 uwsgi+nginx生效
路径 web client <-> nginx <-> uwsgi <-> django
过程中踩的坑在另一篇博文中 -> virtualvenv+django+uWSGI+nginx 部署 踩坑记录