部署flask项目时,通常都是使用WSGI应用服务器搭配Nginx作为反向代理实现的。常用的WSGI服务器有gunicorn和uwsgi,本项目将使用Nginx反向代理搭配gunicorn实现flask项目的部署。
python3安装 centos7原本就安装了Python2,而且不能被删除,因为可能有程序如yum依赖python2环境。
输入python命令,查看可知centos7自带的是python2.7.5版本。输入“which python”可以查看python所在的位置,一般是位于/usr/bin/python目录下。
1 2 [root@iZf8zi7rsmqdun3dyxb7cfZ ~]# which python /usr/bin/python
下面介绍安装python3的方法
1 [root@iZf8zi7rsmqdun3dyxb7cfZ ~]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
下载 python3安装包,在/usr/local目录下新建一个python3目录,将安装包上传到 /usr/local/python3 目录后解压
1 2 3 [root@iZf8zi7rsmqdun3dyxb7cfZ ~]# mkdir /usr/local/python3 [root@iZf8zi7rsmqdun3dyxb7cfZ ~]# cd /usr/local/python3 [root@iZf8zi7rsmqdun3dyxb7cfZ python3]# tar -xvf Python-3 .6 .2 .tar.xz
1 2 3 [root@iZf8zi7rsmqdun3dyxb7cfZ python3]# cd Python-3 .6 .2 [root@iZf8zi7rsmqdun3dyxb7cfZ python3]# ./configure --prefix=/usr/local/python3 [root@iZf8zi7rsmqdun3dyxb7cfZ python3]# make && make install
1 [root@iZf8zi7rsmqdun3dyxb7cfZ Python-3 .6 .2 ]# ln -s /usr/local/python3/bin/python3 /usr/bin/python3
1 2 3 4 5 6 报错: [root@iZf8zi7rsmqdun3dyxb7cfZ Python-3 .6 .2 ]# ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ln: failed to create symbolic link ‘/usr /bin /python3 ’: File exists 解决方法:ln -s 加一个 f 即可 [root @iZf8zi7rsmqdun3dyxb7cfZ Python -3.6.2]# ln -sf /usr /local /python3 /bin /python3 /usr /bin /python3
将/usr/local/python3/bin加入PATH
1 2 3 4 5 6 7 8 9 # vim ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then. ~/.bashrc fi # User specific environment and startup programs PATH =$PATH :$HOME/bin:/usr/local/python3/binexport PATH
按ESC输入:wq回车退出,修改完执行下面的命令,让上一步的修改生效
1 [root@iZf8zi7rsmqdun3dyxb7cfZ Python-3 .6 .2 ]# source ~/.bash_profile
检查python3及pip3是否正常可用,如果输出版本号就成功啦
1 2 3 4 [root@iZf8zi7rsmqdun3dyxb7cfZ Python-3 .6 .2 ]# python3 -V Python 3 .6 .2 [root@iZf8zi7rsmqdun3dyxb7cfZ Python-3 .6 .2 ]# pip3 -V pip 9 .0 .1 from /usr/local/python3/lib/python3.6 /site-packages (python 3 .6 )
pip3安装(可不装) 丰富的第三方库是python的优势所在,为了更加方便的安装第三方库,使用pip命令,我们需要进行相应的安装。
1 2 3 4 5 6 7 8 [root@iZf8zi7rsmqdun3dyxb7cfZ python3]# mkdir setuptools [root@iZf8zi7rsmqdun3dyxb7cfZ python3]# cd setuptools [root@iZf8zi7rsmqdun3dyxb7cfZ setuptools]# ls setuptools-19 .6 .tar.gz [root@iZf8zi7rsmqdun3dyxb7cfZ setuptools]# tar -xvf setuptools-19 .6 .tar.gz [root@iZf8zi7rsmqdun3dyxb7cfZ setuptools]# cd setuptools-19 .6 [root@iZf8zi7rsmqdun3dyxb7cfZ setuptools-19 .6 ]# python3 setup.py build [root@iZf8zi7rsmqdun3dyxb7cfZ setuptools-19 .6 ]# python3 setup.py install
1 2 3 4 5 6 [root@iZf8zi7rsmqdun3dyxb7cfZ python3]# mkdir pip3 [root@iZf8zi7rsmqdun3dyxb7cfZ python3]# cd pip3 [root@iZf8zi7rsmqdun3dyxb7cfZ pip3]# ls pip-8 .0 .2 .tar.gz [root@iZf8zi7rsmqdun3dyxb7cfZ pip3]# tar -xvf pip-8 .0 .2 .tar.gz [root@iZf8zi7rsmqdun3dyxb7cfZ pip3]# cd pip-8 .0 .2
上传数据 开放3306端口和5000端口: 进入阿里云控制台 –> 点击云服务器ECS –> 点击左侧的安全组 –> 点击创建安全组
选择入方向,手动添加3306端口和5000端口
项目文件
数据库文件 在做毕设项目的时候,我把所有的疫情数据都放到了本地MySQL数据库中,要完成项目的部署,得把本地数据库中的数据上传到服务器的数据库中。前提:我的服务器已经装了MySQL;可使用宝塔面板进行操作,也可在终端输入命令。
进入宝塔面板,点击数据库 – > 添加数据库 –> 输入数据库名
linux中mysql常用命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 启动mysql服务: service mysqld start 查看mysql运行状态: service mysqld status 查看mysql的运行使用的进程 ps -ef |grep mysql 登录本机mysql数据库: mysql -u root -p -->enter:输入密码 停止mysql服务: service mysqld stop 重启mysql服务: service mysqld restart
Nginx简述 Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明Nginx能支持高达 50,000 个并发连接数。
正向代理 正向代理指在客户端(浏览器)配置代理服务器,通过代理服务器进行指定网站访问。
反向代理 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
负载均衡 增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
动静分离 为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,从而降低原来单个服务器的压力。
Nginx安装 安装pcre依赖
进入 src 目录,联网下载 pcre 安装包依赖
1 2 [root@iZf8zi7rsmqdun3dyxb7cfZ ~]# cd /usr/src [root@iZf8zi7rsmqdun3dyxb7cfZ src]# wget http://downloads.sourceforge.net /project/pcre/pcre/8 .37 /pcre-8 .37 .tar.gz
1 [root@iZf8zi7rsmqdun3dyxb7cfZ src]# tar -xvf pcre-8 .37 .tar.gz
1 [root@iZf8zi7rsmqdun3dyxb7cfZ src]# cd pcre-8 .37
1 2 [root@iZf8zi7rsmqdun3dyxb7cfZ pcre-8 .37 ]# ./configure [root@iZf8zi7rsmqdun3dyxb7cfZ pcre-8 .37 ]# make && make install
1 [root@iZf8zi7rsmqdun3dyxb7cfZ pcre-8 .37 ]# pcre-config --version
安装其他依赖 安装openssl 、zlib、gcc依赖
1 [root@iZf8zi7rsmqdun3dyxb7cfZ pcre-8 .37 ]# yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
安装Nginx
先开放80端口:进入阿里云控制台 –> 点击云服务器ECS –> 点击左侧的安全组 –> 点击创建安全组
选择入方向,手动添加80端口
将 nginx-1.12.2.tar.gz 安装包上传到 src 目录后解压,也可以去下载 想要的 Nginx 安装包
1 2 3 [root@iZf8zi7rsmqdun3dyxb7cfZ src]# ls nginx-1 .12 .2 .tar.gz pcre-8 .37 pcre-8 .37 .tar.gz [root@iZf8zi7rsmqdun3dyxb7cfZ src]# tar -xvf nginx-1 .12 .2 .tar.gz
1 [root@iZf8zi7rsmqdun3dyxb7cfZ src]# cd nginx-1 .12 .2
1 2 [root@iZf8zi7rsmqdun3dyxb7cfZ nginx-1 .12 .2 ]# ./configure [root@iZf8zi7rsmqdun3dyxb7cfZ nginx-1 .12 .2 ]# make && make install
Nginx 安装成功后在 usr/local/ 目录下会多一个 nginx 目录
1 2 3 4 [root@iZf8zi7rsmqdun3dyxb7cfZ local]# ls aegis bttomcat games lib64 man sbin webserver bin curl include libexec nginx share zend btjdk etc lib libiconv openssl src
在 nginx 目录下的 sbin 目录有启动脚本
1 2 3 4 5 6 [root@iZf8zi7rsmqdun3dyxb7cfZ local]# cd nginx [root@iZf8zi7rsmqdun3dyxb7cfZ nginx]# ls conf html logs sbin [root@iZf8zi7rsmqdun3dyxb7cfZ nginx]# cd sbin [root@iZf8zi7rsmqdun3dyxb7cfZ sbin]# ls nginx
1 2 3 4 5 [root@iZf8zi7rsmqdun3dyxb7cfZ sbin]# ./nginx [root@iZf8zi7rsmqdun3dyxb7cfZ sbin]# ps -ef | grep nginx root 6511 1 0 13 :57 ? 00 :00 :00 nginx: master process ./nginx nobody 6512 6511 0 13 :57 ? 00 :00 :00 nginx: worker process root 6529 6405 0 13 :58 pts/0 00 :00 :00 grep --color =auto nginx
访问公网地址47.113.197.40,nginx终于安装成功啦✿✿ヽ(°▽°)ノ✿
Nginx 常用命令 使用nginx操作命令前提条件:必须进入nginx的目录(/usr/local/nginx/sbin)
1 2 [root@iZf8zi7rsmqdun3dyxb7cfZ sbin]# ./nginx -v nginx version: nginx/1 .12 .2
1 [root@iZf8zi7rsmqdun3dyxb7cfZ sbin]# ./nginx
1 2 3 [root@iZf8zi7rsmqdun3dyxb7cfZ sbin]# ./nginx -s stop [root@iZf8zi7rsmqdun3dyxb7cfZ sbin]# ps -ef | grep nginx root 6804 6405 0 14 :23 pts/0 00 :00 :00 grep --color =auto nginx
1 [root@iZf8zi7rsmqdun3dyxb7cfZ sbin]# ./nginx -s reload
1 2 3 4 5 6 问题: [root@iZf8zi7rsmqdun3dyxb7cfZ sbin]# ./nginx -s reload nginx: [error ] open () "/usr /local /nginx /logs /nginx.pid " failed (2: No such file or directory ) 解决方法: [root @iZf8zi7rsmqdun3dyxb7cfZ sbin ]# /usr /local /nginx /sbin /nginx -c /usr /local /nginx /conf /nginx.conf
1 [root@iZf8zi7rsmqdun3dyxb7cfZ sbin]# kill -9 6511 (进程号)
Nginx配置文件 nginx配置文件位置
nginx配置文件组成 第一部分:全局块
从配置文件开始到 events 块之间的内容,会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
第二部分:events块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
1 worker_connections 1024 ;
如上代码表示每个 work process 支持的最大连接数为 1024。
第三部分:http块
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。
修改配置文件 记得修改完配置文件,需要重新加载一下配置文件~
1 [root@iZf8zi7rsmqdun3dyxb7cfZ ~]# /usr/local/nginx/sbin/nginx -s reload //重新加载
gunicorn
1 [root@iZf8zi7rsmqdun3dyxb7cfZ ~]# pip3 install gunicorn
1 2 gunicorn -w worker数量 -b ip:端口号 运行文件名:flask实例名 [root@iZf8zi7rsmqdun3dyxb7cfZ cov]# gunicorn -b 127 .0 .0 .1 :5000 cov:app //例子
- w 表示有3 个 工作线程;- b 指定ip 和端口;app 为全局变量 (app = Flask(_ _name _ _))
1 [root@iZf8zi7rsmqdun3dyxb7cfZ cov]# kill -HUP 15456(主进程)
我一般会在项目文件修改后重启一下gunicorn
项目部署 到现在项目部署就差不多,访问一下公网ip (学生优惠领的服务器快过期了,于是我把flask项目移植到另一个服务器了公网ip )看看访问是否成功
项目部署到服务器了,撒花✿✿ヽ(°▽°)ノ✿
使用crontab定时调度爬虫 上传spider.py文件至/root目录,终端输入“crontab -e”命令
1 2 crontab -e //编辑该用户的计时器设置 crontab -l //列出该用户的计时器设置
每隔一小时执行”up_his”下的方法,完成对全国历史数据的爬取;
每隔30分钟执行”up_det”下的方法,完成对今日详细数据的爬取;
每隔一小时执行”up_tol”下的方法,完成对当前总数据的爬取;
1 2 3 4 //crontab编辑内容 * */1 * * * python3 /root/spider.py up_his >> /root/log_his 2 >&1 & */30 * * * * python3 /root/spider.py up_det >> /root/log_det 2 >&1 & * */1 * * * python3 /root/spider.py up_tol >> /root/log_tol 2 >&1 &
完成编辑后按”ESC”键退出编辑模式进入指令模式,输入:wq回车即可保存退出。
小结 项目部署完成啦,还实现了定时爬取疫情数据,真的很有成就感啊<( ̄︶ ̄)>。之前觉得项目部署很难,现在也觉得没啥了,之后还想着要学习Linux的相关命令。不过ECharts图表还是不能正常显示,中国地图不能显示各省的疫情数据,我看腾讯疫情实时追踪的中国地图好像也是用的ECharts,但腾讯显示是正常的。革命尚未成功,还得继续研究一番呐~
下图是我的毕业论文二维码,扫描即可查看全文。记录一下,算是督促自己去完善毕设😊,可以尝试用其他模型做对比实验,也可以用其他划分法对疫情数据进行划分。总之就是,生命不息,学习不止。