項目運行環境
阿里云(單核CPU, 1G內存, Ubuntu 14.04 x64 帶寬1Mbps), 具體購買和ssh連接阿里云本文不做描述。
實用工具
首先進入阿里云后先要升級下apt-get, 并下載所需軟件
sudo apt-get updatesudo 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
重新連接阿里云就可以看到效果, 具體主題可以根據自己喜好更改主目錄下的.zshrc即可
安裝python相關模塊
使用python的pip包管理工具
sudo apt-get install python-setuptoolssudo apt-get install python-pipsudo pip install python-virtualenv
在主目錄下創建文件夾code并把所有項目放進這個目錄里
mkdir code# 使用virtualenvvritualenv venv# 開啟virtualenvsource /venv/bin/activate# 關閉virtualenvdeactivate# 在開啟virtualenv的狀態下使用pip會使用venv中的pip,也就是所有模塊都會安裝到venv中# 如果想要安裝全局模塊就使用sudo pip # 安裝flask, 安裝到venv中pip install flask# 兩個是不同的, 安裝到系統中sudo pip install flask
使用Flask
現在我們已經安裝了Flask, 現在我們寫一個小的程序來運行一下。
這里我們在一次安裝flask的相關模塊,并把他們寫入到requirements.txt這個文件中。
# 安裝flask的相關模塊pip install -r requirements# 創建一個manage.py文件, 用作管理我們的應用, 然后創建我們的一個應用。touch manage.py## 創建一個叫bamboo的應用mkdir bamboo## 創建一個應用的文件, 接下來我們要編輯這個文件了。touch bamboo/__init__.py bamboo/app.py
項目目錄結構是這樣的
/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.pyfrom flask import Flaskdef 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.pyfrom flask import render_template, Blueprintbp = Blueprint('main', __name__)@bp.route('/')@bp.route('/index')def index(): return '<h1>Hello, Bamboo!</h1>'安裝Gunicorn
Gunicorn是一個wsgi服務器, 我們將通過它來啟動我們的web服務。
# 注意我們是通過pip來安裝,所以該模塊所有文件都是在venv里面pip install gunicorn
可以進入目錄vevn/bin下查看是否存在gunicorn命令
# 這里我們編輯下manage.py文件,具體文件路徑請查看上文中的目錄結構## manage.pyfrom bamboo.app import create_appfrom flask.ext.script import Manager, Server, Shellapp = create_app()manager = Manager(app)def make_shell_context(): # 用于shell使用 passmanager.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而后面的是應用的名稱。我在這里載過跟頭。因為服務器需要接受一個wsgi的應用而manager = Manager(app)不是一個wsgi應用所以報錯gunicorn manage:app
我們創建一個gunicorn配置文件gunicorn.conf并把他放到code目錄下
## gunicorn.confworkers=3bind='127.0.0.1:5000'
安裝Nginx
我們通過nginx來反向代理我們的服務。
# 首先下載一個nginxsudo apt-get install nginx
我們可以訪問我們的域名或IP地址,如果出現Nginx的提示就表示安裝成功了。
nginx安裝在/etc/nginx/目錄下, 我們把項目的配置文件放到/etc/nginx/sites-available/
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/
# 這里bamoo只是文件名你也可以取自己的項目名稱ln -s /etc/nginx/sites-available/bamboo /etc/nginx/sites-enabled/bamboo# 然后檢查nginx有沒有錯誤nginx -t # 重新啟動服務service nginx restart安裝Supervisorsupervisor用來監控進程,并在進程掛掉的時候自動重啟它。# 這里需要把它安裝到系統中sudo pip install supervisor# 生成配置文件sudo echo_supervisord_conf > /etc/supervisord.conf
# 編輯/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.confdirectory=/root/code/user=rootautostart=trueautorestart=truestdout_logfile=/root/code/logs/supervisor_out.logstderr_logfile=/root/code/logs/supervisor_err.log
通過supervisorctl工具用來管理supervisor維護的進程
# reread來檢測修改的配置內容, update來更新# 這樣就可以看到bamboo的process啟動了supervisorctl rereadsupervisorctl update # 也可以通過supervisorctl status 查看所有的項目進程bamboo RUNNING pid 12928, uptime 2:13:05
這樣我們的web服務已經啟動起來了。
新聞熱點
疑難解答
圖片精選