使用UWSGI和Nginx部署Flask web项目

作者: tcxurun 分类: Flask 发布时间: 2015-01-24 23:30 ė 6 没有评论

首先更新软件源

sudo apt-get updat

安装Nginx:

sudo apt-get install nginx

安装uWSGI以及uWSGI对于Python的支持:

sudo apt-get install uwsgi uwsgi-plugin-python

安装git

sudo apt-get install git

这一步可选,因为你可以选择通过其他方式把项目上传到服务器,我在这儿安装是因为项目放在Github上面,安装Git可以直接clone项目。

安装virtualenv:

这里是一个个人选择问题,因为众多python包也可以通过apt源安装。
不过一个比较好的习惯是,一些python工具通过源安装,比如supervisor,管理和升级都比较方便,而python一些第三方库还是在virtualenv中通过pip安装,像是virtualenv这样的基础工具还是通过源安装。

sudo apt-get install python-virtualenv

在home目录下创建

mkdir myproject
cd myproject

然后使用virtualenv命令在sheep目录下创建Python虚拟环境

virtualenv venv

通过使用下面这个命令激活虚拟环境

source venv/bin/activate

激活虚拟环境后命令会修改命令行提示符,加入环境名,如下所示:

(venv)$

然后安装相关依赖:

pip install -r requirements.txt

安装的时候报EnvironmentError: mysql_config not found错误

需要安装 libmysqlclient-dev,可以参考上一篇文章。

但是再次安装依赖的时候又报

error: command 'i686-linux-gnu-gcc' failed with exit status 1

上网找了好多就这个办法好用

终端下输入

sudo apt-get install python-dev

然后是根据模型生成数据库表结构

python manage.py db init
python manage.py db migrate -m "initial migration"
python manage.py db upgrade

创建数据库的时候报

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run

错误,试着在命令行连接MySQL,报同样错误,解决方式如下,执行下面三条命令后重新执行上述三条命令,相关表成功创建。(注意:migrate不能自动生成database,所以database需要手动创建)

sudo service mysql stop
sudo service mysql start
sudo service mysql restart

接下来给项目目录配置权限,Nginx和uwsgi默认是以www-data用户和组来运行:

chown -R www-data:www-data /home/myproject/sheep/
chown -R 755 /home/myproject/sheep/

对于nginx和uwsgi我们可以使用vhost方式进行部署,这样既能保证每个项目使用独立的virtualenv又可以,共用一个uWSGI池,这样在使用、部署和管理上都比较方便。

然后配置Nginx配置文件:

vim /etc/nginx/site-available/sheep

在打开的sheep文件中加入以下代码

server{
            listen       80;
            server_name hostname;
            location /static {
                    alias  /home/myproject/sheep/app/static;
            }
            location / {
                    include uwsgi_params;
                    uwsgi_pass 127.0.0.1:9001;
                    uwsgi_param UWSGI_PYHOME /home/myproject/sheep/venv;
                    uwsgi_param UWSGI_CHDIR /home/myproject/sheep;
                    uwsgi_param UWSGI_MODULE manage;
                    uwsgi_param UWSGI_CALLABLE app;
            }
            error_page 404 /404.html;
   }

其中mywebsite为项目目录下的manage.py文件,UWSGI_CALLABLE为其中的Flask实例名。

建立软连接到enabled目录

ln -s /etc/nginx/sites-available/sheep /etc/nginx/sites-enabled/sheep

删除sites-enable目录下的default的link,(很重要)

uwsgi配置

vim /etc/uwsgi/apps-available/myuwsgi.ini

在打开的文件中加入以下内容

[uwsgi]

plugins=python

vhost=true

socket=127.0.0.1:9001

uwsgi还有很多其他配置项,生产环境中需要好好配置。更多内容可参考官方文档。

建立软连接到enabled目录

ln -s /etc/uwsgi/apps-available/myuwsgi.ini /etc/uwsgi/apps-enabled/myuwsgi.ini

重启服务

service nginx restart
service uwsgi restart

部署完成

资料:

本文出自天一直很蓝,转载时请注明出处及相应链接。

本文永久链接: http://www.tcxurun.cn/archives/342

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Ɣ回顶部