如何将Flask项目部署在Ubuntu系统的阿里云主机中(详细完整版:上)

如何将Flask项目部署在Ubuntu系统的阿里云主机中(详细完整版:上)


问题的重述

忙了一个月,总算到了这个时刻,终于可以部署一个真正属于自己的web项目了。如果你在看这篇文章,那么请相信我们都是一路人,有很多坑我们都会踩到,也会上网去找解决方案。这篇文章主要是理清了部署web项目的一些思路,解决项目部署前的环境搭建的问题,同时,也排出了一些大家可能遇到的坑。如果你和我一样是新手,本文章将是我们所面临问题的完整的解答!字有点多,是为了面面俱到,所以请耐心阅读,仔细思考……
如果你想在一台网络服务器上配置多个web server,改文章一样适用,第二篇最后关于Nginx的配置会详解;


解决的思路与方案

如果你已经拥有了自己的云服务器,并且现在正打算将自己电脑上的flask项目移植到云服务器上去,那么我下面的思路将会对你有一定的帮助:

总体设计方案

  • 本地项目与文件的整理
  • 整理好的本地的文件打包上传服务器
  • 项目的解包与放到相应目录
  • 项目的生产环境搭建(明白项目开发环境与生产环境的概念非常重要,下面会有说明)
  • 对uwsgi的配置
  • 对Nginx的配置
  • 运行项目,浏览器访问无阻,表明大功告成

第一步,项目上传服务器前的准备

  • python项目开发的必备利器——virtualenv(虚拟环境)
    如果你知道virtualenv并且你的项目是在virtualenv里开发的,那你可以跳过下面的几步;如果不是,那么你就非常有必要了解一下这个好用的东西了。
    我们在开发不同的项目时,其所需的环境都是不同的,每个项目都需要装很多第三方包,而且有些需要在python2.x的环境,有些需要python3.x的环境;如果开发的项目多了,那么我们系统的python环境岂不被污染的不成样子了,此时virtualenv便能帮我们保持系统的python环境的纯净,而且还特别方便我们的项目的移植与部署呢!这么好用的东西,我们有什么理由不会懂呢!(其实用起来也很简单啦),这里不用我多讲,有人讲得比我的好多了,给大家分享一篇写得极好的文章,一看便了:切记:知道如何使用后立马回来看下面
    http://www.tendcode.com/article/virtualenv-for-python/

  • 把项目移植到自己搭建的虚拟的python环境中
    这一步也很简单,可以用自己开发的IDE打开项目,在切换项目的运行幻境,这一步不懂得可自行百度下怎么切换,如果你的IDE是pycharm,可以参考这篇文章:
    https://www.cnblogs.com/IDRI/p/6354237.html
    切记:要保证装包前要进入指定的虚拟环境,不然上面的努力就功亏一篑了!
    选好执行环境后,再根据IDE的提示在选择的虚拟环境下pip install 好所有的依赖包,知道自己的项目能够在虚拟环境中完美执行为止,说明所有依赖包已经安装完善。
    最后,将所有已经安装好依赖包导出到txt文件,以便部署时使用,使用一下命令一键导出到项目的目录中(例如我的项目在D:\Python\project\team_plus):

    (venv) $ pip freeze > D:\Python\project\my_flask\requirements.txt

    完成了上面,恭喜你又GET了很实用的新技能了!!!

  • 写好项目的脚本启动文件

    我们的项目是要在Linux系统的运行的,可不能像在IDE中那样点击运行,所以我们必须要用脚本去启动执行,虽然如此我们也不必担心太多,这一点flask_script包已经替我们思考到了,下载flask_script后,我们只需写一个manage.py模块从flask_script包中引入Manager模块,再传入app对象去实例化一个manage就搞定了,这样我们就自带了运行脚本runserver了,当然我们还可以定义更多的脚本命令,关于flask_script的更多可访问【http://flask-script.readthedocs.io/en/latest/
    为了实现这个功能,我们可以简单的这样定义,我们manage.py文件如下:

    from flask_script import Manager
    from app import app
    
    manager = Manager(app) # 注册一个manager实例,自带了runserver命令
    
    @manager.command
    def hello():
        """这只是一个测试命令"""
        print("OK")
        return "Hello World!"
    
    
    # 下面是IDE上运行入口,可不管
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=8001, threaded=True)
  • 调整项目中的绝对地址为相对地址
    如果你的开发中有用到了绝对地址,请改用相对地址,云主机中的文件目录结构可不是与你的本地一样,不该后果有多严重不能用我多说吧,这里分享一个使用os模块的技巧:
    在config.py文件中添加全局变量BASEPATH

    import os
    BASEPATH = os.getcwd().replace('\\', r'\\')    # 获取config.py所在目录的路径

    其它相应的用BASEPATH替换掉,我想你应该懂我的意思的。

  • 如果项目中已包含静态文件如:JS(请求接口的Ajax),记得替换掉接口
    把接口地址改为如下格式:

  • 如果需要数据库移植的可参考
    我用的是MySQL数据库,下面的MySQL数据的数据库导出方法:
    注意:如果数据库中有存了绝对路径的请改为想对路径的格式!

    
    # 导出整个数据库
    
    mysqldump -u 用户名 -p 数据库名 > 项目路径/导出的文件名
    mysqldump -u dbuser -p dbname >  项目路径/dbname.sql
  • 调整项目目录结构
    可见,一个在本地的项目的标准的目录结构应该如下所示:

    └── my_flask
    │ ├── logs
    │ └── app //Flask 程序目录
    │ │ └── __init__.py //这是程序包文件。这个目录下还有其它的文件此处略过
    │ ├── manage.py
    │ ├── requirements.txt
    │ ├── dbname.sql
  • 项目打包为Linux常用的压缩包格式(.tar.bz2)文件
    tar.gz 是linux和unix下面比较常用的格式,几个命令就可以把文件压缩打包成tar.gz格式,然而这种格式在windows并不多见,WinRAR、WinZip等主流压缩工具可以释放解开,却不能打包生成。但是tar.gz在服务器端却很常用,因为服务器系统linux占了相当的一部分。于是许多习惯用Windows的Web开发人员,在上传网站到空间时可能会遇到这个压缩格式的麻烦。如何生成得到tar.gz压缩包,“7-ZIP”这个软件可以很方便地解决这个问题。

    • 下载安装“7-ZIP”
      https://www.7-zip.org/
      这里写图片描述
    • 具体使用步骤如下:
        一、安装7-ZIP以后,直接在你想要打包的文件上点右键菜单,会有一个7-ZIP的子菜单栏,类似WinRAR和WinZIP的那种右键菜单。然后选“7-ZIP”->“添加到压缩档案”,在弹出来的窗口里有个“压缩格式”的选项,里面并没有tar.gz格式,没关系,里面有一个Tar格式,第一步就是要先压成tar格式。
        二、成功打包为Tar文件后,可能会发现这个tar文件包和原来的文件大小一样,也就是说tar本身并没有压缩,而是仅仅把它们打包成一个单独的Tar文件。所以需要做第二步,再在这个tar文件上面点右键,选“7-ZIP”->“添加到压缩档案”,这时候弹出的窗口里再看“压缩格式选项”,发现多了两个刚才没有的,其中就包括“GZip”,是的,这一步就是把tar文件继续压缩成GZip。选择“GZip”格式后确定,最后结果就是一个新的tar.gz格式的文件。
  • 压缩包的上传
    到了这里,我们的问题是如何将压缩包上传到云主机呢?如果不喜欢复杂的命令,那么一款好用的文件传输软件将是我们的不二选择——WinSCP。
    简单介绍下此软件:
    WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件,.winscp也可以链接其他系统,比如linux系统
    下载地址【https://winscp.net/eng/download.php
    一路默认安装即可,安装完毕后如下界面:
    这里写图片描述
    如图输入相应内容即可登录连接,登录彻成功后,左边是本地主机,右边是云主机,选择刚刚的压缩包右击选择“传输”,再选择传到主机root下即可
    这里写图片描述

