书接上回。。。
上一节分享了一下阿里云上的一些基本配置,诸如防火墙,这些虽然看似与部署无关,但是都是整个实践过程中为了确保安全性和便宜性不可缺少的事宜。
部署我们的应用
首先要明确的是,把我们的代码推送到linux服务器上的方式有很多,我用过的有git管理和scp指令。git的方法很常用,在这里就不多说了,scp是常用的基于linux系统下ssh远程拷贝的命令,使用scp的话就可以绕过git管理,是一种更加简单的方式,当然使用git的习惯还是很好的,在这里我们使用“scp”指令进行操作。
scp -r USER/FILE/LOCATION [email protected]:~/
指令同Linux下常用的mv差不多,这里不多作介绍。
同时如果使用这种方法,你需要手动添加一个"requirements.txt"文件夹,以“=”的格式写上每个扩展所需的依赖,当然为了方便起见,最好创建一个虚拟环境,将上述的依赖安装到虚拟环境中。
上述步骤做好之后,如果你的敏感信息没有暴露在外面,那么你可以使用"flask run"查看你的应用了,注意,为了让我们可以从本机环境中看到应用运行的状态,我们使用:
flask run --host=0.0.0.0
注意我们上文开放的端口,有可能你即使开放了5000端口,在本地浏览器输入:
***.***.***.***:5000 //***代表你的共有IP
仍然可能打不开,这是因为阿里云的安全组并没有开放5000端口,你需要手动设置一下
Nginx Gunicorn and Supervisor
当然,实际的应用部署肯定不能这么草草了事,我们需要更健壮的服务器来运行我们的实例。简单的说,Nginx是一款Web服务器,很方便,而且有不错的性能,但是他只能处理CSS,JS等文件,不能识别Python代码,因此,Gunicorn就有了用武之地。gunicorn是一个python Wsgi http server,只支持在Unix系统上运行,来源于Ruby的unicorn项目。Gunicorn使用prefork master-worker模型,能够与各种wsgi web框架协作。
当然不只是这些,如果你想不用一直开着窗口网站也可以运行,那么Supervisor之类的软件就必不可少了,Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,同时也可以对后台程序进行监控。通过这三个依赖相互结合,我们就可以创建出拥有不错性能的小博客。
首先删除默认配置并写入新配置:
sudo rm /etc/nginx/sites-enabled/default
sudo vim /etc/nginx/sites-enabled/flaskblog
//Nginx:
server{
listen 80;
server_name **.**.**.**;
location /static {
alias /home/**/**/app/static;
}
location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
proxy_redirect off;
}
}
同时可以开启80端口,具体操作就不说了。
使用下面操作重启Nginx,当然这时候你可以看到CSS文件,却看不到网页的样子,原因就是我们之前所说的Nginx不识别Python Code。
sudo systemctl restart nginx
这时我们使用:
gunicorn -w 3 test:app
关于gunicorn我们在Flask部署在Heroku一文中已经提到了,这里不再详述。
最后我们配置一下Supervisor:
[program:flaskblog]
directory=/home/**/tutorial
command=/home/**/tutorial/venv/bin/gunicorn -w 3 test:app
user=**
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stderr_logfile=/var/log/flaskblog/flaskblog.err.log
stdout_logfile=/var/log/flaskblog/flaskblog.out.log
并创建我们需要的文件夹,重启Supervisor即可得到成品的网站啦。
下一节,也就是最后一节,我们会看看域名怎么和IP绑定。