最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在阿里云服務(wù)器上配置CentOS+Nginx+Python+Flask環(huán)境

 更新時間:2016年06月18日 19:11:55   作者:cangmean  
這篇文章主要介紹了在阿里云服務(wù)器上配置CentOS+Nginx+Python+Flask環(huán)境的教程,值得一提的是這里的方案用Nginx作反向代理而使用Gunicorn作wsgi服務(wù)器,需要的朋友可以參考下

項目運行環(huán)境

阿里云(單核CPU, 1G內(nèi)存, Ubuntu 14.04 x64 帶寬1Mbps), 具體購買和ssh連接阿里云本文不做描述。

實用工具

首先進(jìn)入阿里云后先要升級下apt-get, 并下載所需軟件

sudo apt-get update
sudo apt-get install vim git wget tmux

我還會使用zsh和oh-my-zsh來替換bash

sudo apt-get install zsh

# 終端下打以下命令
wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

替換bash為zsh

chsh -s /bin/zsh

重新連接阿里云就可以看到效果, 具體主題可以根據(jù)自己喜好更改主目錄下的.zshrc即可

安裝python相關(guān)模塊

使用python的pip包管理工具

sudo apt-get install python-setuptools
sudo apt-get install python-pip
sudo pip install python-virtualenv

在主目錄下創(chuàng)建文件夾code并把所有項目放進(jìn)這個目錄里

mkdir code

# 使用virtualenv
vritualenv venv

# 開啟virtualenv
source /venv/bin/activate

# 關(guān)閉virtualenv
deactivate

# 在開啟virtualenv的狀態(tài)下使用pip會使用venv中的pip,也就是所有模塊都會安裝到venv中
# 如果想要安裝全局模塊就使用sudo pip 

# 安裝flask, 安裝到venv中
pip install flask

# 兩個是不同的, 安裝到系統(tǒng)中
sudo pip install flask

使用Flask

現(xiàn)在我們已經(jīng)安裝了Flask, 現(xiàn)在我們寫一個小的程序來運行一下。
這里我們在一次安裝flask的相關(guān)模塊,并把他們寫入到requirements.txt這個文件中。

# 安裝flask的相關(guān)模塊
pip install -r requirements

# 創(chuàng)建一個manage.py文件, 用作管理我們的應(yīng)用, 然后創(chuàng)建我們的一個應(yīng)用。
touch manage.py

## 創(chuàng)建一個叫bamboo的應(yīng)用
mkdir bamboo

## 創(chuàng)建一個應(yīng)用的文件, 接下來我們要編輯這個文件了。
touch bamboo/__init__.py bamboo/app.py


項目目錄結(jié)構(gòu)是這樣的

/root/code/
├── bamboo
│  ├── app.py
│  ├── config.py
│  ├── __init__.py
│  ├── static
│  ├── templates
│  └── views
├── gunicorn.conf
├── logs
│  ├── access.log
│  ├── error.log
│  ├── supervisord.log
│  ├── supervisor_err.log
│  └── supervisor_out.log
├── manage.py
├── requirements.txt
├── run.py
├── sweep.py
└── venv

編輯bamboo/app.py和bamboo/views/main.py

## app.py
from flask import Flask

def create_app():
  app = Flask(__name__)

  # do something

  register_blueprints(app)
  return app


# 用來注冊視圖的路由
def register_blueprints(app):
  from bamboo.views import main, error
  for i in (main, error):
    app.register_blueprint(i.bp)

## main.py
from flask import render_template, Blueprint

bp = Blueprint('main', __name__)


@bp.route('/')
@bp.route('/index')
def index():
  return '<h1>Hello, Bamboo!</h1>'

安裝Gunicorn

Gunicorn是一個wsgi服務(wù)器, 我們將通過它來啟動我們的web服務(wù)。

# 注意我們是通過pip來安裝,所以該模塊所有文件都是在venv里面
pip install gunicorn

可以進(jìn)入目錄vevn/bin下查看是否存在gunicorn命令

# 這里我們編輯下manage.py文件,具體文件路徑請查看上文中的目錄結(jié)構(gòu)
## manage.py

from bamboo.app import create_app
from flask.ext.script import Manager, Server, Shell

app = create_app()
manager = Manager(app)

def make_shell_context():
  # 用于shell使用
  pass

manager.add_command('shell', Shell(make_context=make_shell_context))
manager.add_command('runserver', Server(
  use_debugger=True,
  use_reloader=True,
  host='127.0.0.1',
  port=5000
))

if __name__ == '__main__':
  manager.run()

運行一下manage.py

# 不適用gunicorn運行
python manage.py runserver

# 使用gunicorn 運行
# 這里需要注意一下, 冒號前面的是文件名也就是manage.py而后面的是應(yīng)用的名稱。我在這里載過跟頭。因為服務(wù)器需要接受一個wsgi的應(yīng)用而manager = Manager(app)不是一個wsgi應(yīng)用所以報錯
gunicorn manage:app

我們創(chuàng)建一個gunicorn配置文件gunicorn.conf并把他放到code目錄下

## gunicorn.conf

workers=3
bind='127.0.0.1:5000'

安裝Nginx

我們通過nginx來反向代理我們的服務(wù)。

# 首先下載一個nginx
sudo apt-get install nginx

我們可以訪問我們的域名或IP地址,如果出現(xiàn)Nginx的提示就表示安裝成功了。
nginx安裝在/etc/nginx/目錄下, 我們把項目的配置文件放到/etc/nginx/sites-available/

server{
  listen 80;
  server_name xxx.xxx.xxx.xxx;

  # nginx log信息, 需要創(chuàng)建logs目錄
  access_log /root/code/logs/access.log
  error_log /root/code/logs/error.log

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header HOST $host;
    proxy_redirect off;
    if (!-f $request_filename){
      proxy_pass http://127.0.0.1:5000;
      break;
    }
  }
}

