flask部署到阿里云服务器centos+python3+gunicorn+nginx详细教程(从本地windows可运行部署服务器环境上可运行) - Go语言中文社区

flask部署到阿里云服务器centos+python3+gunicorn+nginx详细教程(从本地windows可运行部署服务器环境上可运行)


前言:

做了flask网站,是因为软件工程课程的任务,每个小组期末需要交一份的可运行的项目,我们小组做的是flask留言墙,用的flask做后台逻辑功能,前端h5,javascript,jquery,实现网页布局,样式,前端验证...做完,想把这个网站挂到外网上,就需要服务器...这里用了阿里学生云服务器,9.5一个月,很便宜的。经过几番折腾,终于能够外网访问,能够访问,注册,登录,视频等待

服务器上部署环境对新手来说还真不友好,布置的稀里糊涂的,网上教程一大堆,但是转载一大堆,很多时候发现看的就是那么几个,还不是真正部署完整的项目,服务器环境部署也有很多坑,博主都还有几个没解决掉,就放弃了,反正网站也算成功了,像本地一样。这里推荐阿里云服务器上的宝塔应用镜像,可以预安装好多程序,mysql,nginx,可以直接在上面给配置,就不需要在系统里面用命令改了,很不方便,尤其对那些没学linux的人,真的很难受,幸好博主这学期有两门linux课程,基础和一般都会的,也能理解。

老规矩,还是放下效果图,镇楼,这里是网站运行的效果:

 

 

一:

首先,你得去阿里云购买一台服务器,要是学生的话,就很便宜,用支付宝登录后,自动认证学生,就能低价购买服务器。

博主用的是轻量级应用服务:https://www.aliyun.com/ss/?k=学生服务器

还有一种就是ECS服务器,可以看到上图对比,其实没什么多大差别,我网上查了资料,网友说,ECS可能更好一点,但是针对个人学习测试来说并没有什么影响。我用的是轻量级应用宝塔镜像,对新人来说相对友好的,可以预装很多程序,还有很多方便管理的自选安装程序。

购买后:点击下面的服务器

会出现你的服务器的基本信息:当然你可以刚开始随便玩其他的系统或者应用镜像,反正我是玩了,好久,重置系统了好多次,因为去对比,看其他系统,windows是图形界面系统的,我刚开始也想用图形界面的,但是发现教程全是linux的,而且网友都说不论怎么样,都会走向linux服务器,毕竟linux系统稳定可靠,性能强大。

进入应用详情里面:

按照上面的步骤按照把宝塔界面打开(打开宝塔面板那个地址,会有一个宝塔登录页面,密码是上面点击复制后,远程连接把复制的输入进去,enter后,会弹出宝塔密码,用admin登录后,可以宝塔修改登录名和密码),直接点击安装一些你的网站需要用到的程序,比如我用到了nginx,mysql。还有很多其他功能,自己就慢慢摸索吧。

它会自己安装,我们就去系统镜像配置环境。

二:centos flask系统环境配置

你可以直接点击你的阿里云管理和控制台里面的远程连接,连接上centos服务器进行配置,当然以后每次登录都要登录阿里云有点麻烦,可以把远程连接打开,,按照上面的配置教程,就能用软件就行访问,我就用了宝塔助手按照配置

就能直接连接远程服务器,当然window服务器也可以连接,如果用的服务器系统是Windows的,可以直接win+r 输入mstsc远程连接。

接下进入centos环境配置:

因为我在本地,用的是python3.6.5所以服务器最好一样。

2.1 安装python3.6.5

centos执行命令:  因为全是linux操作命令,需要明白这些命令是干嘛的,不知道的话,可以自己查linux常用命令,也可以直接复制粘贴执行(毕竟我们是要结果,能够有运行环境的)

 wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

2.2 安装zlib-devel包(后面安装pip需要用到,这里先下载,后面就不用重复编译)

 yum install zlib-devel

2.3解压:

  tar -xvf Python-3.6.5.tgz 

2.4:创建python3 目录

mkdir -p  /usr/local/python3

2.5  将解压文件移动到 usr/local目录下

    mv    Python-3.6.5     /usr/local

