Python 发布 Web 应用的常见方法及详细步骤
以下是 Python 发布 Web 应用的常见方法及详细步骤,涵盖从本地开发到生产环境部署的全流程:
一、基础准备:开发 Web 应用
1. 选择框架(以 Flask 为例)
# app.py
from flask import Flask
app = Flask(__name__)@app.route('/')
def home():return "Hello, World!"if __name__ == '__main__':app.run(debug=True)
2. 安装依赖
pip install flask
二、本地测试运行
python app.py
# 访问 http://localhost:5000
三、生产环境部署方法
方法 1:传统服务器部署(Nginx + Gunicorn)
1. 安装必要组件
# Ubuntu/Debian
sudo apt update
sudo apt install python3-pip nginx
pip install gunicorn
2. 配置 Gunicorn 启动应用
# 启动命令(绑定到Unix socket)
gunicorn --bind unix:myapp.sock app:app# 或绑定到端口(调试用)
gunicorn --bind 0.0.0.0:8000 app:app
3. 配置 Nginx 反向代理
创建配置文件 /etc/nginx/sites-available/myapp:
server {listen 80;server_name your_domain.com;location / {proxy_pass http://unix:/path/to/myapp.sock;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}# 静态文件处理(可选)location /static {alias /path/to/your/static/files;}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo systemctl restart nginx
4. 使用 Systemd 管理进程
创建服务文件 /etc/systemd/system/myapp.service:
[Unit]
Description=Gunicorn instance for myapp
After=network.target[Service]
User=ubuntu
WorkingDirectory=/path/to/app
ExecStart=/usr/local/bin/gunicorn --workers 3 --bind unix:myapp.sock app:app
Restart=always[Install]
WantedBy=multi-user.target
启动服务:
sudo systemctl start myapp
sudo systemctl enable myapp
方法 2:云平台一键部署(以 Heroku 为例)
1. 安装 Heroku CLI
curl https://cli-assets.heroku.com/install.sh | sh
heroku login
2. 准备部署文件
Procfile(无扩展名):web: gunicorn app:apprequirements.txt:flask gunicorn
3. 部署到 Heroku
heroku create
git push heroku master
heroku open
方法 3:Docker 容器化部署
1. 编写 Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["gunicorn", "--bind", "0.0.0.0:80", "app:app"]
2. 构建并运行镜像
docker build -t myapp .
docker run -d -p 80:80 --name myapp myapp
3. 发布到 Docker Hub
docker tag myapp yourusername/myapp
docker push yourusername/myapp
方法 4:Serverless 部署(AWS Lambda + API Gateway)
1. 使用 Zappa(适用于 Flask)
pip install zappa
zappa init # 按提示配置
zappa deploy dev
2. 访问生成的 API 端点
四、关键优化与安全
-
HTTPS 配置
使用 Let’s Encrypt 免费证书:sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d your_domain.com -
防火墙设置
sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable -
静态文件缓存
在 Nginx 配置中添加:location /static {expires 30d;add_header Cache-Control "public"; }
五、验证部署
- 访问测试:浏览器打开
http://your_domain.com或云平台提供的 URL - 日志检查:
journalctl -u myapp.service -f # 查看 Gunicorn 日志 tail -f /var/log/nginx/error.log
六、部署方法对比
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Nginx + Gunicorn | 自建服务器/VPS | 完全控制、高性能 | 维护成本较高 |
| Heroku | 快速原型、小型项目 | 简单免费、无需运维 | 有资源限制、费用随规模增长 |
| Docker | 跨环境部署、微服务架构 | 环境隔离、易扩展 | 需要学习 Docker 技术栈 |
| Serverless | 事件驱动、低频访问应用 | 按需计费、自动扩缩容 | 冷启动延迟、架构限制 |
根据项目规模、团队技能和预算选择最适合的方案。
相关文章:
Python 发布 Web 应用的常见方法及详细步骤
以下是 Python 发布 Web 应用的常见方法及详细步骤,涵盖从本地开发到生产环境部署的全流程: 一、基础准备:开发 Web 应用 1. 选择框架(以 Flask 为例) # app.py from flask import Flask app Flask(__name__)app.ro…...
记录一次部署PC端网址全过程
当我查看我之前写的文章时、顿时惊奇发出感慨:啥时候写的?是我写的么?疑惑重重… 所以说,好记性不如烂笔头。 记录一次部署PC端网址全过程 部署PC端网址分是三步:第一步:申请域名并映射到外网IP ࿰…...
Spring——Spring开发实战经验(4)
摘要 本文深入探讨了 Spring 应用中 Interceptor(拦截器)、Filter(过滤器)和 Aspect(切面)的执行顺序、职责及典型使用场景。Filter 是 Servlet 级别的机制,主要用于日志记录、权限验证等&…...
深入探索HarmonyOS——构建万物智联的新时代
作者:林钟雪 引言 在科技日新月异的今天,操作系统作为连接硬件与软件的核心桥梁,正引领着数字化转型的新浪潮。HarmonyOS,作为华为自主研发的面向万物智联时代的分布式全场景操作系统,自发布以来便备受瞩目。它不仅打…...
算法12-贪心算法
一、贪心算法概念 贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致全局最优解的算法。贪心算法的核心思想是“局部最优,全局最优”,即通过一系列局部最优选择,最…...
小白win10安装并配置yt-dlp
需要yt-dlp和ffmpeg 注意存放路径最好都是全英文 win10安装并配置yt-dlp 一、下载1.下载yt-dlp2. fffmpeg下载 二、配置环境三、cmd操作四、yt-dlp下视频操作 一、下载 1.下载yt-dlp yt-dlp地址 找到win的压缩包点下载,并解压 2. fffmpeg下载 ffmpeg官方下载 …...
I²C简介
前言 IC(Inter-Integrated Circuit, 内置集成电路)总线是由Philips公司(现属于恩智浦)在上世纪80年代开发的两线式串行通信总线,用于连接微控制器及其外围设备,控制设备之间的通信。 IC总线的物理拓扑示意…...
Spring容器扩展点
Spring容器扩展点 BeanDefinitionRegistryPostProcessorBeanFactoryPostProcessorImportSelectorImportBeanDefinitionRegistorBeanPostProcessorInstantiationAwareBeanPostProcessor--postProcessBeforeInstantiationSmartInstantiationAwareBeanPostProcessor--determineCan…...
spring boot知识点3
1.spring boot能否使用xml配置 可以,但是很繁琐,现在都建议走JavaConfig 2.spring boot的核心配置文件 application.properties application.yml 3.bootstrap.properties和application.properties的区别 b:用于远程配置 a:…...
Linux后台启动命令nohup并且MobaXterm后台启动断网也不关闭软件
nohup主要作用就是可以在后台运行,并可以选择将日志输出到指定文件。如启动一个程序,若使用./demo的方式启动程序当窗口关闭的时候程序也停止了,而且日志会直接输出到控制台非常不直观,nohup启动就可以解决这两个问题。 nohup与&…...
C++(23):unreachable
C++23在头文件 "><utility>定义了std::unreachable(),用于指示编译器,该段代码不应该被允许,因此编译器可以对该位置进行优化,如果一旦允许了该位置的代码,行为未定义: #include <utility> #include <iostream>using namespace std;int func(…...
【Vue+python】Vue调用python-fastApi接口实现数据(数值、列表类型数据)渲染
前言:之前做的一直都是SpringBootVue的应用,但现在需要实现一个能将python实现的算法应用展示在前端的界面。想法是直接Vue调用python-fastApi接口实现数据渲染~ 文章目录 1. 变量定义2. axios调用python3. 跨域问题解决4. 数据渲染4.1 数值数据渲染4.2 …...
构建高效智能对话前端:基于Ant Design X 的deepseek对话应用
文章目录 实现的效果前言Ant Design X添加欢迎组件创建对话气泡存储对话历史渲染对话气泡 输入组件WebSocket 连接总结 实现的效果 待机页面: 等待页面: 完成页面: 前言 随着人工智能技术的飞速发展,大模型对话系统已成为…...
四元数如何用于 3D 旋转(代替欧拉角和旋转矩阵)【ESP32指向鼠标】
四元数如何用于 3D 旋转(代替欧拉角和旋转矩阵) 在三维空间中,物体的旋转可以用 欧拉角、旋转矩阵 或 四元数 来表示。 四元数相比于欧拉角和旋转矩阵有 计算更高效、避免万向锁、存储占用少 等优点,因此广泛用于 游戏开发、机器…...
Cloud: aws:network: limit 含有pps这种限制
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshooting-ena.html#statistics-ena 这个是调查网络问题的一个网页; 在里面,竟然含有pps这种限制:ethtool -S;其实是比较苛刻的安全相关的策略? [ec2-user ~]$ ethtool -S ethN NIC statistics:tx_timeout: …...
Python MoviePy 视频处理全攻略:从入门到实战案例
第1章 环境安装与配置 # 案例1:安装MoviePy及FFmpeg !pip install moviepy # Windows安装FFmpeg:https://ffmpeg.org/download.html # Linux: sudo apt-get install ffmpeg# 验证安装 from moviepy.editor import * print("MoviePy版本:", __…...
数据结构之BST、AVL、红黑树、哈夫曼树与B族树
数据结构之BST、AVL、红黑树、哈夫曼树与B族树 数据结构之BST、AVL、红黑树、哈夫曼树与B族树一、二叉搜索树(Binary Search Tree, BST)1. 什么是二叉搜索树?重要性质 2. 二叉搜索树实现1. 节点结构定义2. 核心操作接口3. 插入算法实现4. 删除…...
开源多商户商城源码最新版_适配微信小程序+H5+APP+PC多端
在数字化时代,电子商务已经成为各行业不可或缺的一部分,开源多商户商城源码为中小企业和个人开发者提供了快速搭建和定制电商平台的利器。分享一款最新版的开源多商户商城源码,它能够适配微信小程序、H5、APP和PC等多个端口,满足商…...
第3章 .NETCore核心基础组件:3.1 .NET Core依赖注入
3.1.1 什么是控制反转、依赖注入 杨老师在书中进行了一系列的文字阐述,总结一下就是:软件设计模式中有一种叫做【控制反转】的设计模式,而依赖注入是实现这种设计模式的一个很重要的方式。也就是说学习依赖注入,是学习怎样实现控…...
cesium基础设置
cesium官网下载:https://cesium.com/downloads/ 1.安装cesium 选择下载到本地使用,或者通过npm下载到项目中 2.代码书写 (1)创建容器 <div id"cesiumContainer" style"width: 100%; height: 100%"><…...
Spring-GPT智谱清言AI项目(附源码)
一、项目介绍 本项目是Spring AI第三方调用整合智谱请言(官网是:https://open.bigmodel.cn)的案例,回答响应流式输出显示,这里使用的是免费模型,需要其他模型可以去 https://www.bigmodel.cn/pricing 切换…...
文件夹上传到github分支最后github上面还是没有文件和文件夹
环境: github 问题描述: 文件夹上传到github分支最后github上面还是没有文件和文件夹, 和这样一样 解决方案: 从 git ls-tree -r HEAD 的输出中可以看到,metahuman-stream 文件夹显示为如下内容: 160000 commi…...
面试题之箭头函数和普通函数有什么区别?
箭头函数(Arrow Function)和普通函数(Regular Function)是 JavaScript 中两种不同的函数定义方式,它们在语法、上下文(this)、原型链等方面存在显著区别。以下是它们的主要区别: 1. …...
【文献精读】AAAI24:FacetCRS:打破对话推荐系统中的“信息茧房”
标题FacetCRS: Multi-Faceted Preference Learning for Pricking Filter Bubbles in Conversational Recommender System期刊The Thirty-Eighth AAAI Conference on Artificial Intelligence (AAAI-24)年份2024关键词Conversational Recommender System (CRS), Filter Bubbles,…...
[vs2017][qt]MSB4019 未找到导入的项目QtMsBuild\Qt.prop
问题场景: vs2017qt5.9.9新建vs项目报错MSB4019 未找到导入的项目QtMsBuild\Qt.prop 报错解决方案: 由QtMsBuild导致的问题不需要像其他博客里说的那样各种环境变量配置,以及大费周章去查看一些系统的东西。 第一步: 只需要将…...
网络安全推荐的视频教程 网络安全系列
第一章 网络安全概述 1.2.1 网络安全概念P4 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 1.2.3 网络安全的种类P5 (1…...
什么是Embedding、RAG、Function calling、Prompt engineering、Langchain、向量数据库? 怎么使用
什么是Embedding、RAG、Function calling、Prompt engineering、Langchain、向量数据库? 怎么使用 目录 什么是Embedding、RAG、Function calling、Prompt engineering、Langchain、向量数据库? 怎么使用Embedding(嵌入)RAG(检索增强生成)Function calling(函数调用)Pr…...
基于Python的深度学习音乐推荐系统(有配套论文)
音乐推荐系统 提供实时音乐推荐功能,根据用户行为和偏好动态调整推荐内容 Python、Django、深度学习、卷积神经网络 、算法 数据库:MySQL 系统包含角色:管理员、用户 管理员功能:用户管理、系统设置、音乐管理、音乐推荐管理、系…...
长文档处理痛点:GPT-4 Turbo引文提取优化策略与替代方案讨论
引言 随着GPT-4 Turbo的发布,其支持的128K上下文窗口(约300页文本)被视为处理长文本的突破性升级。然而,实际应用中,用户发现模型在提取长文档中的引文时存在显著缺陷:文档前三分之一的引文数量远多于中间…...
javacv将mp4视频切分为m3u8视频并播放
学习链接 ffmpeg-demo 当前对应的 gitee代码 Spring boot视频播放(解决MP4大文件无法播放),整合ffmpeg,用m3u8切片播放。 springboot 通过javaCV 实现mp4转m3u8 上传oss 如何保护会员或付费视频?优酷是怎么做的? - HLS 流媒体加密 ffmpe…...
