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

相关文章

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于