Centos7部署tornado項目

今天幫一個學生解決tornado的部署問題,在此記錄了這其中的過程,其中的tornado項目更換爲demo示例。css

開發環境:html

  本地開發環境:Win10 + Python3.5.4 + PyCharmpython

  線上環境:Centos7.3 + Python3.5.4nginx


 第一步:本地項目編寫。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 == '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':'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. 並無涉及到數據庫的問題,等等

歡迎指正  web

相關文章
相關標籤/搜索