Flask项目部署经验记载

muyiyl 490 0

记录一下部署Flask项目环境配置的步骤,一来可以当做基础知识的笔记,二来防止往后再踩坑。大环境是:CentOS7+Python3.5+uWSGI+Nginx+MySQL5.6+宝塔面板。CentOS默认的Python环境为2.7.5的,那首先就应该要安装python3的环境,而其他的软件都可以通过宝塔面板一键安装与配置。不过在安装过程中发现,先安装mysql在安装python会报错,因此建议先安装python环境再安装其他软件。[aru_3]宝塔的安装官网有详细的教程。👉点击这里前往(现在注册并绑定面板还可以免费获得收费插件微信小程序[aru_61])

Python环境的安装

Python环境的安装大致为:安装环境依赖,下载编译python的源码,然后再将python3的路径指定到bin路径,以下为安装步骤代码(一行一行来)

# 安装环境依赖
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel  mysql-devel gcc gcc-devel python-devel  
#下载python源码 解压并编译
wget "https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz"
tar -zxvf Python-3.5.0.tgz
mkdir /usr/local/python3
Python-3.5.0/configure --prefix=/usr/local/python3     #如果到这一步报错“error: no acceptable C compiler found in $PATH”时请先执行   yum  install gcc       
make 
make install

按步骤执行完以上的代码,我们的python环境已经是安装好了。这时候只要执行
/usr/local/python3/bin/python3就会出现Python版本3.5.0。但是如果每次执行python3都要这样输一大串,显然很麻烦。于是执行

ln -s /usr/local/python3/bin/python3  /usr/bin/python3

便可以做到执行python3就可以(默认环境变量会搜索/usr/bin里面的数据)。安装完python环境开始安装pip virtualenv。直接上代码。

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
pip3 install virtualenv
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv

以上,便将virtualenv 与pip3都安装好了。以后只要执行
virtualenv -p /usr/bin/python3 envname(virtualenv -p python3路径 虚拟环境名字)便可以创建虚拟环境。source envname/bin/activate进入虚拟环境。

uWSGI的配置

配置完python环境之后,就可以上传代码与配置启动项目。(这里用到的uWSGI与Nginx,它俩的关系大致是外网先访问nginx,然后nginx再转发给uswgi。)
1.配置路径mkdir /data/muyi/blog存放源码,mkdir /data/muyi/logs存在uwsgi启动相关,在muyi文件夹下virtualenv -p /usr/bin/python3 python3_vir创建虚拟环境
2.上传代码。 通过 码云 或者 宝塔直接上传
3.配置uWSGI配置文件
源码目录存放一个uwsgi.ini的文件。在开发部署过程中发现,uwsgi的配置有两种情况发生。
(1)一种情况是能够用runserver正常启动Flask项目,runserver定义在manager里面,此时你可以这样子配置:

[uwsgi]
chdir=/data/muyi/blog      #源码目录
home=/data/muyi/python3_vir   #python 虚拟环境
module=manager   #module指出了项目启动脚本的名字
callable=app           #callable指出的是具体执行.run方法的那个实体的名字
master=true       # 启用主进程
processes=4       # processes指出了启动uwsgi服务器之后,服务器会打开几个并行的进程,这个数字应该合理,太小会使得处理性能不好而太大则会给服务器本身带来太大负担
http=0.0.0.0:8899    # 指定IP端口  
socket=/data/muyi/logs/blog.sock   # 指定sock的文件路径  
buffer-size=65535
pidfile=/data/muyi/logs/blog.pid     #指定pid的文件路径  以后可以查看这个就知道uwsgi启动的pid了  
chmod-socket=777
logfile-chmod=644
daemonize=/data/muyi/logs/blog.log        # 指定启动日志   以后可以查看报错情况
static-map = /static=/data/muyi/blog/web/static  # 指定静态文件
 

(2)另外一种情况项目并没有通过runserver启动,而是直接通过python启动,如python blog.py启动。这样应该改变module与callable的配置。其他与上配置一样。

module=blog
callable=application

而这是如果报 no python application 查阅资料,uwsgi默认启动的是application.run 所以在对应的blog.py里面启动应该是:

application = create_app()
if __name__ == '__main__':
    application.run()

以上,便将uwsgi的配置配置好了。以后启动项目就可以先进入python虚拟环境后,进入源码目录执行 uwsgi --ini uwsgi.ini来启动项目了。如果有报数据库错误请参考👉 部署Flask访问数据库错误
项目启动完之后。可以ps -aux|grep uwsgi查看uwsgi启动情况。cd /data/muyi/logs里面 tail -f blog.log查看项目运行日志(宝塔面板查看更方便[aru_154])。另外uwsgi有个很大的就是每次更新完文件都要进行重启[aru_39][aru_45]。安全起见,需要先杀死uwsgi,然后停止,然后重启。(后台我发现nginx配置好之后直接在面板重启nginx就可以,如果不行,就去重启uwsgi[aru_34],kill -HUP *pid*       uwsgi --stop blog.pid       uwsgi --reload blog.pid)。

Nginx的配置

通过宝塔面板新建个网站,将网站目录指向源码目录。之后点击网站设置-> 配置文件 。配置文件关键部分可以这样子写(需要注意的是 宝塔面板默认SSL相关的最好不要删掉)

server
{
    listen 80;
       server_name xxxx.muyiyl.cn;

    location /static {
		alias  /data/muyi/blog/web/static/;
	}

	location / {
		try_files $uri @yourapplication;
	}
    location @yourapplication {
      include uwsgi_params;
      uwsgi_pass unix:/data/muyi/logs/blog.sock;
      uwsgi_read_timeout 1800;
      uwsgi_send_timeout 300;
    }

    access_log  /www/wwwlogs/xxxxx.muyiyl.cn.log;
    error_log  /www/wwwlogs/xxxxx.muyiyl.cn.error.log;
}

综上,便是配置好了nginx+uwsgi部署Flask项目,然后就可以通过域名访问自己部署的项目了[aru_50]

发表评论 取消回复
表情 图片 链接 代码

分享
微信
微博
QQ