Nginx+uWSGI+Django 安装配置
1 Django
1.1 安装 pip 和 Django
# 安装 pip
sudo apt install python-pip -y
# 使用 pip 安装 django
sudo pip install django==3.2.1(根据自己需要选择Django版本)
2 uWSGI
2.1 安装测试 uWSGI
# 使用 pip 安装 uwsgi
sudo apt-get install python3.8-dev
sudo pip install uwsgi
# 查看uwsgi版本
uwsgi --version
# 测试uwsgi功能正常否,浏览http://127.0.0.1:8080
sudo uwsgi --http :8080 --wsgi-file test.py
# 测试功能为:the web client <-> uWSGI <-> Python
test.py文件内容如下:
def application(env,start_response):
start_response('200 OK',[('Content-Type','text/html')])
return [b"Hello, www.soloman.vip"]
2.2 使用uWSGI运行Django项目
# 进入到Django项目【solomanvip】根目录下运行。--module xx.wsgi为加载指定的wsgi模块,你项目起的是什么名字,一般就是:项目名.wsgi
uwsgi --http :8080 --module solomanvip.wsgi
# 等效于直接运行
python manage.py runserver 0.0.0.0:8080
# 测试功能为:the web client <-> uWSGI <-> Django
2.3 使用uWSGI配置文件运行Django项目
在Django项目根目录中创建配置文件,solomanvip.ini配置文件内容:
# solomanvip.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
# 指定运行目录,其实就是Django项目的根目录
chdir = /home/soloman/web/solomanvip
# Django's wsgi file
# 导入django项目的wsgi模块
module = solomanvip.wsgi
# 载入wsgi-file,跟上面的效果一样
# wsgi-file = solomanvip/wsgi.py
# 补充,uwsgi启动时的用户和用户组,注意要按你自己的实际权限进行配置
uid = operation
gid = nginx
# process-related settings
# 开启master主进程
master = true
# maximum number of worker processes
# 开启多少个进程数,workers项也等同processes
# threads项则是设置运行线程,测试倒不用设置上线程
processes = 4
# background the process & log
# 后台运行,有用,基本都会设置上,同时还会输出日志
daemonize = /var/log/uwsgi/solomanvip.log
# the socket (use the full path to be safe)
# 设置使用的socket端口或socket地址
# socket = 0.0.0.0:8080
# 上面的socket建议配置成一个solomanvip.socket文件后使用nginx来连接uWSGI运行,不然容易报socket的请求头错误和权限错误等。
# socket = /home/soloman/web/solomanvip.socket
# ... with appropriate permissions - may be needed
# 配置生成的sock文件的权限
chmod-socket = 664
# clear environment on exit
# 退出时清空环境,其实就是将自动生成的solomanvip.sock和相关pid文件给干掉。
vacuum = true
uwsgi指定配置文件启动django项目
uwsgi --ini solomanvip.ini
# 在后台运行
uwsgi --ini solomanvip.ini &
3 Nginx
3.1 安装 Nginx
sudo apt-get install nginx
sudo /etc/init.d/nginx start # 启动
sudo /etc/init.d/nginx stop # 停止
sudo /etc/init.d/nginx restart # 重启
3.2 Nginx 参数配置
main # 全局配置
events { # 工作模式配置
}
http { # http设置
....
server { # 服务器主机配置(虚拟主机、反向代理等)
....
location { # 路由配置(虚拟目录等)
....
}
location path {
....
}
location otherpath {
....
}
}
server {
....
location {
....
}
}
upstream name { # 负载均衡配置
....
}
}
配置文件要由6个部分组成:
main:用于进行nginx全局信息的配置 events:用于nginx工作模式的配置 http:用于进行http协议信息的一些配置 server:用于进行服务器访问信息的配置 location:用于进行访问路由的配置 upstream:用于进行负载均衡的配置
main模块
user 指定nginx worker进程运行用户以及用户组 worker_processes 指定nginx要开启的子进程数量,运行过程中监控每个进程消耗内存(一般几M~几十M不等)根据实际情况进行调整,通常数量是CPU内核数量的整数倍 error_log 定义错误日志文件的位置及输出级别【debug / info / notice / warn / error / crit】 pid 指定进程id的存储文件的位置 worker_rlimit_nofile 指定一个进程可以打开最多文件数量的描述
user root;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events模块
worker_connections 指定最大可以同时接收的连接数量,这里一定要注意,最大连接数量是和worker processes共同决定的。 multi_accept 配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接 use epoll 配置指定了线程轮询的方法,如果是linux2.6+,使用epoll,如果是BSD如Mac请使用Kqueue
events {
worker_connections 1024;
multi_accept on;
use epoll;
}
http模块
http {
# 基础配置
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# SSL证书配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
# 日志配置
access_log /etc/nginx/log/access.log;
error_log /etc/nginx/log/error.log;
# Gzip 压缩配置
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript
# text/xml application/xml application/xml+rss text/javascript;
# 虚拟主机配置
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
server模块
srever模块是http的一个子模块,用来定义一个虚拟服务器的配置信息
server:一个虚拟主机的配置,一个http中可以配置多个server server_name:用力啊指定ip地址或者域名,多个配置之间用空格分隔 root:表示整个server虚拟主机内的根目录,所有当前主机中web项目的根目录 index:用户访问web网站时的全局首页 charset:用于设置www/路径中配置的网页的默认编码格式 access_log:用于指定该虚拟主机服务器中的访问记录日志存放路径 error_log:用于指定该虚拟主机服务器中访问错误日志的存放路径
server {
listen 80;
server_name 127.0.0.1;
root /home/soloman/website/;
index index.php index.html index.html;
charset utf-8;
access_log /etc/nginx/log/access.log;
error_log /etc/nginx/log/error.log;
}
# 重定向http自动转https
server {
listen 80;
server_name soloman.vip www.soloman.vip;
return 301 https://$server_name$request_uri;
}
location模块
location模块是http的一个子模块,主要用于配置路由访问信息
location /:表示匹配访问根目录 root:用于指定访问根目录时,访问虚拟主机的web目录 index:在不指定访问具体资源时,默认展示的资源文件列表
location / {
root /home/soloman/website/html;
index index.php index.html index.htm;
}
# 反向代理配置方式
location / {
proxy_pass http://localhost:8888;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header Host $http_host;
}
# uwsgi模式下的服务器配置访问方式
location / {
include uwsgi_params;
uwsgi_pass localhost:8080;
}
4 部署测试中会用到的Linux命令
# 查看端口运行程序
sudo netstat -tulpn | grep :8080
# 关闭该端口的运行程序
sudo kill -9 id
# 复制文件
cp source dest
# 复制文件夹
cp -r source dest