None
CentOS6.9 ( 腾讯云服务器 )
Python 3.6.4
Django==2.0.7
项目根目录(把django项目放在opt目录下)
/opt/pro
工程名:pro
app名:app
.
├── app
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
├── pro
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── templates
因为不涉及到数据库,所以把数据库配置删掉
#DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
允许所有url访问
ALLOWED_HOSTS = ["*"]
pip3 install uwsgi
安装django
pip3 install django==2.0.7
进入项目根目录(/opt/pro)
cd /opt/pro/
uwsgi --http 0.0.0.0:8080 --file pro/wsgi.py --static-map=/static=static
解释上述命令
--http 0.0.0.0:8080 # 指定ip,因为我用的是云服务器,所以是0.0.0.0,如果用的是虚拟机,把0.0.0.0改成虚拟机内网ip(猜测,没有实践过)
--file pro/wsgi.py # 指定django项目中wsgi.py文件
--static-map=/static=static # 静态文件
在项目根目录下新建文件夹 script
cd /opt/pro/
mkdir script
在script目录下新建 uwsgi.ini
cd script
vim uwsgi.ini
填入以下内容
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/opt/pro/
# 指定项目的application
module=pro.wsgi:application
# 指定sock的文件路径
socket=/opt/pro/script/uwsgi.sock
# 进程个数
workers=5
pidfile=/opt/pro/script/uwsgi.pid
# 指定IP端口 云服务器需要改成 0.0.0.0
http=0.0.0.0:8080
# 指定静态文件
static-map=/static=/opt/pro/pro/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/opt/pro/script/uwsgi.log
启动uwsgi
cd /opt/pro/script/
uwsgi --ini uwsgi.ini # 启动uwsgi
uwsgi相关操作
uwsgi --ini uwsgi.ini # 启动
uwsgi --stop uwsgi.pid # 关闭
配置yum源
vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
# 下面这行centos根据你自己的操作系统修改比如:OS/rehel
# 6是你Linux系统的版本,可以通过URL查看路径是否正确
baseurl=http://nginx.org/packages/centos/6/\$basearch/
gpgcheck=0
enabled=1
安装nginx
yum -y install nginx
测试是否安装完成,命令启动nginx
/etc/init.d/nginx start
创建配置文件
cd /etc/nginx/conf.d/
vim pro.conf
server {
listen 80;
server_name 192.144.190.22; # 如果服务器已经被域名解析,必须填域名
access_log /var/log/nginx/access.log main;
charset utf-8;
gzip on;
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
# 指定项目路径uwsgi
location / {
include uwsgi_params;
uwsgi_connect_timeout 30;
uwsgi_pass unix:/opt/pro/script/uwsgi.sock;
}
# 指定静态文件路径
location /static/ {
alias /opt/pro/pro/static/;
index index.html index.htm;
}
}
完美 !!!
Nginx相关命令
/etc/init.d/nginx start # 开始
/etc/init.d/nginx stop # 关闭
/etc/init.d/nginx restart # 重启
# file : Django项目中wsgi.py文件路径
uwsgi --http 0.0.0.0:8000 --file Demo/wsgi.py
参数 | 说明 |
---|---|
http | 地址和端口号,例如:uwsgi --http 0.0.0.0:8000 |
socket | 地址和端口号,例如:uwsgi --socket :8001 |
listen | 设置socket的监听队列大小(默认:100) |
processes | 开启的进程数量 |
workers | 开启的进程数量,等同于processes |
threads | 运行线程(processes的线程数) |
master | 允许主进程存在,启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程。 |
daemonize | 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。 |
log-maxsize | 以固定的文件大小(单位KB),切割日志文件 |
pidfile | 指定pid文件的位置,记录主进程的pid号。 |
chdir | 指定运行目录 |
wsgi-file | 载入wsgi-file |
stats | 在指定的地址上,开启状态服务 |
vacuum | 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件 |
disable-logging | 不记录请求信息的日志。只记录错误以及uWSGI内部消息到日志中。如果不开启这项,那么你的日志中会大量出现这种记录 |
http : nginx 和 uwsgi 中间走的是 http 协议,文本
socket : nginx 和 uwsgi 中间走的是 wsgi 协议,二进制
生产环境百分之九十九是 unix Socket 的方式,ngnix 是做反向代理用的,因为 uwsgi 不具备路由、过滤等方向代理功能,但论执行效率,可以做性能测试,如果是 http 协议的话,性能是没有 unix Socket 方式好的
# 添加4个进程,每个进程2个线程
uwsgi --http 0.0.0.0:8000 --file Demo/wsgi.py --processes 4 --threads 2
未完待续…