Centos7部署tornado项目
今天帮一个学生解决tornado的部署问题,在此记录了这其中的过程,其中的tornado项目更换为demo示例。
开发环境:
本地开发环境:Win10 + Python3.5.4 + PyCharm
线上环境:Centos7.3 + Python3.5.4
第一步:本地项目编写。Python3.x适用,并且已经安装并配置好了环境变量
1. 首先创建名为torn_test的虚拟环境
virtualenv --python=python.exe --no-site-packages torn_test # Windows环境使用
2. 启动虚拟环境,执行这个文件:虚拟环境文件夹下Scripts\activate
torn_test\Scripts\activate # 此时你的cmd里的路径前应该是这样的:(torn_test) F:\torn_test>
# 退出虚拟环境执行:torn_test\Scripts\deactivate.bat # 此时你的cmd里的路径前应该是这样的:F:\torn_test>
3. 项目依赖模块下载,cd到torn_test文件夹内
pip install virtualenv
pip install requirements
pip install tornado
# 此时如果你执行pip list就可以看到这几个包都被放在虚拟环境里了,跟外部的大的Python解释器无关,只要你在激活虚拟
# 环境的状态,所有的pip都将下载到虚拟环境里
Package Version
------------ -------
pip 10.0.1
requirements 0.1
setuptools 39.2.0
six 1.11.0
tornado 5.0.2
wheel 0.31.1 4. 在这里创建tornado项目,项目名为my_project,其实tornado项目就是一个文件夹
项目的整体目录结构为:
my_project # 项目文件夹
├─static # 静态文件夹,low项目,没js...
│ └─commons.css # css文件
├─templates # 项目模板文件夹
│ ├─index.html # 主页
│ └─login.html # login登录页
├─readme # 这个就是本文件啦
├─requirements.txt # 依赖包管理文件
└─tor.py # 项目主文件 # 项目代码在稍后的列出... 5. 用requirements记录所有依赖包及精确版本号
cmd执行cd命令,切换到my_project中,执行:
pip freeze > requirements.txt # 此命令就把你所有的依赖包保存到了这个txt文件内
# pip install -r requirements.txt # 此命令下载时依赖模块时执行
6. 上面没有问题,就可以粘贴代码了
第二步:拷贝demo的代码,感谢demo的提供者,oldboy的小猪沛齐,这是他讲tornado时的笔记.....
h1{
color: green;
}
commons.css
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css">
</head>
<body>
<h1>循环</h1>
<ul>
{% for item in user_list %}
<li>{{item}}</li>
{% end %}
</ul>
<h1>索引:{{user_list[0] }}</h1>
<h1>索引:{{user_dict['id'] }}</h1>
<h1>索引:{{user_dict.get('id') }}</h1> <script></script>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href='{{static_url("commons.css")}}' rel="stylesheet" />
</head>
<body>
<h1>用户登录</h1>
<form method="post">
{% raw xsrf_form_html() %}
<input type="text" name="user" />
<input type="text" name="pwd" />
<input type="submit" value="提交"> {{msg}}
</form>
<script></script>
</body>
</html>
login.html
import tornado.ioloop
import tornado.web class LoginHandler(tornado.web.RequestHandler):
def initialize(self):
pass
def get(self):
self.render('login.html',msg="") def post(self):
# # GET
# self.get_query_argument()
# self.get_query_arguments()
# # POST
# self.get_body_argument()
# self.get_body_arguments()
user = self.get_argument('user')
pwd = self.get_argument('pwd')
if user == 'wang' and pwd == '':
# self.redirect('http://www.oldboyedu.com')
# self.set_cookie('xxxxxx',user)
self.set_secure_cookie('xxxxxx',user)
self.redirect('/index')
return self.render('login.html',**{'msg':'用户名或密码错误'})
# self.render('login.html',msg = '用户名或密码错误') class AuthHandler(tornado.web.RequestHandler):
def initialize(self):
self.username = self.get_secure_cookie('xxxxxx') class IndexHandler(AuthHandler): def get(self): if not self.username:
self.redirect('/login')
return user_list = ['wang','li']
user_dict = {'id':1,'name':'zhang'}
self.render('index.html',user_list=user_list,user_dict=user_dict) settings = {
'template_path':'templates',
'static_path':'static',
'static_url_prefix':'/xxx/',
"xsrf_cookies": True,
"cookie_secret":'asdfasdfdfdfsdfsdfsdf'
}
application = tornado.web.Application([
(r"/login", LoginHandler),
(r"/index", IndexHandler),
],**settings) if __name__ == "__main__":
# 创建socket对象
application.listen(8888)
# conn,add = socket.accept()
tornado.ioloop.IOLoop.instance().start()
tor.py
#!/usr/bin/env python
# -*- coding:utf-8 -*- #程序启动的配置
START_CONFIG = {
"host": "xxx.xxx.xx.xx",
"port": "xxxx",
} #日志的路径
LOG_CONFIG = {
"file_path": "/xxx/xxx/xxx/xxxx/xxx.log",
} #rabbitmq的连接信息
RABBITMQ_CONFIG = {
"host": "xxx.xxx.xx.xx",
"port": 1111,
"vhost": "/",
"user": "xxxx",
"passwd": "xxxx",
"serverid": "xxxxx",
"SEND_EXCHANGE": "xxxxxxx",
"RECV_EXCHANGE": "xxxxxxx", } # 数据库配置
DB_CONFIN = {
"host": "xxx.xxx.xx.xx",
"port": 3306,
"db": "xxx",
"user": "xxxxx",
"passwd": "xxxxxxx",
}
本demo没有的config配置
第三步:本地测试
1. OK,代码粘贴完毕,就在本地测试一遍
运行tor.py
浏览器地址栏输入:
http://127.0.0.1:8888/login # 输入用户名和密码后能跳转就完事了
2. 上面几步没有问题的话,本地就算完事了
第四步:部署到Centos
首先你要有Python3.x的解释器并配好了环境变量。什么?连这一步都没做好?那就先去搞环境去吧
http://www.cnblogs.com/Neeo/p/7897010.html # 拿走不谢
当你看到这一行的时候,你前面的每一步都OK才行,以下步骤在xshell(已远程连接到centos)里执行...
1. 下载virtualenv
pip install virtualenv
pip install virtualenvwrapper # 这一步是另一种方式创建虚拟环境,在此这时候下载备用
2. 创建虚拟环境
virtualenv venv1 # 创建虚拟环境文件夹
# 嘿嘿,这一步你可能会提示:bash: virtualenv: 未找到命令... 或者bash: virtualenv: command not found...
那么说明你virtualenv的软连默认没有搞上...心塞!我怀疑(不可靠)是自定义安装Python解释器导致的
解决办法就是建软连呗:https://www.cnblogs.com/Neeo/p/7869027.html # 拿走不谢
3. 激活虚拟环境
source venv1/bin/activate # 成功则显示: (venv1) [root@bogon tmp]#
4. 此时你就可以把项目搞到服务器了
# 不知道怎么搞文件?用Xmanager的Xftp传。这也没有?出门左转把垃圾带走
比如此时把my_project项目搞到了venv1内,然后cd进my_project,执行:
pip install -r requirements.txt # 从这里把项目所有的依赖包一次都能下载完成,并且这些包仅在你的虚拟环境内
5. 此时,应该是项目依赖包已经下好后,其他的前面都没问题了,我们开始正经的运行tornado项目
python tor.py # tornado项目跑起来
6. 浏览器访问它
http://192.168.0.106:8888/login # 浏览器地址栏输入,当然你输入的不是这个ip地址,是你自己的....
7. 是不是出现了页面了!啦啦啦完事!
结果展示:


