基于ubuntu 16.04系统(阿里云实例),使用 Gunicorn + Nginx 进行布署,云服务器为阿里云
不要觉得部署很难,一步步的做就可以,要是哪里有了意外就上网查一下,基本你能碰到的问题都有人给出解决方案了。
你的阿里云服务器会有一个实例,需要做一些配置
系统ubantu16.04(虚拟机),IDE:pycharm
新建一个虚拟环境,写个小项目(比如hello world)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello world'
if __name__ == '__main__':
app.run()
搭建好以后跑一下,没问题的话就可以。但是这是基于falsk自带的web服务器,所以在阿里云上要用gunicorn来代替,它能让你的程序跑起来。
pip install gunicorn
然后在你的项目下新建一个gunicorn.py文件,来进行一些配置
通过命令行启动它
gunicorn -c gunicorn.py 运行文件名:flask实例名
例:
gunicorn -c gunicorn.py love:app
(我的是love.py,实例app)
你可以通过下面红色的命令来查看gunicorn的启动情况,以及如何退出
运行之后你会发现他已经在后台运行了,不会占用命令行。通过浏览器输入你绑定的端口(127.0.0.1:5000)应该可以看到运行结果
主要通过它做一些反向代理和负载均衡的工作,这里我们只需要它做反向代理,把请求转发到gunicorn,你需要安装它并编辑配置文件
$ sudo apt-get install nginx
# 可能会需要输入你的虚拟机开机密码
/etc/init.d/nginx start #启动
/etc/init.d/nginx stop #停止
编辑文件: /etc/nginx/sites-available/default
# 如果是多台服务器的话,则在此配置,并修改 location 节点下面的 proxy_pass
upstream flask {
server 127.0.0.1:5000;
server 127.0.0.1:5001;
}
# 上面这一步可以不用做
server {
# 监听80端口
listen 80 default_server;
listen [::]:80 default_server;
# 可以注释掉下面这两句
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# 请求转发到gunicorn服务器
proxy_pass http://127.0.0.1:5000;
# 请求转发到多个gunicorn服务器
# proxy_pass http://flask;
# 设置请求头,并将头信息传递给服务器端
proxy_set_header Host $host;
# 设置请求头,传递原始请求ip给 gunicorn 服务器
proxy_set_header X-Real-IP $remote_addr;
}
}
编辑好了以后开启它,然后去浏览器输入127.0.0.1,(默认就是80端口)看看是不是可以了。
下面需要把你的程序所在的环境在远程阿里云上安装一下
利用命令行进行远程服务器登录
ssh 用户名@ip地址
例:
ssh [email protected]
你可以在 更多 里修改你的密码,远程登录需要使用,但是你需要使用比较麻烦的那个,而不是简单的6位数的那个。
sudo apt-get update
pip install virtualenv
pip install virtualenvwrapper
# 如果出错
locale.Error: unsupported locale setting
解决:语言设置问题
export LC_ALL=C
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
source /usr/local/bin/virtualenvwrapper.sh
source ~/.bashrc
然后创建一个虚拟环境吧
mkvirtualenv -p python3 虚拟环境名称
例 :
mkvirtualenv -p python3 py3_flask
接下来把你的程序所用到的包都安装到阿里云的虚拟环境中
在pycharm的终端切换到你的项目的根目录
把包的名字导入到一个requirements.txt文件中
你的项目目录下会多了一个requirements.txt,那里有你项目所需要的包
pip freeze > requirements.txt
# 查看一下,然后把其中的pkg-resources删除掉,它并不会有什么影响
然后打开一个新的终端,进入到你的项目目录的上一级,比如你在桌面建立的项目,那就进入到桌面,然后把项目远程拷贝到阿里云
scp -r 本地文件路径 root@公网ip:远程保存路径
来到阿里云,确保你当前是在你创建的虚拟环境中,然后进入到你拷贝的项目中执行:
pip install -r requirements.txt
# 如果出现错误 pkg-resources找不到,在你的requirements.txt中把它删掉就可以
然后按照之前的做法,把nginx在阿里云上安装,编辑配置文件
最后,开启gunicorn, 开启nginx
通过公网ip访问一下看看是否成功了
如果没有,不要灰心,多琢磨一下,睡一觉说不定你就知道哪里需要改进一下了!