Centos7部署tornado项目
Posted neeo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos7部署tornado项目相关的知识,希望对你有一定的参考价值。
今天帮一个学生解决tornado的部署问题,在此记录了这其中的过程,其中的tornado项目为随手写的示例。
开发环境:
本地开发环境: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. 启动虚拟环境,执行这个文件:虚拟环境文件夹下Scriptsactivate torn_testScriptsactivate # 此时你的cmd里的路径前应该是这样的:(torn_test) F: orn_test> # 退出虚拟环境执行:torn_testScriptsdeactivate.bat # 此时你的cmd里的路径前应该是这样的:F: orn_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. 如果你项目的代码都补充到位。那么把项目搞到centos里了
第二步:拷贝demo的代码,感谢demo的提供者,oldboy的小猪沛齐,这是他讲tornado时的笔记.....
h1{
color: green;
}
<!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>
<!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>
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 == ‘666‘: # 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‘:‘staticccccc‘, ‘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()
#!/usr/bin/env python # -*- coding:utf-8 -*- from multiprocessing import cpu_count #程序启动的配置 interfaceConfig = { "host": "xxx.xxx.xx.xx", "port": "xxxx", } #日志的路径 logConfig = { "filePath": "/opt/pbx/log/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", } # 数据库配置 cdrDbConfig = { "host": "xxx.xxx.xx.xx", "port": 3306, "db": "xxx", "user": "xxxxx", "passwd": "xxxxxxx", }
第三步:部署到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) [[email protected] 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项目的主要内容,如果未能解决你的问题,请参考以下文章
18.tornado项目的部署和运行(采用Linux常见应用服务配置模式nginx+supervisord)