当在服务器上配置好Django的环境之后,我们只需要将项目运行起来就完成了。在运行起来时我们还需要使用uwsgi
和nginx
。
通过uwsgi我们就可以不再使用python manage.py run server 0.0.0.0:8080
的指令来启动服务了
通过nginx我们对服务器的请求都会先发给nginx然后通过nginx接受后发给服务器,服务器响应后返回给nginx,nginx再将响应转发给客户端的浏览器
uwsgi的安装和配置
-
安装
uwsgi是python的一个模块因此使用pip命令就可以完成安装
pip3 install uwsgi
-
使用配置文件启动项目
安装完uwsgi之后有两种方式启动项目:
1.使用指令直接启动
2.通过配置文件
此处选择的是第二种通过配置文件来启动
配置文件我选择的目录是在项目中创建一个script文件夹(与manage.py同级),将uwsgi相关文件都放在script之中。
配置文件uwsgi.ini
# uwsig使用配置文件启动
[uwsgi]
# 项目目录,这个项目名为TeaShop
chdir=/root/projects/TeaShop/
# 指定项目的application
module=TeaShop.wsgi:application
# 指定sock的文件路径
socket=/root/projects/TeaShop/script/uwsgi.sock
# 进程个数
workers=5
pidfile=/root/projects/TeaShop/script/uwsgi.pid
# 指定IP端口
http=0.0.0.0:8080
# 指定静态文件
# static-map=/static=/opt/proj/teacher/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=/root/projects/TeaShop/script/uwsgi.log
相关指令
uwsgi --ini uwsgi.ini # 启动
uwsgi --reload uwsgi.pid # 重启
uwsgi --stop uwsgi.pid # 关闭
如果我们在manage.py那一级使用指令启动就应指明文件位于script文件夹下,因此使用
uwsgi --ini ./script/uwsgi.ini
指令即可,重启在py3环境下现在会出现signal_pidfile()/kill(): No such process [core/uwsgi.c line 1693]
的报错信息因此不能使用重启
nginx的安装和配置
-
nginx的安装和卸载
在本次启动项目过程中,因为某些步骤的失误,一不小心把nginx的配置文件ngonx.conf误删掉了,于是打算卸载之后重新安装,按照网上教程直接删掉nginx文件夹之后nginx居然还在启动失败状态,然后再次安装也未果。于是此处顺便整理了安装和卸载的指令
1.安装
和Ubuntu下大部分服务安装一样使用apt-get
sudo apt-get install nginx
2.常用指令
#启动
service nginx start
#查看状态
service nginx status
#重启
service nginx restart
#停止
service nginx stop
3.删除nginx,-purge包包括配置文件
sudo apt-get --purge remove nginx
4.删除nginx相关的包
sudo apt-get --purge remove nginx-common
sudo apt-get --purge remove nginx-core
5.重装nginx
sudo apt-get upgrade
sudo apt-get install nginx
安装完成之后可以使用上面的指令启动并查看状态
-
文件路径
1.所在位置
网上说nginx的默认路径在/usr/local/nginx目录下,但是我这里在/etc/nginx目录下
nginx.conf
是nginx的配置文件,我们之后创建的nginx配置设置放在conf.d文件夹下而不是去覆盖这个nginx.conf
日志文件放在/var/log/nginx文件夹下
报错信息放在error.log中
我们要做的就是添加一个mynginx.conf文件在conf.d文件夹下
mynginx.conf内容如下
# $gzip_ratio计算请求的压缩率,$body_bytes_sent请求体大小
log_format main '$remote_addr - $remote_user [$time_local] "$host" - "$request" '
'$gzip_ratio - $body_bytes_sent - $request_time';
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明
gzip_comp_level 1;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
# 设置压缩所需要的缓冲区大小
gzip_buffers 32 4k;
# 设置gzip压缩针对的HTTP协议版本
gzip_http_version 1.0;
charset utf-8; # Nginx编码
server { # 这个server标识我要配置了
listen 80; # 我要监听那个端口
server_name IP; # 此处要修改为你的域名或是服务器外网ip
# error_page 404 /404.html; # 错误页面
# error_page 500 502 503 504 /50x.html; # 错误页面
# 指定项目路径uwsgi
location / { # 这个location就和咱们Django的url(r'^admin/', admin.site.urls),
include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
uwsgi_pass unix:/root/projects/TeaShop/script/uwsgi.sock; # 指定uwsgi的sock文件所有动态请求就会直接丢给他
}
# 指定静态文件路径
# location /static {
# alias /data/office/office1/static/;
# index /data/office/office1/templates/index.html; # 配置两个index.html也只认第一个
# }
}
完成之后就可以重启uwsgi和nginx服务了。如果顺利的话就可以通过服务器ip或是域名访问
网友评论