Python项目部署debian + nginx + uwsgi + flask

写代码期间,都是用pycharm直接运行调试的。本机测试环境跟服务器环境有着很大的不同,于是如果想部署到服务器还是要重新配置环境的。

这里使用的是nginx + uwsgi 的方式。服务器是debian,其它操作系统类似

1. 安装nginx

(略)

2. 安装uwsgi

apt-get install uwsgi

3. 上传代码到服务器目录

上传后确定项目目录,比如/usr/share/nginx/html/hello
下面均以这个目录为例

4. 初始化项目python环境

# 进入项目目录
cd /usr/share/nginx/html/hello

# 初始化环境
virtualenv venv
# 如果还没安装virtualenv,请先安装:pip install virtualenv
# 如果还没安装pip,请先安装:apt-get install python-pip

# 激活当前项目环境
source venv/bin/activate

# 生成依赖requirements.txt
pip freeze > requirements.txt

# 安装依赖包
pip install -r requirements.txt

# 安装项目的uwsgi
pip install uwsgi

5. 配置uwsgi

项目目录下新建uwsgi.ini文件
第一个socket是开启的本地访问端口,后面的nginx代理会用到
第二个socket是uwsgi输出的文件

[uwsgi]

uid = www-data
gid = www-data
master = true

socket = 127.0.0.1:8101
chdir = /usr/share/nginx/html/hello

socket = %(chdir)/uwsgi/uwsgi.socket

virtualenv = %(chdir)/venv

wsgi-file = app.py

callable = app

processes = 4

threads = 2

stats = %(chdir)/uwsgi/uwsgi.status
pidfile = %(chdir)/uwsgi/uwsgi.pid

同时新建uwsgi文件夹,并新建空文件:

touch uwsgi/uwsgi.pid
touch uwsgi/uwsgi.status
touch uwsgi/uwsgi.socket

6. 配置nginx

新增配置文件, uwsgi_pass 的端口号对应上面uwsgi里的socket端口

server {
        listen       80;
        server_name 你的域名;

        location / {
            include  uwsgi_params;
            uwsgi_pass  127.0.0.1:8101;
            uwsgi_param UWSGI_PYTHON /usr/share/nginx/html/hello/venv;
            uwsgi_param UWSGI_SCRIPT app:app;
            uwsgi_param UWSGI_CHDIR /usr/share/nginx/html/hello;
            index  index.html index.htm;
            client_max_body_size 35m;
        }

        access_log /var/log/nginx/access_hello.log combined;
        error_log /var/log/nginx/error_hello.log error;
    }

新增修改后记得重启生效nginx -s reload

7. 启动项目

以下命令在项目环境下运行,并且是激活当前项目的venv环境下的终端运行

# 记得先安装项目的uwsgi依赖包
# pip install uwsgi

# 启动
uwsgi --ini uwsgi.ini
# 如果要后台运行则加-d: uwsgi -d --ini uwsgi.ini

8. 完成

(愉快地访问吧)

评论

暂无

添加新评论