virtualvenv+django+uWSGI+nginx 部署

时间:2023-12-20 12:47:44


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 部署 踩坑记录