在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转义字符的5种方式
Dec 27 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
python实现多张图片拼接成大图
Jan 15 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
Python 复平面绘图实例
Nov 21 Python
pytorch实现onehot编码转为普通label标签
Jan 02 Python
python求一个字符串的所有排列的实现方法
Feb 04 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
PHP 图片上传实现代码 带详细注释
2010/04/29 PHP
PHP中Array相关函数简介
2016/07/03 PHP
javascript数组的扩展实现代码集合
2008/06/01 Javascript
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
2016/09/27 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
原生js实现购物车
2020/09/23 Javascript
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
python中有关时间日期格式转换问题
2019/12/25 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
母亲七十大寿答谢词
2014/01/18 职场文书
兰兰过桥教学反思
2014/02/08 职场文书
文科生自我鉴定
2014/02/15 职场文书
医院保洁服务方案
2014/06/11 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
给老师的感谢信
2015/01/20 职场文书
超市采购员岗位职责
2015/04/07 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers
Java 多态分析
2022/04/26 Java/Android