今天帮一个学生解决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项目的更多相关文章

  1. centos7部署JavaWeb项目

    centos7部署JavaWeb项目共有三步 1.配置java环境 2.配置tomcat环境. 3.部署JavaWeb项目 一.配置java环境 1.1安装java 参考我的另一篇博文:https:/ ...

  2. centos7 部署vue项目(前后端分离、nginx)

    一.环境准备 1.centos7系统 2.mysql数据库 3.在centos7虚拟机上安装好nginx 二.部署内容准备 1.后端war包 或者可执行jar 因为我这里是spring boot项目. ...

  3. CentOS7部署Django项目

    1. 云服务器 这里使用的是腾讯云选择系统:CentOS7.3 记住云服务器登录密码 2. 配置Python3环境 默认Python环境为python2.7,yum安装是需要python2的环境的 安 ...

  4. Centos7部署FytSoa项目至Docker——第一步:安装Docker

    FytSoa项目地址:https://gitee.com/feiyit/FytSoaCms 部署完成地址:http://82.156.127.60:8000/ 先到腾讯云申请一年的云服务器,我买的是一 ...

  5. Centos7部署FytSoa项目至Docker——第三步:部署程序

    FytSoa项目地址:https://gitee.com/feiyit/FytSoaCms 部署完成地址:http://82.156.127.60:8000/ 我买的是一年99标准型SA2云服务器 购 ...

  6. CentOS7 部署 Django 项目

    1. 更新系统软件包 yum update -y 2. 安装软件管理包和可能使用的依赖 yum -y groupinstall "Development tools" yum in ...

  7. 阿里云 Centos7 部署 Django 项目

    前期准备 阿里云服务器 mysql数据库 已经本地运行成功的项目 阿里云服务器的环境配置 Git #代码管理 Gitlab #代码托管,要求服务器内存不低于2G,我选择放弃 Mysql #连接数据库 ...

  8. 部署Flask项目到腾讯云服务器CentOS7

    部署Flask项目到腾讯云服务器CentOS7 安装git yum install git 安装依赖包 支持SSL传输协议 解压功能 C语言解析XML文档的 安装gdbm数据库 实现自动补全功能 sq ...

  9. centos7+tomcat部署JavaWeb项目超详细步骤

    我们平时访问的网站大多都是发布在云服务器上的,比如阿里云.腾讯云等.对于新手,尤其是没有接触过linux系统的人而言是比较有困难的,而且至今使用云服务器也是有成本的,很多时候我们可以通过虚拟机自己搭建 ...

随机推荐

  1. tf中计算图 执行流程学习【转载】

    转自:https://blog.csdn.net/dcrmg/article/details/79028003 https://blog.csdn.net/qian99/article/details ...

  2. CentOS6.5安装sqlite3

    1.下载安装包:https://www.sqlite.org/download.html 2.解压 [root@mycentos ~]# tar xzvf sqlite-snapshot-201809 ...

  3. mysql 延迟添加唯一索引

    MySQL [test]> create table tbl_keyword ( -> id int not null auto_increment primary key, -> ...

  4. Pycharm进行版本管理

    即然pycharm为python提供了这么强大的IDE,那么,我们代码管理,没理由不用版本管理工具Git,SVN等等 在pychram中使用GitHub进行代码管理;需要准备: 1)GitHub帐号: ...

  5. Hive自定义函数UDF和UDTF

    UDF(user defined functions) 用于处理单行数据,并生成单个数据行. PS: l 一个普通UDF必须继承自“org.apache.hadoop.hive.ql.exec.UDF ...

  6. unity之UI

    1.Vector3坐标 2.地球,月球,太阳的旋转关系 using System.Collections; using System.Collections.Generic; using UnityE ...

  7. pandas常用函数

    1. df.head(n): 显示数据前n行,不指定n,df.head则会显示所有的行 2. df.columns.values获取所有列索引的名称 3. df.column_name: 直接获取列c ...

  8. c# webapi 跳转

    c# webapi 跳转  public HttpResponseMessage Post() {     // ... do the job     // now redirect     Http ...

  9. Spring cglib 初始化 ExceptionInInitializerError,new Enhancer() 异常

    解决办法:更换 spring-cglib-repack-*.*.jar 包 java.lang.ExceptionInInitializerError at org.springframework.a ...

  10. pyspider操作千万级库,pyspider在对接量级较大库的策略

    pyspider操作千万级库,pyspider在对接量级较大库的策略 如果是需要pyspider正常的流程去执行,那必然是会在on_strat()时任务执行超时,可能只读取出几万条或十几万条数据就会被 ...