Flask 项目部署记录!
Posted QYFabc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask 项目部署记录!相关的知识,希望对你有一定的参考价值。
本文阅读时长大约为 9 分钟
部署基于ubuntu 16.04系统,使用 Gunicorn + Nginx 进行布署,云服务器为阿里云
匆匆忙忙敲完了这个 新经资讯 的项目, 经过一番折腾,终于把项目部署到了服务器上,这里来记录一下部署流程以及踩的坑。
配置服务器
在这里使用了阿里云的免费的一个月的服务器,毕竟穷,而且这也不是什么大项目,等以后再弄好的
选择云服务器:阿里云服务器 https://www.aliyun.com
个人免费获取 [https://free.aliyun.com/]
创建服务器选择ubuntu16.04 64位的操作系统
申请完服务器,进入控制台, 查看实例创建情况
给安全组配置规则,添加5000端口(一并加上5001端口),应该就是设置哪些端口可以访问
注意:要添加上 80 端口,不然无法访问
登录
使用命令行进行远程登录
登录会提示输入密码,但是此时并没有配置密码,所以会一直登录失败,需要去设置一个密码:
设置了密码可能需要在控制台中重启服务器再进行远程登录
重新登录;
这就是个远程的 linux 服务器,没有图形界面,纯命令行操作
配置环境
连接上服务器后就需要对项目运行的环境进行相关的配置
先更新 apt 相关源
sudo apt-get update
mysql安装
apt-get install mysql-server
apt-get install libmysqlclient-dev
redis安装
sudo apt-get install redis-server
安装虚拟环境
pip install virtualenv
pip install virtualenvwrapper
使得安装的virtualenvwrapper生效,编辑~/.bashrc文件,内容如下:
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
source /usr/local/bin/virtualenvwrapper.sh
使编辑后的文件生效
source ~/.bashrc
在这里其实可以不用创建虚拟环境,直接使用就行,但是为了区别还是创建一下,注意一定要指定 python3 这个版本,不然在后面运行时会出错
# 创建虚拟环境
mkvirtualenv -p python3 py3_flask
workon py3_flask
上传项目
因为项目是使用的 git 进行了管理,也在 GitHub 和 Gitee 上进行了上传,直接克隆一份即可
安装 git
sudo apt-get install git
克隆仓库:
git clone https://gitee.com/QYFabc/Information.git
requirements文件
运行项目需要很多配置库,但是一个个下载又很慢,使用下面的方法可以快速对配置库进行下载安装。
Python 项目中可以包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号,以便在新环境中进行部署操作。
在虚拟环境使用以下命令将当前虚拟环境中的依赖包以版本号生成至文件中:
pip freeze > requirements.txt
当需要创建这个虚拟环境的完全副本,可以创建一个新的虚拟环境,并在其上运行以下命令:
pip install -r requirements.txt
在安装 Flask-MySQLdb 的时候可能会报错,可能是依赖包没有安装,执行以下命令安装依赖包:
sudo apt-get build-dep python-mysqldb
遇到的问题
因为项目是在 windows 环境中进行开发的,所有有些库不一样,在安装 Flask-MySQLdb 和 mysqlclient 这两个库时报错,在这里我谷歌了下,使用了下面两个命令来解决
sudo apt-get install python-dev libmysqlclient-dev
sudo apt-get install python3-dev
数据的准备
进入 mysql 数据库,创建新闻仓库
mysql -u用户名 -p密码 show databases; create database information04 charset utf8;
执行数据库迁移:
先退出数据库,进入项目的文件路径,执行下面的命令进行数据库迁移,创建数据表
python manage.py db init python manage.py db migrate -m"initial" python manage.py db upgrade
查看数据库表是否创建完成
show tables;
拷贝本地文件到远程
scp -r 本地文件路径 root@39.106.21.198:远程保存路径
将测试数据 sql 文件使用该命令上传到服务器中
使用命令
source 文件路径
, 将数据添加到数据库中source 路径/information_info_category.sql source 路径/information_info_news.sql
负载均衡 nginx
采用 C 语言编写
实现分流、转发、负载均衡
相关操作
安装
$ sudo apt-get install nginx
运行及停止
/etc/init.d/nginx start #启动
/etc/init.d/nginx stop #停止
配置文件
编辑文件:/etc/nginx/sites-available/default
# 如果是多台服务器的话,则在此配置,并修改 location 节点下面的 proxy_pass
upstream flask {
server 127.0.0.1:5000;
server 127.0.0.1:5001;
}
server {
# 监听80端口
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# 请求转发到gunicorn服务器
proxy_pass http://127.0.0.1:5000;
# 请求转发到多个gunicorn服务器
# proxy_pass http://flask;
# 设置请求头,并将头信息传递给服务器端
proxy_set_header Host $host;
# 设置请求头,传递原始请求ip给 gunicorn 服务器
proxy_set_header X-Real-IP $remote_addr;
}
}
Gunicorn
Gunicorn(绿色独角兽)是一个Python WSGI的HTTP服务器
从Ruby的独角兽(Unicorn )项目移植
该Gunicorn服务器与各种Web框架兼容,实现非常简单,轻量级的资源消耗
Gunicorn直接用命令启动,不需要编写配置文件
相关操作
安装
pip install gunicorn
查看选项
gunicorn -h
运行
# -w: 表示进程(worker) -b:表示绑定ip地址和端口号(bind)
# 如果想在服务器运行起来后不影响其他操作,加上参数 -D 即可
gunicorn -w 2 -b 127.0.0.1:5000 运行文件名称:Flask程序实例名
gunicorn -w 2 -b 127.0.0.1:5000 manage:app
碰见的错误
在执行完命令后一直运行不起来,观察后发现是 gunicorn 找没有找到 python3 执行程序,一直在以 python2 来执行程序。
谷歌了半天,也没有找到合适的解决方案,最后重新创建虚拟环境来解决了这个问题,创建虚拟环境时一定要注意指定 python3 这个版本!
Nginx、Gunicorn在服务器中分别起什么作用?
Nginx 是专业的服务器,性能更好,更专业,并发更高,可以做负载均衡,可以做静态文件缓存,还可以限制 ip 访问的频率等等。
Gunicorn 一般用来管理多个进程,有进程挂了Gunicorn可以把它拉起来,防止服务器长时间停止服务,还可以动态调整 worker 的数量,请求多的时候增加 worker 的数量,请求少的时候减少,这就是所谓的 pre-fork 模型,这貌似就是它的主要优点。(worker 貌似就是进程,不是很确定,因为我们在使用的过程中没有发现进程数量有变化。。。)
也可以用 supervisor 来启动 Gunicorn,这样即使Gunicorn 的管理进程挂了也可以自动起来
就不写域名如何申请了。。。
至此,项目算是完整结束了,也可以通过外网访问了,总的来说还算可以吧,毕竟也算是一个完整的项目。
不过感觉还是不是很到位,很多东西并没有记住,得好好搞一下。
- End -
以上是关于Flask 项目部署记录!的主要内容,如果未能解决你的问题,请参考以下文章