在阿里雲服務器上配置CentOS+Nginx+Python+Flask環境

 

在阿里雲服務器上配置CentOS+Nginx+Python+Flask環境

 

項目運行環境python

阿里雲(單核CPU, 1G內存, Ubuntu 14.04 x64 帶寬1Mbps), 具體購買和ssh鏈接阿里雲本文不作描述。nginx

實用工具git

首先進入阿里雲後先要升級下apt-get, 並下載所需軟件github

?
1
2
sudo apt-get update
sudo apt-get install vim git wget tmux

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

?
1
2
3
4
sudo apt-get install zsh
 
# 終端下打如下命令
wget --no-check-certificate https: //github .com /robbyrussell/oh-my-zsh/raw/master/tools/install .sh -O - | sh

替換bash爲zshshell

?
1
chsh -s /bin/zsh

從新鏈接阿里雲就能夠看到效果, 具體主題能夠根據本身喜愛更改主目錄下的.zshrc便可flask

安裝python相關模塊vim

使用python的pip包管理工具bash

?
1
2
3
sudo apt-get install python-setuptools
sudo apt-get install python-pip
sudo pip install python-virtualenv

在主目錄下建立文件夾code並把全部項目放進這個目錄裏服務器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mkdir code
 
# 使用virtualenv
vritualenv venv
 
# 開啓virtualenv
source /venv/bin/activate
 
# 關閉virtualenv
deactivate
 
# 在開啓virtualenv的狀態下使用pip會使用venv中的pip,也就是全部模塊都會安裝到venv中
# 若是想要安裝全局模塊就使用sudo pip
 
# 安裝flask, 安裝到venv中
pip install flask
 
# 兩個是不一樣的, 安裝到系統中
sudo pip install flask

使用Flask

如今咱們已經安裝了Flask, 如今咱們寫一個小的程序來運行一下。
這裏咱們在一次安裝flask的相關模塊,並把他們寫入到requirements.txt這個文件中。

?
1
2
3
4
5
6
7
8
9
10
11
# 安裝flask的相關模塊
pip install -r requirements
 
# 建立一個manage.py文件, 用做管理咱們的應用, 而後建立咱們的一個應用。
touch manage.py
 
## 建立一個叫bamboo的應用
mkdir bamboo
 
## 建立一個應用的文件, 接下來咱們要編輯這個文件了。
touch bamboo /__init__ .py bamboo /app .py


項目目錄結構是這樣的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
## 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服務器, 咱們將經過它來啓動咱們的web服務。

?
1
2
# 注意咱們是經過pip來安裝,因此該模塊全部文件都是在venv裏面
pip install gunicorn

能夠進入目錄vevn/bin下查看是否存在gunicorn命令

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 這裏咱們編輯下manage.py文件,具體文件路徑請查看上文中的目錄結構
## 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

?
1
2
3
4
5
6
# 不適用gunicorn運行
python manage.py runserver
 
# 使用gunicorn 運行
# 這裏須要注意一下, 冒號前面的是文件名也就是manage.py然後面的是應用的名稱。我在這裏載過跟頭。由於服務器須要接受一個wsgi的應用而manager = Manager(app)不是一個wsgi應用因此報錯
gunicorn manage:app

咱們建立一個gunicorn配置文件gunicorn.conf並把他放到code目錄下

?
1
2
3
4
## gunicorn.conf
 
workers=3
bind= '127.0.0.1:5000'

安裝Nginx

咱們經過nginx來反向代理咱們的服務。

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

咱們能夠訪問咱們的域名或IP地址,若是出現Nginx的提示就表示安裝成功了。
nginx安裝在/etc/nginx/目錄下, 咱們把項目的配置文件放到/etc/nginx/sites-available/

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server{
   listen 80;
   server_name xxx.xxx.xxx.xxx;
 
   # nginx log信息, 須要建立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;
     }
   }
}

須要建立一個軟連接到/etc/nginx/sites-enabled/

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 這裏bamoo只是文件名你也能夠取本身的項目名稱
ln -s /etc/nginx/sites-available/bamboo /etc/nginx/sites-enabled/bamboo
 
# 而後檢查nginx有沒有錯誤
nginx -t
 
# 從新啓動服務
service nginx restart
安裝Supervisor
 
supervisor用來監控進程,並在進程掛掉的時候自動重啓它。
 
# 這裏須要把它安裝到系統中
sudo pip install supervisor
 
# 生成配置文件
sudo echo_supervisord_conf > /etc/supervisord .conf
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 編輯/etc/supervisord.conf,並在最後一行加入一下字段
# 這樣配置文件會將/etc/supervisor/conf.d下全部.conf結尾的都會導入進來
[include]
files = /etc/supervisor/conf.d/*.conf
 
# 在建立一個配置文件到/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維護的進程

?
1
2
3
4
5
6
7
# reread來檢測修改的配置內容, update來更新
# 這樣就能夠看到bamboo的process啓動了
supervisorctl reread
supervisorctl update
 
# 也能夠經過supervisorctl status 查看全部的項目進程
bamboo              RUNNING  pid 12928, uptime 2:13:05
相關文章
相關標籤/搜索