问题总结:
1. demo演示了tornado的基本用法,包括路由的配置,静态页面的配置等等
2. 项目太小了,部署到到centos上跟玩似的,并没有涉及到高深的配置问题,比如部署django项目时,要配置uwsgi和nginx等等
3. 部署难点,虚拟环境创建,这里百度上都总结的挺简单的,下载virtualenv,然后创建虚拟环境,感觉他们都没有碰到问题...
4. 如果是阿里云或者别的云服务器,则有云服务器的拦截规则,我们要去查看tornado的端口是否被拦截,如果被拦截,则如何去打开
5. 上面的问题同样存在于centos上,防火墙是否拦截
6. 并没有涉及到数据库的问题,等等
欢迎指正
Centos7部署tornado项目的更多相关文章
- centos7部署JavaWeb项目
centos7部署JavaWeb项目共有三步 1.配置java环境 2.配置tomcat环境. 3.部署JavaWeb项目 一.配置java环境 1.1安装java 参考我的另一篇博文:https:/ ...
- centos7 部署vue项目(前后端分离、nginx)
一.环境准备 1.centos7系统 2.mysql数据库 3.在centos7虚拟机上安装好nginx 二.部署内容准备 1.后端war包 或者可执行jar 因为我这里是spring boot项目. ...
- CentOS7部署Django项目
1. 云服务器 这里使用的是腾讯云选择系统:CentOS7.3 记住云服务器登录密码 2. 配置Python3环境 默认Python环境为python2.7,yum安装是需要python2的环境的 安 ...
- Centos7部署FytSoa项目至Docker——第一步:安装Docker
FytSoa项目地址:https://gitee.com/feiyit/FytSoaCms 部署完成地址:http://82.156.127.60:8000/ 先到腾讯云申请一年的云服务器,我买的是一 ...
- Centos7部署FytSoa项目至Docker——第三步:部署程序
FytSoa项目地址:https://gitee.com/feiyit/FytSoaCms 部署完成地址:http://82.156.127.60:8000/ 我买的是一年99标准型SA2云服务器 购 ...
- CentOS7 部署 Django 项目
1. 更新系统软件包 yum update -y 2. 安装软件管理包和可能使用的依赖 yum -y groupinstall "Development tools" yum in ...
- 阿里云 Centos7 部署 Django 项目
前期准备 阿里云服务器 mysql数据库 已经本地运行成功的项目 阿里云服务器的环境配置 Git #代码管理 Gitlab #代码托管,要求服务器内存不低于2G,我选择放弃 Mysql #连接数据库 ...
- 部署Flask项目到腾讯云服务器CentOS7
部署Flask项目到腾讯云服务器CentOS7 安装git yum install git 安装依赖包 支持SSL传输协议 解压功能 C语言解析XML文档的 安装gdbm数据库 实现自动补全功能 sq ...
- centos7+tomcat部署JavaWeb项目超详细步骤
我们平时访问的网站大多都是发布在云服务器上的,比如阿里云.腾讯云等.对于新手,尤其是没有接触过linux系统的人而言是比较有困难的,而且至今使用云服务器也是有成本的,很多时候我们可以通过虚拟机自己搭建 ...
随机推荐
- Java 基础 变量和运算符
Java基础语法 第1章 变量 1.1 变量概述 1.2 计算机存储单元 1.3 基本类型之4类8种 1.4 常量与类型 1.5 定义变量(创建变量) 1.6 变量使用的注意事项 1.7 数据类型 ...
- 【LeetCode每天一题】Pascal's Triangle(杨辉三角)
Given a non-negative integer numRows, generate the first numRows of Pascal's triangle. In Pascal's t ...
- git revert 撤销merge的动作
在执行完git merge提交以后,通常会merge过的分支的提交记录都带过来,比如A分支merge到了B分支,那么B分支上肯定有A分支的提交记录,如果此时要回退这个merge动作,是产生一条reve ...
- HTTP通信机制
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1. 建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接, ...
- SQL 2008安装过程(转)
这几天因为需要,一直想安装SQL Server 2008来作为Web后台的数据库进行些实验,但总是没有时间,今天终于有时间了,便安装了SQL Server 2008,以下是我的安装的步骤,希望对于有需 ...
- Lepus(天兔)监控MySQL部署
http://www.dbarun.com/docs/lepus/install/lnmp/ 注意:xampp mysqldb-python版本太高会导致lepus白屏 apache版本最好选择2.2 ...
- 关于windows中80端口被占用
很奇怪,windows7系统中的80端口被pid 为4 的system进程监听. 尝试关闭IIS功能,并在这期间进行过多次重启,均无效. 后来依照这篇文件解决的:https://www.jianshu ...
- c++将lambda作为callback函数
想用c++发送http_post请求,用到了libcurl. 想将其包装一下,因为默认http的响应结果是打印到stdout的,如果想将响应结果另外处理,需要自己定义一个callback函数. 考虑到 ...
- 记无法用被动方式登录远程linux主机的原因
[环境]: linux主机:华为企业云 ftp服务端:vsftpd 客户端:ftp命令行工具,安卓端ES文件浏览器 [现象]: 在ES文件浏览器中,使用被动方式没法连接,使用主动方式可以连接,但是没法 ...
- Unity shader学习之屏幕后期处理效果之Bloom效果
Bloom特效是游戏中常见的一种屏幕效果.这种特效可以模拟真实摄像机的一种图像效果,它让画面中较亮的区域“扩散”到周围的区域中,造成一种朦胧的效果. Bloom的实现原理很简单,首先根据一个阈值提取出 ...