基本的部署方式是通过Flaks + WSGI + Nginx
首先通过远程连接到服务器
1 | ssh root@远程服务器ip -p 远程服务器端口 |
输入密码之后进入远程服务器的操作
首先安装pip
获取get-pip.py
文件
1 | curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py |
执行安装:
1 | python get-pip.py |
安装virtualenv
因为不同的项目可能需要不同的安装包的版本,所以我们往往不是直接在系统中安装Python的各种包,而是通过virtualenv
建立虚拟的Python环境
首先通过pip安装virtualenv
1 | pip install virtual |
然后创建一个项目文件夹
1 | mkdir my_web_app |
在my_web_app文件夹中创建虚拟环境:
1 | virtualenv venv |
开启虚拟环境:
1 | source ./venv/bin/activate |
如果需要关闭虚拟环境:deactivate
此时你的命令行在最前面多了一个(venv)
的标志,证明你已经进入了虚拟环境
安装依赖库
要使用Flask框架写网页,就需要安装一系列跟Flask相关的库,此时可以使用pip
命令的通过文件进行安装:
先建立一个requirements.txt,在其中写上需要安装的库的名称和版本号(版本号可以不写,默认安装最新版本)
1 | touch requirements.txt |
在其中写入以下内容:
1 | Flask==0.10.1 |
然后通过pip
进行批量安装:
1 | pip install -r requirements.txt |
然后我们需要安装uSWGI,主要用于部署Flask项目:
1 | pip install uSWGI |
上传项目文件
项目文件的组织结构如下:
1 | root/wz/ |
在app文件夹下的__init__.py
文件进行修改,我们使用一个最简单的程序进行演示:
1 | from flask import Flask |
然后在app的上一级文件夹建立manage.py
文件用于运行程序
1 | from flask_script import Manager,Server |
此时如果我们使用命令:
1 | python manage.py runserver |
已经可以运行在本地 http://127.0.0.1:5000
接下来开始配置uWSGI
uWSGI有两种启动方式,在这里我们选了通过配置文件启动的方法
在项目目录中新建config.ini,写入如下内容:
1 | [uwsgi] |
这里的8000就是我们外网访问时服务器监听的地址,由于我的路由器是搭在一个路由器下面的,此时我们需要登录路由器的设置界面设置端口转发:
填写内网ip地址和本地端口,以及需要映射到外网的端口,在项目中,我们把本地的8000端口映射为外网的6000端口
配置好端口之后,输入命令直接运行uWSGI:
1 | uwsgi config.ini |
到此为止,我们已经可以通过服务器公网ip:6000
访问你的Flask应用
安装 Supervisor
[Supervisor|http://supervisord.org/configuration.html]可以同时启动多个应用,最重要的是,当某个应用Crash的时候,他可以自动重启该应用,保证可用性。
1 | sudo apt-get install supervisor |
Supervisor 的全局的配置文件位置在:
1 | /etc/supervisor/supervisor.conf |
正常情况下我们并不需要去对其作出任何的改动,只需要添加一个新的 *.conf 文件放在
1 | /etc/supervisor/conf.d/ |
下就可以,那么我们就新建立一个用于启动 my_flask 项目的 uwsgi 的 supervisor 配置 (命名为:my_flask_supervisor.conf):
1 | [program:my_flask] |
启动服务
1 | sudo service supervisor start |
终止服务
1 | sudo service supervisor stop |
安装 Nginx
[Nginx|http://nginx.com/]是轻量级、性能强、占用资源少,能很好的处理高并发的反向代理软件。
1 | sudo apt-get install nginx |
配置 Nginx
Ubuntu 上配置 Nginx 也是很简单,不要去改动默认的 nginx.conf 只需要将
1 | /ext/nginx/sites-available/default |
文件替换掉就可以了。
新建一个 default 文件:
1 | server { |
将default配置文件替换掉就大功告成了!
还有,更改配置还需要记得重启一下nginx:
1 | sudo service nginx restart |