阿里云部署并安装并且使用nginx+gunicorn+supervisor部署flask应用

从昨天到今天部署flask项目遇到很多坑 在此记录下来希望帮助更多人

我的服务器是阿里云 ubuntu16.04 64位操作系统 不同版本可能会有差异

1. SSH 链接

windows :下载xhell # 因为我用的Macwindows下操作可以百度
Mac:打开终端 输入

ssh -p 22 你服务器的用户名@公网地址 再输入密码即可 	# 22是默认端口号 用户名阿里为root
2. 更新软件源

登陆的第一件事就是先执行一下update 更新阿里的源

	sudo apt-get update
3. 更新python3 并且下载pip3

阿里云自带python3版本为python3.5 需要更新可以执行下边命令

1. sudo add-apt-repository ppa:jonathonf/python-3.6 # 添加安装源
2. sudo apt-get update 								# 将3.6的安装源添加进系统并更新
3. sudo apt-get install python3.6 					# 安装python3.6
4. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
   sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2	# 设置python3.6 的优先级

下载pip 脚本

wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
4. 设置安全组

nginx后面使用的是80端口 flask的web服务放在8080端口 这俩个端口默认关闭 需要在安全组打开 不懂的可以看阿里云安全组策略配置
在这里插入图片描述

5. 配置nginx
sudo apt-get update
sudo apt-get install nginx

下载成功后可以查看版本

nginx -v

nginx版本
运行 nginx

sudo /etc/init.d/nginx start

启动nginx服务
接下来使用外网输入你的公网ip
nginx成功返回页面

6. virtualenv 部署 flask

不会用的可以戳 廖雪峰大神对virtualenv的介绍virtualenv
安装virtualenv

pip3 install virtualenv

创建项目目录

sudo mkdir /var/www/demoapp

创建虚拟环境

virtualenv -p /usr/bin/python3 env

进入虚拟环境

source env/bin/activate

在虚拟环境下安装flask

pip install flask

创建views.py文件

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "一个web项目!"
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080)

在虚拟环境中执行views文件启动flask项目
web项目

7. 修改nginx配置

用nginx -t 查看配置文件的所在目录
在这里插入图片描述
在安装完nginx后会给我们一个基本的结构,所有的nginx配置文件都在/etc/nginx下。
在 /etc/nginx/sites-available 文件夹是你需要建立多个站点可以用到,你需要在nginx添加你的配置文案将他们链接至sites-enabled 目录下。

ln -s /etc/nginx/sites-available/dotcom /etc/nginx/sites-enabled/dotcom

在 sites-enabled 目录下配置的文件才能被用户访问
具体配置代码如下
listen 监听端口

server {
	listen 80;
}

server_name主要用来匹配url地址。任意请求通过nginx时,它会查看url并寻找 server_name 片段。如果你的站点地址为 http://xvfeng.me, 那么你的 server_name 应当也为 xvfeng.me . 如果你在域名解析时使用了A记录并通过服务器指向 http://snargles.com , 你可以添加另外一个 server 代码,将 server_name 指向 snargles.com, 这段代码就会匹配来自于这个域名的请求。

server {
    listen 80;
    server_name example.com;
}

root 是托管静态站点文件部分 托管一些html和css文件 是定义这些文件的存放路径

server {
    listen 80;
    server_name example.com;
    root /var/www/demoapp;
}

location
Location接受两个参数,一个字符串或者正则和一段代码。字符串或者正则用于匹配某个特定目录。如果你想让用户在访问 example.com/whaterver 时访问某个特定页面,你需要将 whatever 设置为uri地址。在这里我们只需要访问root目录,因此只需要加上 / 即可,内容暂时为空。

server {
    listen 80;
    server_name example.com;
    root /var/www/example;
    location / {
    }
}

第一参数可以有很多种写法,你可以参考上面给出的链接。在以上区块内,我们需要路由指向结果页面。注意 / 会匹配所有的url地址,因为在这里它被解释为一个正则。如果你只想匹配某个准确的字符串,只需要在前面加上一个等号,写法如下:

location = / { ... }

charset 编码

server {
    listen 80;
    server_name example.com;
    charset utf-8;
    root /var/www/example;
    location / {
    }
}

启动服务
总结一下我们所做的事情。首先添加了 server 选项,在nginx运行时,会查找 /etc/sites-enabled 目录下的所有配置文件用于显示对应内容。但是请等一下,你可能无法马上得到结果-因为nginx并不知道你所作的这些改动。为了让nginx真正读取新配置文件,你需要重启服务器,运行以下命令:

service nginx reload
8. 安装gunicorn

Web框架(Flask)致力于如何生成HTML代码,而Web服务器(nginx)用于处理和响应HTTP请求。Web框架和Web服务器之间的通信,需要一套双方都遵守的接口协议。WSGI协议就是用来统一这两者的接口的。
常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令启动,不需要编写配置文件,相对uWSGI要容易很多,所以这里我也选择用Gunicorn作为容器。
在虚拟环境中安装gunicorn

sourace env/bin/activate
pip install gunicorn

启动gunicorn -w 表示启动几个worker 进程 ,-b 表示绑定的端口

/var/www/demoapp/env/bin/gunicorn -w2 views:app -b 0.0.0.0:8080
9. 使用supervisor守护gunicorn

启动gunicorn

sudo apt-get install supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改/etc/supervisor/supervisord.conf,在结尾增加

[include]
files = /var/www/demoapp/demoapp_supervisor.conf

注意,一定要删掉[include]前面的分号,否则没用哦
修改/var/www/demoapp/demoapp_supervisor.conf的内容,全部内容如下:

在这里插入图片描述
杀掉supervisord,重新启动:

pgrep -ax supervisord
# 查看到进程号
kill 进程号
supervisord  -c /etc/supervisor/supervisord.conf
supervisorctl  -c /etc/supervisor/supervisord.conf status 
10.重启linux,查看80端口(nginx的端口),应该还是可以看到views返回的页面。

猜你喜欢

转载自blog.csdn.net/IF_Albert/article/details/86587787
今日推荐