用flask開發了服務端的api,記錄部署上服務器的過程,以供後續使用。python
自己服務器已經安裝了python3,而且版本爲3.5,這裏不從新安裝,若是服務器中沒有安裝python3,則進行安裝git
$ sudo apt-get install python3.5
咱們須要用pip來使用第3方模塊,先安裝pipflask
# 下載安裝腳本 $ curl -O https://bootstrap.pypa.io/get-pip.py # 安裝 sudo python3 get-pip.py
安裝成功後,查看安裝版本,肯定與你目前的python3版本一致bootstrap
$ pip3 -V //顯示的版本信息 pip 9.0.1 from /usr/local/lib/python3.5/dist-packages (python 3.5)
每一個項目可能須要用到的環境不同,爲了不影響整個服務器的環境,咱們給每一個項目一個獨立的運行環境,須要用到virtualenvubuntu
$ sudo pip3 install virtualenv //若是安裝成功,會顯示 Successfully installed virtualenv-15.1.0
$ cd /var/www/your_project_name # 建立虛擬環境,其中py35env爲你自定義的環境名稱 $ virtualenv -p python3 py35env # 建立成功會有以下說明 Already using interpreter /usr/bin/python3 Using base prefix '/usr' New python executable in /var/www/your_project_name/py35env/bin/python3 Also creating executable in /var/www/your_project_name/py35env/bin/python Installing setuptools, pip, wheel...done. # 激活虛擬環境 $ source py35env/bin/activate # 這時命令行路徑前面會出現你的虛擬環境名,例如: (py35env) ubuntu@ip-10-0-0-119:/var/www/your_project_name$ # 查看你目前的插件,有些可能以前系統python環境已經安裝了,你能夠不用重複安裝 $ sudo pip3 list
$ pip3 install Flask # 安裝成功會提示以下: Successfully installed Flask-0.12.2 Werkzeug-0.12.2 click-6.7 itsdangerous-0.24 # 也能夠用sudo pip3 list來查看
$ pip3 install Flask-RESTful # 安裝成功會提示以下: Successfully installed Flask-RESTful-0.3.6 aniso8601-1.3.0 python-dateutil-2.6.1 pytz-2017.2 # 也能夠用sudo pip3 list來查看
$ pip3 install pyMySQL # 安裝成功會提示以下: Successfully installed pyMySQL-0.7.11 # 也能夠用sudo pip3 list來查看
$ pip3 install gunicorn # 安裝成功會提示以下: Successfully installed gunicorn-19.7.1 # 也能夠用sudo pip3 list來查看 # 建立gunicorn存放日誌文件夾 $ sudo mkdir /var/log/gunicorn # 更改權限 $ sudo chmod -R 777 /var/log/gunicorn
$ pip3 install gevent # 安裝成功會提示以下: Successfully installed gevent-1.2.2 greenlet-0.4.12 # 也能夠用sudo pip3 list來查看
將項目克隆下來api
$ git clone git@xxx.xxx.xxx/your_project_name.git
進入到項目下,測試gunicorn是否正確運行服務器
$ cd your_project_name # 更新項目日誌文件夾的權限 $ sudo chmod -R 777 logs $ gunicorn -b 0.0.0.0:5000 manager:app # 若是提示以下: [2017-10-20 09:44:48 +0000] [21856] [INFO] Starting gunicorn 19.7.1 [2017-10-20 09:44:48 +0000] [21856] [INFO] Listening at: http://0.0.0.0:5000 (21856) [2017-10-20 09:44:48 +0000] [21856] [INFO] Using worker: sync [2017-10-20 09:44:49 +0000] [21859] [INFO] Booting worker with pid: 21859 # 開啓後,能夠在客戶端中測試訪問 # crtl+c關閉
因爲gunicorn在控制面板關閉後,進程也會退出,須要使用supervisor作後臺守護。app
退出虛擬環境curl
$ deactivate
若是服務器中沒有安裝supervisor,先進行安裝測試
$ sudo apt-get install supervisor
增長supervisor 配置文件
$ cd /etc/supervisor/conf.d # 建立配置文件 $ sudo touch your_project_name.conf # 編輯 $ sudo vi your_project_name.conf # 內容以下 [program:your_project_name] command=/var/www/your_project_name/py35env/bin/gunicorn manager:app -c /var/www/your_project_name/your_project_name/gun.py directory=/var/www/your_project_name/your_project_name autostart=true autorestart=true stdout_logfile=/var/log/gunicorn/gunicorn_supervisor.log stderr_logfile=/var/log/gunicorn/gunicorn_supervisor_err.log
更新supervisor
$ sudo supervisorctl update # 會提示相關的進程已經被加入 your_project_name: added process group # 要關閉相關的進程能夠用 $ sudo supervisorctl stop your_project_name # 開啓能夠用 $ sudo supervisorctl start your_project_name