Flask+uwsgi+nginx+supervisor 项目部署

2024-06-04 03:18

本文主要是介绍Flask+uwsgi+nginx+supervisor 项目部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

非常感谢知了课堂黄勇老师的教程,但是在部署过程中遇到一点问题,自己总结了一下。

在开发机上的工作:

1.   确认项目可正常运行;

2.   在项目所在文件夹下执行 pip freeze > requirements.txt ,将当前环境的包导入到requirements.txt 文件中;

3.   用git将本地项目先上传到GitHub上

git init

git remote add origin https/SSH  --https和SSH代表你在GitHub上项目文件夹的地址,建议使用SSH,https方式每次需要输入账号密码;

在GitHub上创建项目的时候一般会创建一个README.MD文件,先将此文件pull到本地

git pull origin master

然后执行下列命令:

git add .

git commit -m “message”

git status  ---查看当前工作区的文件是否完全提交到暂存区

 

完成后:

git push origin master

在服务器上的工作:

服务器可以是虚拟机上的Linux或者是云服务,二者是一样的,在这以阿里云服务器为例:

1.    在本地电脑上安装Xshell5,用来访问远程服务器,同时在服务器上安装OpenSSH, 阿里云服务器上已经安装了。

2.   将GitHub上的项目pull到服务器上的/srv目录下,需要先安装git ,Linux下安装git:

sudo apt-get install git

3.   然后在/srv下新建一个文件夹,名字和你的项目名称一样;

git init

git remote add origin https/SSH .

git pull origin master

       注意,在执行git将本地文件上传到远程仓库前,需要将本地的SSH添加到GitHub上。否则不能成功上传。相关操作可百度

4.   安装好项目用到的python

sudoapt install python3

sudoapt install python3-pip

pip3install –upgrade pip

5.   安装virtualenv 以及 virtualenvwrapper

pipinstall virtualenvwrapper

sudoapt install vim

Vim~/.bashrc 编辑该文件,在最后添加一下两行代码:

 

 

      exportWORKON_HOME=$HOME/.virtualenvs

      source/usr/local/bin/virtualenvwrapper.sh

source ~/.bashrc

6.    创建虚拟环境:

在这我们指定用python3创建虚拟环境,执行如下命令:

Mkvirtualenv –python=/usr/bin/python3dxbbs-env

7.    安装mysql服务端和客户端:

Sudo apt install mysql-servermysql-client

Sudo apt-get install libmysqld-dev

8.    用mkvirtualenv命令创建好虚拟环境后会自动进入虚拟环境,然后进入到项目所在目录。执行命令:

Pip install -r requirements.txt

等待系统安装好需要的包

9.    进入mysql,创建数据库,注意,数据库的名称要和你项目所用到的数据库名称一致;

10.   执行pythonmanage.py db upgrade 命令。将数据库的迁移文件,映射到服务器上的mysql数据库中;

11.   然后在项目目录下,执行python dxbbs.py,然后在本地电脑浏览器中访问 服务器地址:端口,确认项目可以正常运行;

12.   关闭项目的DEBUG模式;

 

安装uwsgi

1.   uwsgi 是一个应用服务器,非静态文件的网络请求就必须通过他完成,他也可以充当静态服务器,但不是他的强项。Uwsgi是使用python编写的,因此通过pip install uwsgi 就可以安装。注意:uwsgi 必须安装到系统级别的python环境中,退出虚拟环境的命令为deactivate

2.   编写uwsgi 配置文件:

在项目的路径下面,创建一个文件叫dxbbs_uwsgi.ini的文件,然后填写一下代码:

 

[uwsgi]
 
# Django相关的配置
# 必须全部为绝对路径
# 项目的路径
chdir           = /srv/dxbbs
# 模块
module          = dxbbs
# Python虚拟环境的路径
home            = /root/.virtualenvs/dxbbs-env
 
# 进程相关的设置
# 主进程
master          = true
# 最大数量的工作进程
processes       = 10
# socket文件路径,绝对路径
socket          = /srv/dxbbs/dxbbs.sock
# wsgi文件
wsgi-file       = /srv/dxbbs/wsgi.py
# wsgi文件的app变量
callable        = app
# 设置socket的权限
chmod-socket    = 666
# 退出的时候是否清理环境
vacuum          = true

