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的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1