2.6 转到解压文件夹下

 cd /usr/local/Python-3.6.5

2.7  配置安装目录

  ./configure   --prefix=/usr/local/python3

2.8 编译源码及安装

make  &&  make install

2.9 配置软连接

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

2.10转到根目录

cd /

输入python3,看是否提示如下信息显示python3.6.5,表示安装成功(因为linux系统默认自带python2,输入python的话,会进入python2,后面安装都pip都要指定pip3 安装,或者在虚拟环境中用pip)

安装pip

    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

安装setuptools

  wget  --no-check-certificate  https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz

# 解压       

 tar -zxvf setuptools-19.6.tar.gz

   cd setuptools-19.6

 安装(分四步执行哦)

 python3 setup.py build
   python3 setup.py install
 yum install python36-setuptools

    easy_install-3.6 pip

三虚拟环境的安装配置:

3.1 安装虚拟环境第三方库

pip3 install virtualenv

3.2创建虚拟环境

安装后,创建一个虚拟环境: virtualenv +目录名

我这里创建到www下面的:创建了一个名叫flaskenv的虚拟环境,分两步执行,centos就自带www目录,就不需要创建了

cd /www

virtualenv flaskenv

我在演示一下,因为我的flaskenv已经有了,因为网站搭建好了,可运行的,所以创一个名叫env的虚拟环境如下:

3.3进入虚拟环境:.是当前目录 env是创建的虚拟环境目录,下面是有bin目录,执行activate,进入虚拟环境

 . env/bin/activate

进入后会发现,前面有创建的虚拟环境名字,以后只要进入虚拟环境操作,就只会在当前环境中有效,换句话就是与其他环境隔离开来,比如不同版本之间的程序就不会互相影响。

接下来测试当前虚拟环境版本:或者执行python

 python -V

只要你虚拟环境是python3.6就是配置成功了。‘
3.4 安装gunicorn(独角兽)因为待会你要用这个程序运行flask程序,让网站运行起来,必须装,或者用uwsgi

pip insnstall gunicorn

3.5:虚拟环境的退出

deactivate

总的来说第三大步解决了,就完成了一大半了,安装过程可能会出现其他莫名其妙的问题,大多数把错误原因拿去搜索,都能解决。

四:本地项目的部署(上传)到服务器

4.1请下载安装第三方软件,什么xhell,winscp,我这里用的是winscp,能够把文件上传到服务器。

 

 

4.2主机名是你的阿里云外网地址,用户名一般是root,密码是阿里云你的登录密码。登录后,左边是你的本地目录和文件,右边是服务器的目录和文件

4.3我的项目是在pycharm下开发的,所以目录结构如下,我把整个wish_wall文件复制到桌面,然后把这个文件拖到winscp右边www的目录下,也就是放在开始创建虚拟环境同一个目录www下,就会把整个文件以二进制上传上去跟Pychram同样的路径。flask的文件结构是所有css样式,视频,js,jquery,字体都必须放在static目录下,H5代码都放在templates下面。

4.4要让这个flask代码运行像你在pycharm上运行,你需要用在虚拟环境中安装第三方库,就是你在pychrm里面运行的这个wish_wall.py文件,我的就需要flask,flask——sqlalchemy,sqlalchemy...当然有一些是python内置的库,就不要安装,所以我级安装了三个库,然后又用开始开始安装的gunicorn运行这个py文件的实例,稍微会讲,记住配置一切都在虚拟环境中当然很多教程用的是

pip freeze requirements.txt # 输出本地包环境至文件
pip install -r requirements.txt#安装里面打包的库

上面的两个代码可以把当前项目环境所有有的库,都会记录在requirements.txt文件中,在用第二个命令,就能实现一键安装第三方库,但是我的安装失败了,反正我需要的安装的库比较少,就手动在虚拟环境pip install 安装咯, 当然安装包的数量多了,还是推荐上面的方式,不然几十个,安装也很难受。