需要創(chuàng)建一個軟鏈接到/etc/nginx/sites-enabled/

# 這里bamoo只是文件名你也可以取自己的項目名稱
ln -s /etc/nginx/sites-available/bamboo /etc/nginx/sites-enabled/bamboo

# 然后檢查nginx有沒有錯誤
nginx -t 

# 重新啟動服務(wù)
service nginx restart
安裝Supervisor

supervisor用來監(jiān)控進(jìn)程,并在進(jìn)程掛掉的時候自動重啟它。

# 這里需要把它安裝到系統(tǒng)中
sudo pip install supervisor

# 生成配置文件
sudo echo_supervisord_conf > /etc/supervisord.conf

# 編輯/etc/supervisord.conf,并在最后一行加入一下字段
# 這樣配置文件會將/etc/supervisor/conf.d下所有.conf結(jié)尾的都會導(dǎo)入進(jìn)來
[include]
files = /etc/supervisor/conf.d/*.conf

# 在創(chuàng)建一個配置文件到/etc/supervisor/conf.d/bamboo.conf
[program:bamboo]
command=/root/code/venv/bin/gunicorn manage:app -c /root/code/gunicorn.conf
directory=/root/code/
user=root
autostart=true
autorestart=true
stdout_logfile=/root/code/logs/supervisor_out.log
stderr_logfile=/root/code/logs/supervisor_err.log

通過supervisorctl工具用來管理supervisor維護(hù)的進(jìn)程

# reread來檢測修改的配置內(nèi)容, update來更新
# 這樣就可以看到bamboo的process啟動了
supervisorctl reread
supervisorctl update 

# 也可以通過supervisorctl status 查看所有的項目進(jìn)程
bamboo              RUNNING  pid 12928, uptime 2:13:05

這樣我們的web服務(wù)已經(jīng)啟動起來了。

相關(guān)文章

  • Python Opencv圖像處理基本操作代碼詳解

    Python Opencv圖像處理基本操作代碼詳解

    這篇文章主要介紹了Python Opencv圖像處理基本操作代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Python ljust rjust center輸出

    Python ljust rjust center輸出

    Python中打印字符串時可以調(diào)用ljust(左對齊),rjust(右對齊),center(中間對齊)來輸出整齊美觀的字符串,使用起來非常簡單,包括使用第二個參數(shù)填充(默認(rèn)為空格)。
    2008-09-09
  • python中使用PIL制作并驗證圖片驗證碼

    python中使用PIL制作并驗證圖片驗證碼

    本篇文章給大家分享了python中使用PIL制作并驗證圖片驗證碼的具體代碼以及說明,需要的朋友參考下吧。
    2018-03-03
  • Python的argparse庫使用詳解

    Python的argparse庫使用詳解

    argparse是python標(biāo)準(zhǔn)庫里面用來處理命令行參數(shù)的庫,這篇文章主要介紹了Python的argparse庫使用詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 關(guān)于數(shù)據(jù)分析之滾動窗口pandas.DataFrame.rolling方法

    關(guān)于數(shù)據(jù)分析之滾動窗口pandas.DataFrame.rolling方法

    Pandas庫中的rolling方法是數(shù)據(jù)處理中常用的功能,它允許用戶對數(shù)據(jù)進(jìn)行滾動窗口(滑動窗口)操作,通過指定窗口大小,可以使用不同的聚合函數(shù)對窗口內(nèi)的數(shù)據(jù)進(jìn)行計算,例如最大值、最小值、平均值、中位數(shù)等,此外,rolling方法還可以計算方差、標(biāo)準(zhǔn)差、偏度、峰度
    2024-09-09
  • Python使用metaclass實現(xiàn)Singleton模式的方法

    Python使用metaclass實現(xiàn)Singleton模式的方法

    這篇文章主要介紹了Python使用metaclass實現(xiàn)Singleton模式的方法,實例分析了Python基于metaclass實現(xiàn)單例模式的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-05-05
  • 完美解決在oj中Python的循環(huán)輸入問題

    完美解決在oj中Python的循環(huán)輸入問題

    今天小編就為大家分享一篇完美解決在oj中Python的循環(huán)輸入問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • pytorch中nn.Conv1d的用法詳解

    pytorch中nn.Conv1d的用法詳解

    今天小編就為大家分享一篇pytorch中nn.Conv1d的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • django基礎(chǔ)之?dāng)?shù)據(jù)庫操作方法(詳解)

    django基礎(chǔ)之?dāng)?shù)據(jù)庫操作方法(詳解)

    下面小編就為大家?guī)硪黄猟jango基礎(chǔ)之?dāng)?shù)據(jù)庫操作方法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 解決django框架model中外鍵不落實到數(shù)據(jù)庫問題

    解決django框架model中外鍵不落實到數(shù)據(jù)庫問題

    這篇文章主要介紹了解決django框架model中外鍵不落實到數(shù)據(jù)庫問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05

最新評論

定南县| 泰来县| 阜新市| 万源市| 灵武市| 临朐县| 遂川县| 沈丘县| 黄陵县| 星座| 天祝| 太仆寺旗| 泗洪县| 兴安县| 瓮安县| 百色市| 四子王旗| 兴安盟| 盐亭县| 大英县| 崇义县| 合阳县| 西吉县| 柘城县| 南乐县| 郑州市| 辽阳县| 秭归县| 西充县| 阿合奇县| 房产| 崇州市| 扶沟县| 阳江市| 宝清县| 许昌市| 翁源县| 万全县| 滕州市| 禹州市| 绩溪县|