至此,我们的flask项目的上传准备就全部搞定了,前期准备是相当重要的,如果前期都没做好,还谈何部署的问题呢!在下一篇文章我们的重心将会移到云主机上,我们主要进行云主机中虚拟环境的搭建、uwsgi的下载与配置、Nginx的下载与配置,一步一步让我们的flask项目在服务器上跑起来!
下一篇文章地址【https://blog.csdn.net/weixin_39212776/article/details/81321055】欢迎来读

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
1. 登录阿里云控制台,进入ECS实例页面,选择需要部署Flask项目的实例。 2. 在实例页面,点击左侧导航栏的“安全组”。在安全组页面,点击“添加安全组规则”按钮,添加一个新的安全组规则,将协议设置为“TCP”、端口设置为“5000”(Flask默认端口),并选择允许所有来源IP访问。 3. 在实例页面,点击左侧导航栏的“SSH密钥对”。如果你还没有创建SSH密钥对,点击“创建SSH密钥对”按钮创建一个。 4. 在Windows系统,使用PuTTYgen生成私钥和公钥。将私钥下载到本地,将公钥复制到ECS实例的“SSH密钥对”页面。 5. 在Windows系统,使用PuTTY连接到ECS实例。输入实例的公网IP地址、端口号(默认为22)、用户名(默认为root),并选择刚才下载的私钥文件。 6. 在PuTTY连接成功后,输入以下命令更新系统软件包: sudo apt-get update sudo apt-get upgrade 7. 安装Python和pip: sudo apt-get install python3-pip 8. 安装Flask和其他需要的Python库: sudo pip3 install flask 9. 编写Flask项目代码,并将代码上传到ECS实例。可以使用SFTP客户端(如FileZilla)将代码上传到ECS实例。 10. 在ECS实例,进入Flask代码所在的目录,运行以下命令启动Flask应用: export FLASK_APP=app.py flask run --host=0.0.0.0 11. 在浏览器输入实例的公网IP地址和Flask应用的端口号(默认为5000),访问Flask应用
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值