在DigitalOcean的服务器上部署flaskblog应用


Posted in Python onDecember 19, 2015

在DigitalOcean上部署了flaskblog,项目虽小,部署中也学到了很多东西。
操作系统选择的是Ubuntu14.04,原因就是平时自己主要使用这个版本,顺手而已,所以你自己可以根据需要选择合适的linux版本。
部署方案:

Virtualenv+Gunicorn+Nginx+Supervisor

从这里下载项目的代码flaskblog, 工程中带有简单的配置文件参考。
可以先访问flaskblog看一下。
注意

本文中使用Ubuntu14.04 64位主机, 创建一个名为xin的用户,进行部署。
本文重点部署,所有linux的相关操作不做详细介绍。
部署目录是(/home/xin/www/flaskblog),所以请注意配置文件中的目录。
环境

系统:Ubuntu 14.04 64
Web Server: Nginx
虚拟环境: Virtualenv
WSGI Server: Gunicorn
数据库: MySQL
Monitor: Supervisor
使用supervisor主要是监控gunicorn的运行,保证服务器的可以持续运行。

安装

安装软件

$ sudo apt-get install python-pip 
$ sudo apt-get install python-dev    
$ sudo pip install virtualenv    
$ sudo apt-get install mysql-server  
$ sudo apt-get install libmysqlclient-dev 
$ sudo apt-get install nginx  
$ sudo apt-get install supervisor

 
下载工程并开启虚拟环境

使用git下载代码到(/home/xin/www/flaskblog)

$ git clone https://github.com/defshine/flaskblog.git 
$ cd flaskblog

 
启动虚拟环境,安装工程依赖

$ virtualenv venv  
$ source venv/bin/activate  
(venv)$ pip install -r requirements.txt

如何退出虚拟环境

(venv)$ deactivate

数据库

在MySQL数据库中创建数据库(flaskblog),修改 config.py中的数据库的配置
初始化数据库并创建管理员用户

(venv)$ python manage.py create_db 
(venv)$ python manage.py create_user -u admin -p 123456

开启监控

根据自己的情况,编辑工程下的supervisor配置文件(flaskblog.conf),然后复制到系统目录中

$ sudo cp flaskblog.conf /etc/supervisor/conf.d/

重新载入配置文件,并启动flaskblog

$ sudo supervisorctl reload 
$ sudo supervisorctl start flaskblog

查看运行状态

$ sudo supervisorctl status

Nginx

修改nginx的配置文件(flaskblog),然后复制到系统目录中去,并创建软链接。重启nignx。

$ sudo cp flaskblog /etc/nginx/site-available/ 
$ cd /etc/nginx/site-enabled 
$ sudo ln -s /etc/nginx/site-avalaible/flaskblog . 
$ sudo service nginx reload 
$ sudo service nginx restart

查看nginx状态

$ sudo service nginx status

然后,就可以通过ip地址访问了。当然,配置好域名,访问起来更好。
flaskblog这个小项目,刚刚有个小雏形,后续还可以开发一些小特性。

Python 相关文章推荐
python中使用OpenCV进行人脸检测的例子
Apr 18 Python
python内存管理分析
Apr 08 Python
python计算对角线有理函数插值的方法
May 07 Python
python2.7 mayavi 安装图文教程(推荐)
Jun 22 Python
selenium+python实现自动登录脚本
Apr 22 Python
Python实现的企业粉丝抽奖功能示例
Jul 26 Python
在pytorch中查看可训练参数的例子
Aug 18 Python
python3 mmh3安装及使用方法
Oct 09 Python
详解Django3中直接添加Websockets方式
Feb 12 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
Python tcp传输代码实例解析
Mar 18 Python
Python Selenium模块安装使用教程详解
Jul 09 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 #Python
使用Python编写简单的端口扫描器的实例分享
Dec 18 #Python
十个Python程序员易犯的错误
Dec 15 #Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 #Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 #Python
分享Python字符串关键点
Dec 13 #Python
Python实时获取cmd的输出
Dec 13 #Python
You might like
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
php中使用explode查找某个字符是否存在的方法
2011/07/12 PHP
php数组合并的二种方法
2014/03/21 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
JS获取整个页面文档的实现代码
2011/12/15 Javascript
js charAt的使用示例
2014/02/18 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python获取豆瓣电影简介代码分享
2014/01/16 Python
python基础知识小结之集合
2015/11/25 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
python 2.7.14安装图文教程
2018/04/08 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
python调用虹软2.0第三版的具体使用
2019/02/22 Python
python创造虚拟环境方法总结
2019/03/04 Python
Python类如何定义私有变量
2020/02/03 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
食品厂厂长岗位职责
2014/01/30 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
乡镇防汛工作汇报
2014/10/28 职场文书
承诺函范文
2015/01/21 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis