ubantu20.4 在本地部署flask+nginx+uwsgi+vue 前后分离项目

本文详细介绍了如何在Ubuntu 20.4上部署Flask和Vue.js构建的前后端分离项目,结合Nginx和uWSGI实现高性能的Web服务。首先安装必备软件和环境,然后创建和配置Nginx、uWSGI以及Flask应用。通过设置Nginx的反向代理,使前端Vue静态文件和后端Flask接口协同工作。最后,调整uWSGI配置以确保服务稳定性。
摘要由CSDN通过智能技术生成

ubantu20.4 在本地部署flask+nginx+uwsgi+vue 前后分离项目

tips: ubantu20.4 内置了python3.+ 所以下面安装都用pip3来安装

  • 安装Nginx及其他所需软件之前先安装一些前提软件。首先,我们需要pip3与virtualenv
    sudo apt-get install python-setuptools
    sudo apt install python3-pip
    sudo pip3 install virtualenv

  • 使用apt-get安装Nginx的话,我们需要添加Nginx库到apt-get source中sudo add-apt-repository ppa:nginx/stable
    tips: 如果“add-apt-repository”命令在你的Ubuntu版本中不存在的话,你需要安装“software-properties-common”包,使用命令:sudo apt-get software-properties-common

  • 升级已有的包,确保系统上有uWSGI所需的编译器和工具
    sudo apt-get update && sudo apt-get upgrade
    sudo apt-get install build-essential python python-dev

  • 安装nginx
    sudo apt-get install nginx(安装nginx)
    sudo /etc/init.d/nginx start
    (启动nginx 安装完 默认打开的 可用 killall -9 nginx 杀掉nginx的进程)
    现在打开浏览器 访问服务器地址 是可以看到nginx的欢迎页的

  • 安装uswgi
    sudo pip3 install uwsgi

示例项目

  • 应用相关的文件存放在/var/www/test文件夹 (test 为你的项目文件夹)
    cd /var/www/test (进入test项目文件夹)
    virtualenv venv(创建 test的虚拟环境)
    . venv/bin/activate (链接到virtualenv 的环境文件夹里)
    pip3 install flask (安装flask应用 这里可以根据自己项目的配置表进行安装 pip3 install -r requirements.txt

-------------------------------分割线(始)----------------------------------
该项为测试项目走个流程 实际根据自己写好的项目来更改

  • 创建一个hello.py文件(可用pycharm或其他编辑器 创建) 文件内容为
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080)
  • 现在在项目目录终端里 执行python hello.py 打开浏览器 输入服务器地址的8080端口就可以看到 Hello World!

-------------------------------分割线(终)----------------------------------

配置nginx

首先删除掉Nginx的默认配置文件:
sudo rm /etc/nginx/sites-enabled/default
注意:如果你安装了其他版本的Nginx,默认配置文件可能在/etc/nginx/conf.d文件夹下。

  • (标记1)创建一个使用的新配置文件/var/www/test/test_nginx.conf:
server {
    listen      80;
    server_name localhost;
    charset     utf-8;
    client_max_body_size 75M;

    location / { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass unix:/var/www/test/test_uwsgi.sock;
    }
}
  • 将刚建立的配置文件使用符号链接到Nginx配置文件文件夹中,重启Nginx:
    sudo ln -s /var/www/test/test_nginx.conf /etc/nginx/conf.d/
    sudo /etc/init.d/nginx restart
    执行到这里需要访问 或返回 一个502的状态,这个错误是正常的,它代表Nginx已经使用了我们新创建的配置文件,但在链接到我们的Python应用网关uWSGI时遇到了问题,因为我们还没有配置uWSGI。

配置uWSGI

-(标记2) 在项目根目录创建一个新的uWSGI配置文件/var/www/test/test_uwsgi.ini:

[uwsgi]
#application's base folder
base = /var/www/test

#python module to import
app = hello
module = %(app)

home = %(base)/venv
pythonpath = %(base)

#socket file's location
socket = /var/www/test/%n.sock

#permissions for the socket file
chmod-socket    = 666

#the variable that holds a flask application inside the module imported at line #6
callable = app

#location of log files
logto = /var/log/uwsgi/%n.log
  • 创建一个新文件夹存放uWSGI日志,更改文件夹的所有权
sudo mkdir -p /var/log/uwsgi
sudo chown -R ubuntu:ubuntu /var/log/uwsgi 
(ubantu为用户名 改为自己的用户名)
  • 执行uWSGI,用新创建的配置文件作为参数:
uwsgi --ini /var/www/test/test_uwsgi.ini

现在再访问 就不报502了

我的项目是 前后分离 前端用的vue+ant design pro of vue 后端用的flask
我的nginx配置

server {
    listen 80;
    server_name 192.168.xx.xx;   #  这里的地址是浏览器访问的地址
    location / {
      root /var/www/test/static; # 前端打包生成的静态文件的路径
      index index.html index.htm;
      try_files $uri $uri/ /index.html;
		}

    location /api {
	   	  proxy_pass http://127.0.0.1:81;     # 反向代理到后端
	      proxy_set_header Host $host;
	    }
    }

server {
    listen 81;
    server_name 192.168.xx.xx:8080;  # 域名,更换成自己的域名 
    location / {
      include uwsgi_params;
      uwsgi_pass 127.0.0.1:5000;  # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
      uwsgi_param UWSGI_PYHOME /var/www/test/venv; # 指向虚拟环境目录
      uwsgi_param UWSGI_CHDIR /var/www/test; # 指向网站根目录
      uwsgi_param UWSGI_SCRIPT manage:app; # 指定启动程序,manage.py是manage.py前部分,app是程序内用以启动的 application 变量名
    }
}

我的 uwsgi配置

[uwsgi]
socket = 127.0.0.1:5000
# 项目内部端口号(必须与nginx相同)
chdir= /var/www/test
# 指向网站目录(根)
wsgi-file = manage.py # (启动文件)
# 项目启动文件名
callable = app 
# 项目中以启动的变量名(如:app/application ),根据你的实际情况填写
processes = 2  
# 处理器数,根据你的实际情况填写
threads = 4 
# 线程数
stats = 127.0.0.1:9191
# 状态检测地址,注意服务器提供商和宝塔的端口放行策

参考 https://www.oschina.net/translate/serving-flask-with-nginx-on-ubuntu

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值