然后使用命令uwsgi –ini dxbbs_uwsgi.ini ,此时运行这个项目后,在浏览器是不能访问的,继续往下配置。

 

安装nginx:

1. nginx是一个web服务器,用来加载静态文件和接受http请求。通过命令sudo apt install nginx安装。

2.编写nginx配置文件:

/etc/nginx/conf.d目录下,新建一个文件,叫做dxbbs.conf,然后将以下代码粘贴进去:

upstream dxbbs {
    server unix:///srv/dxbbs/dxbbs.sock; 
}
 
# 配置服务器
server {
    # 监听的端口号
    listen      80;
    # 域名
    server_name 192.168.0.101; //此处是服务器的公网IP
    charset     utf-8;
 
    # 最大的文件上传尺寸
    client_max_body_size 75M;  
 
    # 静态文件访问的url
    location /static {
        # 静态文件地址
        alias /srv/dxbbs/static; 
    }
 
    # 最后,发送所有非静态文件请求到django服务器
    location / {
        uwsgi_pass  dxbbs;
        # uwsgi_params文件地址
        include     /etc/nginx/uwsgi_params; 
    }
}

       完成后测试配置文件是否正确,执行service nginx configtest,出现

说明配置成功,然后执行service nginx restart 重新启动nginx 。如果修改了配置文件,每次都要重新执行service nginx restart 才能生效。

 

此时在浏览器访问服务器公网IP(不加端口号),会出现下面这个界面:

别急,我们还没启动uwsgi。

使用supervisor管理uwsgi

让supervisor管理uwsgi,可以在uwsgi发生意外的情况下,自动重启。

1.安装supervisor,由于Python3目前不支持supervisor ,因此我们可以使用python2进行安装,然后用它来管理python3,这样是可以的。因此我们要将supervisor安装在系统级别的环境中。

2.在项目的根目录下创建一个文件dxbbs_supervisor.conf,配置文件如下:

 
# supervisor的程序名字
 [program:dxbbs]
# supervisor执行的命令
 command=uwsgi --ini dxbbs_uwsgi.ini
# 项目的目录
 directory = /srv/dxbbs 
 # 开始的时候等待多少秒
 startsecs=0
# 停止的时候等待多少秒
 stopwaitsecs=0  
 # 自动开始
 autostart=true
# 程序挂了后自动重启
 autorestart=true
# 输出的log文件
 stdout_logfile=/srv/dxbbs/log/supervisord.log
# 输出的错误文件
 stderr_logfile=/srv/dxbbs/log/supervisord.err
 
 [supervisord]
# log的级别
 loglevel=info
 
# 使用supervisorctl的配置
 [supervisorctl]
# 使用supervisorctl登录的地址和端口号
 serverurl = http://127.0.0.1:9001
 
# 登录supervisorctl的用户名和密码
 username = admin
 password = 123
 
 [inet_http_server]
# supervisor的服务器
 port = :9001
# 用户名和密码
 username = admin
 password = 123
 
 [rpcinterface:supervisor]
 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

然后使用命令 supervisord -c dxbbs_supervosir.conf运行项目。再执行命令supervisorctl-c dxbbs_supervosir.conf

进入到supervisor 管理控制台,可以执行下面相关的命令进行管理:

Ø  status # 查看状态

Ø  start program_name #启动程序

Ø  restart program_name #重新启动程序

Ø  stop program_name # 关闭程序

Ø  reload # 重新加载配置文件

Ø  quit # 退出控制台

另外,非常重要的一点是在阿里云服务器上需要添加http访问的安全组,详情请看这篇文章应用案例中的案例6,添加80端口安全组规则。

项目运行后,在浏览器访问服务器IP,是不是发现一家可以正常进入网站了?

 

1.如果需要修改项目,建议在本地电脑上修改、测试无bug后再上传到服务器。

2.每次更新项目后需要在supervisor重新加载配置文件;

这篇关于Flask+uwsgi+nginx+supervisor 项目部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028912

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py