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;
}
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 == 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()
tor.py
技术分享图片
#!/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",
}
本demo没有配置文件conf.py

  第三步:部署到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)

Nginx + tornado + supervisor部署

阿里云 Centos7 部署 Django 项目

项目 11 部署与运行

第八章:部署Tornado

Python Tornado初学笔记之表单与模板