在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转换HTML到Text纯文本的方法
Jan 15 Python
10个易被忽视但应掌握的Python基本用法
Apr 01 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
Aug 08 Python
Python2随机数列生成器简单实例
Sep 04 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
Django csrf 两种方法设置form的实例
Feb 03 Python
python pandas生成时间列表
Jun 29 Python
对pytorch中的梯度更新方法详解
Aug 20 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
pycharm 实现本地写代码,服务器运行的操作
Jun 08 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
python使用pygame创建精灵Sprite
Apr 06 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下关于中英数字混排的字符串分割问题
2010/04/06 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
php桥接模式应用案例分析
2019/10/23 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
微信小程序实现弹出菜单
2018/07/19 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
python字符串连接的N种方式总结
2014/09/17 Python
Python设置默认编码为utf8的方法
2016/07/01 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
采购部主管岗位职责
2014/01/01 职场文书
财务工作者先进事迹材料
2014/01/17 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
文明倡议书范文
2014/04/15 职场文书
计算机求职信
2014/07/02 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
主婚人致辞精选
2015/07/28 职场文书
Ajax异步刷新功能及简单案例
2021/11/20 Javascript