您的位置:首页 > 编程语言 > Python开发

如何部署Python Web应用:记录一次Heroku部署完整过程

2016-03-13 11:45 916 查看
0.选择Heroku云平台
    
    伴随着云计算的浪潮,国内的云服务可谓多种多样,价格虽然不高,但是真正能够提供永久免费使用的,哪怕有些限制也好,似乎也找不到。
    出于学习/研究/实验/测试或是真正应用等各种需求,这时我们不妨使用把应用部署到国外的Heroku云平台上,Heroku的免费版除了其提供的Postgres数据库有限制之外(小于1万条记录的小型数据库不用付费就可以添加到自己的Web应用上),其它都可以免费使用,这绝对是不二的选择。

    另外一点来说,Heroku对Python的支持非常良好,所以部署起来会轻松很多,这就省去了许多不必要的麻烦了。

    最近要把应用部署到Heroku上,这里把完整的部署过程分享给大家。


说明:我使用的操作系统是Ubuntu 15.10,部署的Python Web应用为基于Flask的应用,下面的部署过程都是在该操作环境下进行部署,建议大家也在Linux环境下进行部署,会方便很多。(当然你有Mac Book就更好了,只是博主没钱,用不起啦)

1.准备Git环境
   
     要想使用Heroku,你的Web应用必须要托管在Git仓库中,如果你之前一直是使用Git的方式来作开发的,那问题就很容易解决了,相信你很明白其中的道理。如果不是的话,请按照下面我的方法来生成一个Git仓库,非常简单。
    很多人觉得使用Git很麻烦,于是就放弃了Heroku平台的使用,这不能不说是一种极大的浪费:
1.首先浪费的是Heroku这么好的一个平台资源;
2.然后就是放弃了Git这么优秀的版本控制系统的使用
3.再者说就是放弃了Linux环境的使用。
    其实这些对于开发来说都是非常有帮助的!所以不要觉得麻烦,只要你以后不是完全做Windows平台的开发,这些你都应该要懂,只要慢慢习惯了,后面一切就都很自然了。

第一步:安装Git
    以Ubuntu为例,可以直接使用下面的命令安装:

[code=bash;toolbar:false">sudo apt-get install git    当然如果你正在使用的是其它版本的Linux发行版本,相信安装方法也不难。

xpleaf@leaf:~/Heroku_pro$ pwd
/home/xpleaf/Heroku_pro
xpleaf@leaf:~/Heroku_pro$ ls
app  config.py  LICENSE  manage.py  migrations  README.md  requirements.txt  tests Procfile    这一步完成!

xpleaf@leaf:~/Heroku_pro$ ls -a
.   app        .git     manage.py   README.md     tests
..  config.py  LICENSE  migrations  requirements    这一步完成。

wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh    可以参考这里的官方文档:https://toolbelt.heroku.com/

[b]xpleaf@leaf:~/Heroku_pro$ heroku create my-heroku-app-cn
Creating my-heroku-app-cn... done, stack is cedar-14 https://my-heroku-app-cn.herokuapp.com/ | https://git.heroku.com/my-heroku-app-cn.git    出现上面的提示,就说明程序创建成功了!Heroku还分配了一个Git服务器给我们,地址为https://git.heroku.com/my-heroku-app-cn.git
    当然,其实app程序的名字也是可以改的,你只要登陆官居网,在你的个人信息页里就可以修改。

MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')    显然电子邮件的用户名和密码这些敏感的信息不应该出现在源代码中,所以我是通过获取环境变量的值来知道用户名和密码的,因此我需要在Heroku上设置相对应的环境变量,命令如下:
xpleaf@leaf:~/Heroku_pro$ heroku config:set MAIL_USERNAME="xpleaf"
Setting config vars and restarting my-heroku-app-cn... done
MAIL_USERNAME: xpleaf
xpleaf@leaf:~/Heroku_pro$ heroku config:set MAIL_PASSWORD="***"
Setting config vars and restarting my-heroku-app-cn... done
MAIL_PASSWORD: ***    当然如果你需要设置其它的环境变量,通过这个方式设置就可以了。

[b]Flask==0.10.1
Flask-Bootstrap==3.0.3.1
Flask-HTTPAuth==2.7.0
Flask-Login==0.3.1
...
SQLAlchemy==0.9.9
WTForms==1.0.5
Werkzeug==0.10.4
alembic==0.6.2
bleach==1.4.0    里面包含了支撑我的Web应用程序运行的各种扩展包。当然至于内容是什么,取决于你正在开发的Web项目。

    而Profile文件的内容则类似于这样:
web: gunicorn manage:app    正如前面所说,里面放的是命令,比如这里的这个命令就是用来启动我前面所说的Gunicorn生产环境Web服务器的。

    再次说明,这两个文件非常重要,如果没有的话,待会部署就会失败的。

xpleaf@leaf:~/Heroku_pro$ git push heroku master
对象计数中: 97, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (90/90), 完成.
写入对象中: 100% (97/97), 35.04 KiB | 0 bytes/s, 完成.
Total 97 (delta 22), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Python app detected
remote: -----> Installing runtime (python-2.7.11)
remote: -----> Installing dependencies with pip
remote:        Collecting Flask==0.10.1 (from -r requirements/common.txt (line 1))
..........
remote: -----> Preparing static assets
remote:        Collectstatic configuration error. To debug, run:
remote:        $ heroku run python manage.py collectstatic --noinput
remote: 
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote: 
remote: -----> Compressing...
remote:        Done: 37.2M
remote: -----> Launching...
remote:        Released v6
remote:        https://my-heroku-app-cn.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy.... done.
To https://git.heroku.com/my-heroku-app-cn.git
 * [new branch]      master -> master    会看到中间有一大堆的输出信息,这是Heroku为我们的环境安装所需的软件包,而这些软件包即是前面我们在需求文件中指定的。当然这些操作都是在Heroku中执行的,我们本地只是看到它的一个操作过程而已。

    部署完成后,根据我的Flask应用所选择的Web服务器的启动方式,使用下面的命令来进行启动:
#启动Web服务器进行相关初始化配置
xpleaf@leaf:~/Heroku_pro$ heroku run python manage.py deploy    
Running python manage.py deploy on my-heroku-app-cn... up, run.7690
INFO  [alembic.migration] Context impl SQLiteImpl.
......
INFO  [alembic.migration] Running upgrade 288cd3dc5a8 -> 2356a38169ea, followers
INFO  [alembic.migration] Running upgrade 2356a38169ea -> 51f5ccfba190, comments

#重新启动
xpleaf@leaf:~/Heroku_pro$ heroku restart
Restarting dynos... done

    上面的完成后,就可以访问我们创建的Web应用了:
     https://my-heroku-app-cn.herokuapp.com/
    当然,当你访问它的时候可能我已经把它关掉了,你可以访问另一个用同样方法部署的应用的地址:

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: