从昨天到今天部署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
sudo /etc/init.d/nginx start
接下来使用外网输入你的公网ip
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项目
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