展开

文章目录

修改历史

历史修改版本

  1. 2021-03-22 11:40:23
  2. 2021-02-22 18:21:58
  3. 2021-02-22 18:21:11

使用nginx、gunicorn部署项目

2020-10-12 16:23:32 应用部署 374

简介

当我们写完我们的web应用,最后肯定是要部署到公网服务器上去,供全世界的人访问。flask内置的开发服务器不能负载大量访问请求,本文介绍如何使用nginx和gunicorn在Linux环境下,对flask应用进行部署。

配置gunicorn

安装gunicorn

在虚拟环境中安装安装gunicorn。打开终端输入如下命令

pip3 install gunicorn

使用gunicorn运行项目

首先,在项目的根目录中新建wsgi.py文件输入如下内容:

from app import create_app

app = create_app('production')

打开终端输入运行如下命令:

gunicorn -w 4 -b 0.0.0.0:5000 wsgi:app

上面命令中,wsgi为你所创建的入口文件,不一定需要是wsgi.py你也可以使用其他的名称,对应的上述命令就需要更改,app所对应的是你的项目代码文件根目录的名称。

之后我们访问你的云服务器的公网IP:5000就也可以看到你的应用首页了。

如果你在这里使用了.env 文件去配置一些项目的敏感信息,那么可能会出现一些问题,解决方案

使用nginx提供反向代理

安装nginx

在终端中输入如下命令,安装nginx服务器

sudo apt-get install nginx

安装完成之后,在浏览器中输入你的云服务器公网IP地址就可以看到如下页面,说明安装成功了。

配置nginx

修改ngxin默认的配置文件。

sudo vim /etc/nginx/sites-available/default

添加如下内容:

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	# SSL configuration
	#
	# listen 443 ssl default_server;
	# listen [::]:443 ssl default_server;
	#
	# Note: You should disable gzip for SSL traffic.
	# See: https://bugs.debian.org/773332
	#
	# Read up on ssl_ciphers to ensure a secure configuration.
	# See: https://bugs.debian.org/765782
	#
	# Self signed certs generated by the ssl-cert package
	# Don't use them in a production server!
	#
	# include snippets/snakeoil.conf;

	# root /var/www/html;

	# Add index.php to the list if you are using PHP
	# index index.html index.htm index.nginx-debian.html;

	server_name 2dogz.cn; # 如果没有域名直接填写本机的公网IP地址
	access_log /var/log/nginx/access.log; # 权限日志记录文件
	error_log /var/log/nginx/error.log; # 错误日志记录文件

	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		# try_files $uri $uri/ =404;
		proxy_pass http://127.0.0.1:8000; # 转发的本地端口连接,后文会讲述
		proxy_redirect off;
		
		proxy_set_header Host 			$host;
		proxy_set_header X-Real_IP		$remote_addr;
		proxy_set_header X-Forwarded-For	$proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto	$scheme;		
	}
	

	location /static { # 静态文件缓存
		alias /home/ubuntu/blog/flask-blog-owner/app/static/; # 项目的静态文件目录
		expires 30d; # 缓存有效期
		
	}
	
}

在对应的位置添加对应的文本内容就行了,根据实际情况进行修改。

上述文本中不需要加入http块,因为在/etc/nginx/sites-availabel/文件夹下的文件会自动添加到/etc/nginx/nginx.conf的http块当中去。

测试配置文件是否正确

sudo nginx -t

终端输出如下图所示的结果,说明配置文件没有出错。如若不是,根据实际情况进行错误排查。

重启nginx。

sudo service nginx restart

使用nginx+gunicorn运行应用

在完成上述配置之后,我们就可以通过nginx+gunicorn运行我们自己的应用了。

进入项目根目录,并激活虚拟环境。

gunicorn -w 4 wsgi:app

踩的坑

我完成上述步骤之后,访问我服务器的公网地址,可以正常打开网站,但是发现背景图以及一些其他的静态文件没有正确显示,按F12查看,发现出现了403Forbidden错误,查找相关资料,得到以下的解决方案。

  1. 打开终端输入如下命令
    sudo vim /etc/nginx/nginx.conf
  2. 修改文件第一行
    user root;
    再次访问发现错误解决了。

以上就是使用nginx+gunicorn 部署应用的具体流程了,如有纰漏,欢迎指正。

当前共有1条评论


清水 博主

测试评论功能是否正常…

weijiang 用户 回复:清水

不要测试啦,你要相信你自己啦~~

清水 博主 回复:weijiang

好的,相信自己