阿里云16.04 Flask+Gunicorn+Nginx+Systemd 部署

爬了三天坑 终于爬出来了

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

1. SSH 链接

windows :下载xhell #
Mac 下操作:打开终端 输入 如下:

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

如果遇到图片这种错误 执行 rm -rf ~/.ssh/known_hosts( 整个文件删掉)
或者执行下边的更安全(只删除有问题的文件)
ssh-keygen -f "/home/choldrim/.ssh/known_hosts" -R ip地址
ssh链接报错

2. 更新软件源

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

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

python最新版本3.7,怕有坑我选3.6
阿里云自带python3版本为python3.5 需要更新可以执行下边命令

1. sudo apt-get install software-properties-common python-software-properties #添加源
2. sudo add-apt-repository ppa:jonathonf/python-3.6 # 添加安装源
3. sudo apt-get update 								# 将3.6的安装源添加进系统并更新
4. sudo apt-get install python3.6 					# 安装python3.6
5. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1   # 设置3.5的优先级
6. 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. 设置安全组

flask的web服务放在5000端口 这俩个端口默认关闭 需要在安全组打开 附一个配置的链接阿里云安全组策略配置
在这里插入图片描述

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 /home/demo/
  • . 进入项目目录
sudo cd /home/demo/
  • . 创建虚拟环境
virtualenv -p /usr/bin/python3 venv
  • . 选择进入虚拟环境
source venv/bin/activate
  • 在虚拟环境下安装flask
pip install flask
  • 创建hello.py文件
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
        return "你好"
if __name__ == "__main__":
        app.run(host='0.0.0.0',port=5000)
  • 在虚拟环境中执行hello文件用python启动flask项目就可以从外网访问了
    web返回页面
7. 安装和使用gunicorn

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

8.在虚拟环境中安装gunicorn
pip install gunicorn
  • 测试gunicorn (hello是文件名,-b ip和端口 app是实列flask应用名 reload重载) 成功返回页面
gunicorn -b 0.0.0.0:5000 hello:app --reload

gunicon返回页面

  • 创建5个进程运行项目 (-w 后代表要创建的进程数)
    在这里插入图片描述
9. 使用Nginx代理请求Gunicorn

上边已经成功安装了nginx ,之后配置/etc/nginx/sites-available/default文件

  • listen 主要用来监听端口
  • server_name主要用来匹配url地址。任意请求通过nginx时,它会查看url并寻找
  • location 接受两个参数,一个字符串或者正则和一段代码能根据业务设置服务端配置,字符串或者正则用于匹配某个特定目录。
  • (还有root参数 是托管静态站点文件部分 托管一些html和css文件 是定义这些文件的存放路径)我这边就想简单跑同所以没配置
    在这里插入图片描述
    验证配置文件是否有问题 正常则返回图片内容
sudo nginx -t

在这里插入图片描述
在nginx运行时,会查找 /etc/sites-enabled 目录下的所有配置文件用于显示对应内容。但是在配置前已经开启了nginx服务 为了让nginx真正读取新配置文件,需要重启服务器,运行以下命令:

service nginx reload
10. Gunicorn与Systemd操作后台运行程序
  • 在退出服务后程序就结束了 可以用ubuntu自带的server服务解决这个问题
  • 添加一个服务文件 并添加配置
    vi /etc/systemd/system/hello.service
    server配置
  • Description : 描述。
  • After:指定启动顺序。
  • User:用户
  • Group:用户组
  • PIDFile:进程
  • Environment:环境
  • WorkingDirectory:工作目录
  • ExecStart:执行程序 (命令对应上边Gunicorn运行项目)
  • ExecReload:重载
  • ExecStop:停止
  • WantedBy : 表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行
启动服务:sudo systemctl start material_app
启用此服务 每次服务器启动时,Gunicorn开始服务Web应用程序:sudo systemctl enable material_app
重启服务器输入公网就能看到你的flask项目
正常的ssh链接要下载私钥到本地 操作也不应该给root权限

猜你喜欢

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