uwsgi + Nginx 部署过程及问题处理

静态文件
•当 Django 运行在生产模式时,将不再提供静态文件的支持,需要将静态文件交给静态文件服务器。
•我们需要收集这些静态文件,集中一起放到静态文件服务器中。
•先创建目录 static。
•Django 提供了收集静态文件的方法。先在配置文件中配置收集之后存放的目录。

STATIC_ROOT = os.path.join(os.path.dirname(os.path.dirname(BASE_DIR)), 'web/static')

然后执行收集命令
python manage.py collectstatic
我们使用 Nginx 服务器作为静态文件服务器。
Nginx 有两种安装方法,一种是 sudo apt-get nginx 命令安装,一种是通过下载 Nginx 源文件安装。以下方法是源文件安装。

#下载:
wget http://nginx.org/download/nginx-1.11.3.tar.gz

#解压:
tar -zxvf nginx-1.11.3.tar.gz

#进入解压目录:
cd nginx-1.11.3

#配置:
./configure --prefix=/usr/local/nginx

注意:这里可能会报错,提示“pcre.h No such file or directory”,具体详见: http://stackoverflow.com/questions/22555561/error-building-fatal-error-pcre-h-no-such-file-or-directory

需要安装 libpcre3-dev,命令为:
sudo apt-get install libpcre3-dev

#安装 nginx:
sudo make install

#启动 nginx:
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

注意:-c 指定配置文件的路径,不加的话,nginx 会自动加载默认路径的配置文件,可以通过 -h 查看帮助命令。

#查看 nginx 进程:
ps -ef|grep nginx

•打开 Nginx 的配置文件
sudo subl /usr/local/nginx/conf/nginx.conf

•在 server 部分中配置

server {
		listen	80;
		server_name	www.xxx.xxx;
		
		location / {
			root /home/python/Desktop/web; 
			index index.html index.htm;
		}
		
		#余下省略
}

•重启 Nginx 服务器
sudo /usr/local/nginx/sbin/nginx -s reload

参考命令:

首次启动 nginx 服务器
sudo /usr/local/nginx/sbin/nginx

停止 nginx 服务器
sudo /usr/local/nginx/sbin/nginx -s stop

暴力停止 nginx 服务器
sudo pkill -9 nginx

uwsgi
django 的程序通常使用 uwsgi 服务器来运行

•安装 uwsgi
pip install uwsgi

•在项目目录/meiduo_mall 下创建 uwsgi 配置文件 uwsgi.ini

[uwsgi]

#使用 nginx 连接时使用,Django 程序所在服务器地址 socket=127.0.0.1:8001
#直接做 web 服务器使用,Django 程序所在服务器地址http=127.0.0.1:8001

#项目目录
chdir=/Users/Desktop/test

#项目中 wsgi.py 文件的目录,相对于项目目录
wsgi-file=test/wsgi.py

#进程数
processes=4

#线程数
threads=2

#uwsgi 服务器的角色
master=True

#存放进程编号的文件
pidfile=uwsgi.pid

#日志文件,因为 uwsgi 可以脱离终端在后台运行,日志看不见。
daemonize=uwsgi.log

#指定依赖的虚拟环境
virtualenv=/Users/.virtualenv/test

•启动 uwsgi 服务器
uwsgi --ini uwsgi.ini

注意如果想要停止服务器,除了可以使用 kill 命令之外,还可以通过
uwsgi --stop uwsgi.pid

通过命令查看开启状态:
ps aux|grey uwsgi

•修改 Nginx 配置文件,让 Nginx 接收到请求后转发给 uwsgi 服务器
sudo subl /usr/local/nginx/conf/nginx.conf

•调整结果如下

upstream test {
		#如果 Nignx 和 uwsgi 均部署在虚拟机的 ubuntu 中,端口号不能为 8000,否则会 Nignx 服务器监听端口 8000 冲突。
		server 127.0.0.1:8001;	# 此处为 uwsgi 运行的 ip 地址和端口号
		#如果有多台服务器,可以在此处继续添加服务器地址
}

server {
	listen	8000;
	server_name api.xxx.xxx;
	location / {
		include uwsgi_params;
		uwsgi_pass test;
	}
}
server {
	listen	80;
	server_name	www.xxx.xxx;
	#charset koi8-r;
	#access_log	logs/host.access.log	main;
	location / {
		root /User/Desktop/web; 
		index index.html index.htm;
	}
	#error_page	500 502 503 504	/50x.html;
	#location = /50x.html {
	#root   html;
	#}
}

•重启 nginx

sudo /usr/local/nginx/sbin/nginx -s reload

多台服务器配置
•修改 Nginx 配置文件
sudo subl /usr/local/nginx/conf/nginx.conf

•调整结果如下

upstream test{
	server 127.0.0.1:8001;	# 此处为 uwsgi 运行的 ip 地址和端口号

	#如果有多台服务器,可以在此处继续添加服务器地址 
	server 127.0.0.1:8002;
}

•重启 nginx
sudo /usr/local/nginx/sbin/nginx -s reload

问题处理:

Nginx 服务器无法启动
在这里插入图片描述

uwsgi 服务器无法启动
在这里插入图片描述

问题原因:uwsgi.ini 中的端口号和 Nginx 服务器端口号冲突,比如都是 8000;处理方法:

(1)调整 uwsgi.ini 中的端口号,不要和 Nginx 服务器冲突
socket=127.0.0.1:8001

(2)调整 Nginx 配置文件的端口号

upstream test {
server 127.0.0.1:8001; # 此处为 uwsgi 运行的 ip 地址和端口号
#如果有多台服务器,可以在此处继续添加服务器地址

}

(3)关闭相关服务
sudo pkill -9 uwsgi
sudo pkill -9 nginx

(4)启动相关服务
开启 uwsgi:
uwsgi --ini uwsgi.ini
开启 Nginx:
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值