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