4.5 接下来就是进入虚拟环境中启动gunicorn让你的网站运行起来,不过之前必须写个启动文件,很多教程是这样的,当然也可以进入你的目录下也可以,因为flask启动实例对象救赎qpp.run()不过还是跟随潮流和不用进入那么多目录。切记,执行之前需要把你本地运行项目的第三库在虚拟环境中安装完毕,就和本地一样的配置。

manage启动文件,在上面我给出的目录结构图里面,manage.py,下面给出源代码和解释:因为官网和别人博客写的理解起来有点那啥,因为很多博主都是直接把官网的样例复制粘贴下来,导致我还用了一些时间查找和理解。需要安装flask_script库

from flask_script import Manager
from wish_wall import  app#

manager=Manager(app)
@manager.command
def wish_wall():#
   return app#
if __name__ == '__main__':
    manager.run()

上面的from wish_wall import app 代表的是,我pycharm里面的启动文件是wish_wall.py。我所有的代码都写到里面在,import app是因为我们flask实例的时候都是app.run()来启动网站的,已经做好了,除开上面打#号的其他都是模版,套用就行。新建一个oy文件把上面代码复制,改变第二行的引入就行,其他都可以不变。

 

4.6 导入本mysql数据库库,因为网站数据都是存在myql里面在,需要把数据库给服务器上的数据库

在本地navicat上面选到flask用到的数据库,鼠标右键存储sql文件,把数据库和表的数据导出桌面,然后用winscp传到服务器。

 

因为,开始在宝塔已经在安装了mysql,在宝塔界面,点击数据库,可以直接改密码,,所以需要你去更改密码或者你在centos或者ubantu下命令改密码

然后在cents系统登录myql,为了防止新人找不到文件目录,就详细一点,切换到 www目录下,cd /www

mysql -u root -p 输入密码后,

常用source 命令
进入mysql数据库控制台,如
mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source wish_wall.sql

或者:

mysql -uroot -D数据库名 

用命令看是否mysq中国有没有我们导入的数据库,具体用法可以去百度。

4.7终于进入最后的关头,估计看博客的人都怕了或者没有耐心看下去了,我自己都写的都难受了,当初自己参考博客的时候同样难受。。。。最后用gunicorn启动manage的实例化,就能把我们的flask运行起来,再去配合Nginx就能访问网站了

进入虚拟环境:

cd /www

. flaskenv/binactivate

因为启动文件是在wish_wall目录下,还得进入wish_wall 

cd wish_wall

启动gunicorn:-b是绑定启动地址和端口  mange:app是 上面制作的manage启动文件,app是实例化的对象,也就是flask里面的app.run(),也可以直接找目录,进入目录,用文件名:app也可以。

gunicorn -b 127.0.0.1:5000 mange:app

为了展示效果,我去宝塔界面进程管理kill 掉gunicorn,重新启动,启动后就能24小时运行咯。

执行效果如图:表示启动成功。

五:宝塔下配置nginx文件,最终可以通过外网访问网站

其实最开始安装了好了后,就能通过ip访问你的服务器,是一个nginx的页面,接下来,就是在宝塔下面修改配置文件:

 

 

点击nginx,找到配置修改:

里面是nginx很多默认的配置,只需要修改很少的地方:就把server改成下面的就行

server
    {
        listen 80;
        server_name 106.14.181.17;#服务器的域名或者ip
     
        root  /www/wish_wall; #这里特变注意,你的项目放的位置,不然网站样式加载不上,我是放在www下的,wish_wall

        error_page   404   /404.html;
     

        location /
        {
          
          proxy_pass http://127.0.0.1:5000;#这里指定的端口和gunicorn的绑定的端口必须一致
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 


        }

 

然后保存,点击nginx配置修改的上面的Web服务,重新启动,就能访问网站了,也就是大工告成!终于布置完成了 ,可以通过外网ip访问你的网站。宝塔还有很多方便的功能,比如安全监控,定期备份,数据库,网站,改配置也很方便,不用进入系统里面用命令改,很麻烦,尤其是对linux不熟悉的人,还要用vim一个一个的敲,没准不熟悉linux vim,改起来很痛苦。

祝你能部署成功!

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/memory_qianxiao/article/details/85052240
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-13 13:46:47
  • 阅读 ( 1188 )
  • 分类:Linux

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