在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中的startswith和endswith函数使用实例
Aug 25 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
Python进阶_关于命名空间与作用域(详解)
May 29 Python
利用Python2下载单张图片与爬取网页图片实例代码
Dec 25 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
python用插值法绘制平滑曲线
Feb 19 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
Pytorch 中retain_graph的用法详解
Jan 07 Python
python清空命令行方式
Jan 13 Python
Python中的全局变量如何理解
Jun 04 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 和 COM
2006/10/09 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
python查看zip包中文件及大小的方法
2015/07/09 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
python元组的概念知识点
2019/11/19 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
vscode调试django项目的方法
2020/08/06 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
自荐信包含哪些内容
2013/10/30 职场文书
生物科学专业个人求职信范文
2013/12/07 职场文书
党员领导干部承诺书
2014/05/28 职场文书
财务工作个人总结
2015/02/27 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
任命书格式范文
2015/09/22 职场文书
python实现简单的聊天小程序
2021/07/07 Python