Python Web项目的服务器部署
一.部署运行
1.虚拟环境的安装:(一行一行运行)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
bash miniconda.sh -b -p /opt/miniconda3
echo 'export PATH="/opt/miniconda3/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
conda init bash
source ~/.bashrc
conda config --set auto_activate_base false
2. 系统依赖安装:(一行一行运行)
sudo yum update -y
sudo yum install -y epel-release
sudo yum install -y gcc gcc-c++ make
sudo yum install -y mariadb-server mariadb-devel nginx
sudo yum install -y git wget unzip
sudo yum install -y cairo-devel freetype-devel libpng-devel libjpeg-devel
3.项目环境安装:(灵活修改,以下参考)
mkdir -p /var/www/ershouche
cd /var/www/ershouche
conda create -n ershouche_env python=3.8 -y
conda activate ershouche_env
cat > requirements.txt << 'EOF'
# Web framework
flask>=2.0.1,<2.1.0
Werkzeug>=2.0.1,<2.1.0
Jinja2>=3.0.1,<3.1.0
itsdangerous>=2.0.1,<2.1.0
MarkupSafe>=2.0.1,<2.1.0
# Database
pymysql>=1.0.2
dbutils>=3.0.3
# Data processing and visualization
numpy>=1.20.0,<1.23.0
pandas>=1.3.0,<1.4.0
matplotlib>=3.4.0,<3.5.0
wordcloud>=1.8.1
statsmodels>=0.13.0,<0.14.0
# Web scraping
beautifulsoup4>=4.9.0
selenium>=3.141.0,<4.1.0
requests>=2.25.0,<2.27.0
lxml>=4.6.0
# Tools
python-dotenv>=0.19.0
pillow>=8.3.0
# WSGI server
gunicorn>=20.1.0
EOF
conda install -c conda-forge -y numpy pandas matplotlib pillow statsmodels lxml
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
4.安装宝塔(上传文件,配置数据库等方便)
通用安装脚本:
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec
上传文件略,数据库可以:
mysql -uroot -p
SELECT User, Host FROM mysql.user;
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
navicat连接搞定。
5.直接运行项目:
5.项目运行
conda activate ershouche_env
cd py脚本启动目录
python app.py
二.性能优化
方案:
软件:Supervisor、Nginx
python库:Gunicorn、Gevent

vim pro.sh
#!/bin/bash# 启用调试模式
set -e# 获取用户输入
read -p "请输入服务器IP地址: " SERVER_IP
read -p "请输入项目工作目录: " WORK_DIR
echo "请输入项目启动命令(以EOF结束):"
RUN_COMMAND=""
while IFS= read -r line; do[[ $line == "EOF" ]] && breakRUN_COMMAND+="$line"$'\n'
done# 提取工作目录的最后一个目录名
PROJECT_NAME=$(basename "$WORK_DIR")# 安装必要的软件包
echo "安装必要的软件包..."
sudo yum install -y epel-release
sudo yum update -y
sudo yum install -y nginx supervisor# 安装 Python 包
echo "安装 Python 包..."
pip install gunicorn gevent# 配置 Gunicorn
echo "配置 Gunicorn..."
cat > $WORK_DIR/gunicorn_config.py << EOF
bind = "127.0.0.1:8000"
workers = 4
worker_class = "gevent"
worker_connections = 1000
timeout = 120
loglevel = "debug"
errorlog = "/var/log/$PROJECT_NAME/gunicorn_error.log"
accesslog = "/var/log/$PROJECT_NAME/gunicorn_access.log"
capture_output = True
EOF# 创建日志目录
sudo mkdir -p /var/log/$PROJECT_NAME
sudo chown -R $(whoami):$(whoami) /var/log/$PROJECT_NAME# 创建启动脚本
echo "创建启动脚本..."
cat > $WORK_DIR/start.sh << EOF
#!/bin/bash
cd $WORK_DIR
$RUN_COMMAND
EOF
chmod +x $WORK_DIR/start.sh# 配置 Supervisor
echo "配置 Supervisor..."
sudo tee /etc/supervisord.d/$PROJECT_NAME.ini << EOF
[program:$PROJECT_NAME]
command=$WORK_DIR/start.sh
directory=$WORK_DIR
user=root
autostart=true
autorestart=true
startsecs=10
startretries=3
stopwaitsecs=10
killasgroup=true
stopasgroup=true
redirect_stderr=true
stdout_logfile=/var/log/$PROJECT_NAME/supervisor_stdout.log
stderr_logfile=/var/log/$PROJECT_NAME/supervisor_stderr.log
EOF# 配置 Nginx
echo "配置 Nginx..."
sudo tee /etc/nginx/conf.d/$PROJECT_NAME.conf << EOF
server {listen 80;server_name $SERVER_IP;access_log /var/log/nginx/$PROJECT_NAME_access.log;error_log /var/log/nginx/$PROJECT_NAME_error.log;location /static {alias $WORK_DIR/static;expires 30d;}location / {proxy_pass http://127.0.0.1:8000;proxy_set_header Host \$host;proxy_set_header X-Real-IP \$remote_addr;proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto \$scheme;proxy_connect_timeout 60s;proxy_read_timeout 60s;proxy_send_timeout 60s;}
}
EOF# 启动服务
echo "启动服务..."
sudo systemctl restart supervisord
sudo systemctl enable supervisord
sudo systemctl restart nginx
sudo systemctl enable nginx# 检查服务状态
echo "检查服务状态..."
sudo supervisorctl status $PROJECT_NAME
sudo systemctl status nginxecho "部署完成!您可以通过 http://$SERVER_IP 访问您的应用。"
三. 其他操作
端口占用的处理:找到占用端口杀死它。
比如80:
sudo lsof -i :80
sudo kill <PID>
终止特定命令行启动的进程
ps aux | grep "python app.py"
pkill -f "python app.py"
注意事项
- 权限要求:操作系统资源(如低端口号)通常需
sudo。- 精确终止:优先用
kill+ PID(避免pkill/fuser误杀)。- 网络分析:
lsof -i比netstat更详细(支持显示远程 IP)。- 风险控制:
fuser -k和pkill -f可能影响其他进程,建议先确认匹配结果。
相关文章:
Python Web项目的服务器部署
一.部署运行 1.虚拟环境的安装:(一行一行运行) wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh bash miniconda.sh -b -p /opt/miniconda3 echo export PATH"/opt/miniconda3/bin:$PAT…...
[项目]基于FreeRTOS的STM32四轴飞行器: 八.遥控器摇杆
基于FreeRTOS的STM32四轴飞行器: 八.遥控器摇杆 一.摇杆数据的扫描二.处理摇杆数据三.微调按键处理 一.摇杆数据的扫描 下面摇杆初始化时,启动了ADC-DMA进行了采集,已经开始转换直接将数据通过DMA存入buff数组中: static uint16_t buff[4] …...
附下载 | 2024 OWASP Top 10 基础设施安全风险.pdf
《2024 OWASP Top 10 基础设施安全风险》报告,由OWASP(开放网络应用安全项目)发布,旨在提升企业和组织对基础设施安全风险、威胁与漏洞的意识,并提供高质量的信息和最佳实践建议。报告列出了2024年最重要的10大基础设施…...
Pytorch的一小步,昇腾芯片的一大步
Pytorch的一小步,昇腾芯片的一大步 相信在AI圈的人多多少少都看到了最近的信息:PyTorch最新2.1版本宣布支持华为昇腾芯片! 1、 发生了什么事儿? 在2023年10月4日PyTorch 2.1版本的发布博客上,PyTorch介绍的beta版本…...
C语言操作MySQL从入门到精通
大家好,我是 V 哥。今天给大家整理的内容是关于使用 C 语言操作 MySQL 数据库的详细介绍,从入门到精通,并配有案例代码和注释,帮助小白快速上手。 基本操作 1. 环境准备 在开始之前,你需要安装 MySQL 数据库和 MySQ…...
【从零开始学习计算机科学】编译原理(五)语法制导翻译
【从零开始学习计算机科学】编译原理(五)语法制导翻译 语法制导翻译语法制导定义SDDSDD的求值顺序两类重要的SDD语法制导的翻译方案SDTSDT的实现L属性定义的SDT左递归翻译方案语法制导翻译 语法表述的是语言的形式,或者说是语言的样子和结构。而程序设计语言中另一方面,是…...
uniapp uview 1.0 跨域h5配置多个代理、如何请求接口
参考文章:uniapp uView1.0跨域h5配置多个代理 官方手册:http 请求 项目中使用: 参考其他博主的文章是在manifest.json中配置代理,但在官方的手册中是直接在script请求的,我尝试请求了下没问题,上线后也不…...
化工厂防爆气象站:为石油化工、天然气等领域提供安全保障
【TH-FB02】在石油化工、天然气等高危行业中,安全生产是至关重要的。这些行业常常面临着易燃易爆、有毒有害等潜在风险,因此,对气象条件的监测和预警显得尤为重要。化工厂防爆气象站作为一种专门设计用于这些特殊环境的气象监测设备ÿ…...
Android Glide 缓存模块源码深度解析
一、引言 在 Android 开发领域,图片加载是一个极为常见且关键的功能。Glide 作为一款被广泛使用的图片加载库,其缓存模块是提升图片加载效率和性能的核心组件。合理的缓存机制能够显著减少网络请求,降低流量消耗,同时加快图片显示…...
Mac安装Neo4j图数据库
通过Homebrew 安装(推荐) 打开mac终端: 1. 安装 Homebrew(如果尚未安装) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"2. 安装 Neo4j brew insta…...
《A Gentle Introduction to Graph Neural Networks》-GNN的综述性论文
目录 一、什么数据可以表示成一张图 (1)什么是图? (2)如何表示图的属性 (3)images as graphs(将图片表示为图) (4)text as graphs(…...
[023-01-40].第40节:组件应用 - OpenFeign与 Sentinel 集成实现fallback服务降级
SpringCloud学习大纲 一、需求说明: 需求1:通过fallback属性进行统一配置 a.问题分析: 1.需要实现cloudalibaba-consumer-nacos-order83模块通过OpenFeign调用cloudalibaba-provider-payment9001 83服务通过OpenFeign调用 9001微服务&…...
设计模式-结构型模式-装饰器模式
概述 装饰器模式 : Decorator Pattern : 是一种结构型设计模式. 作用 : 允许你动态地给对象添加功能或职责,而无需修改其原始类的代码,非常的符合 开闭原则。 实现思路 :通过创建一个包装对象(即装饰器),来…...
RK3588 编译 openssl
在编译 OpenSSL 时,你需要确保你的系统环境已经配置好了所有必要的依赖和编译工具。下面是一般步骤和一些常见问题的解决方案,特别是在使用 RK3588 这类的 ARM 处理器上。 1. 安装依赖 首先,你需要安装编译 OpenSSL 所需的依赖。这通常包括编译器(如 GCC)、make 工具、Per…...
Git前言(版本控制)
1.Git 目前世界上最先进的分布式版本控制系统。 git官网:https://git-scm.com/ 2.版本控制 2.1什么是版本控制 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容修改历史,方便查看更改历史记录备份以便恢复以前…...
visual studio配置opencv
文章目录 step1 下载opencvstep2 配置包含目录step 3 配置链接器step4 配置环境变量并重启vs2022step5 检查代码 step1 下载opencv 下载 opencv-4.8.0-windows.exe https://cloud.189.cn/web/share?codefUnqEb7naUra step2 配置包含目录 step 3 配置链接器 step4 配置环境变…...
docker修改daemon.json文件后无法启动
1.问题描述 使用阿里云docker镜像安装的docker,安装成功后默认可以启动。但是修改daemon.json配置后docker服务无法启动,提示如下错误: 从上图发现,docker服务默认使用阿里docker镜像仓库 2.解决方法 根据提示找到docker服务目…...
Linux网络:网络与操作系统1
本文是介绍网络的基本结构,以及和OS之间有什么关系 OSI七层模型 引入 使用网络是为了解决信息的长距离传送,那就需要解决四个问题: 接收方如何使用数据传输的可靠性主机如何定位数据包在局域网如何转发 人们选择用网络协议(t…...
Manus(一种AI代理或自动化工具)与DeepSeek(一种强大的语言模型或AI能力)结合使用任务自动化和智能决策
一、Manus与DeepSeek差异 十分好奇DeepSeek和Manus究竟谁更厉害些,DeepSeek是知识型大脑,Manus则是全能型执行者。即DeepSeek专注于语言处理、知识整合与专业文本生成。其核心优势在于海量参数支持的深度学习和知识推理能力,例如撰写论文、润…...
Python个人学习笔记(14):函数(匿名函数、内置函数(下)、三元表达式)
九、匿名函数 lambda表达式 语法规则: 变量 lambda 参数1,参数2,…:返回值 例:用lambda简化下述操作 def func(a,b):return ab ret func(1, 2) print(ret)代码: fn lambda a,b:ab print(fn) print(fn(12,13))结果: <fun…...
姚安娜新剧瘦了一圈,《仁心俱乐部》急诊医生顾诗宜在线上岗
《仁心俱乐部》在芒果 TV 播出,湖南卫视金鹰独播剧场也随之播出,这一剧集受到了不少观众的关注。姚安娜在剧中饰演的急诊科医生顾诗宜,她为患者检查身体时动作娴熟,与患者沟通时展现出的耐心和专注,都展现出很高的专业…...
【PyCharm】Python和PyCharm的相互关系和使用联动介绍
李升伟 整理 Python 是一种广泛使用的编程语言,而 PyCharm 是 JetBrains 开发的专门用于 Python 开发的集成开发环境(IDE)。以下是它们的相互关系和使用联动的介绍: 1. Python 和 PyCharm 的关系 Python:一种解释型、…...
【ES6】基础特性总结
概述 仅个人使用,复习ES6的笔记,比较粗糙,仅适用于浏览器端。 数据类型 ES6(ECMAScript 2015)引入了一些新的数据类型和对现有数据类型的扩展。以下是ES6中数据类型的一个简要总结表格: 数据类型描述Nu…...
串口数据记录仪DIY,体积小,全开源
作用 产品到客户现场出现异常情况,这个时候就需要一个日志记录仪、黑匣子,可以记录产品的工作情况,当出现异常时,可以搜集到上下文的数据,从而判断问题原因。 之前从网上买过,但是出现过丢数据的情况耽误…...
无障碍阅读(Web Accessibility)NVDA打开朗读查看器后,enter键不生效的原因
用NVDA测试Web Accessibility时,打开朗读查看器,enter键会无效,而不打开测试器,就没有问题,很大原因是被应用的元素不是可聚焦的,解决方法尝试: 将标签改为可聚焦的语义化标签,如 b…...
基于docker+python+paddleocr构建自己本地化ocr服务
1、使用FastAPI创建服务实例 1.1、正常程序 from fastapi import FastAPI, UploadFile, File, HTTPException from typing import List from paddleocr import PaddleOCR import numpy as np from PIL import Image import io import loggingapp FastAPI(title"游戏截图…...
【视频】V4L2、ffmpeg、OpenCV中对YUV的定义
1、常见的YUV格式 1.1 YUV420 每像素16位 IMC1:YYYYYYYY VV-- UU– IMC3:YYYYYYYY UU-- VV– 每像素12位 I420: YYYYYYYY UU VV =>YUV420P YV12: YYYYYYYY VV UU =>YUV420P NV12: YYYYYYYY UV UV =>YUV420SP(最受欢迎格式) NV21: YYYYYYYY VU VU =>YUV420SP…...
歌词相关实现
歌词相关 歌词数据模型: // Lyric.swift class Lyric: BaseModel {/// 是否是精确到字的歌词var isAccurate:Bool false/// 所有的歌词var datum:Array<LyricLine>! }// LyricLine.swift class LyricLine: BaseModel {/// 整行歌词var data:String!/// 开始…...
51单片机Proteus仿真速成教程——P1-软件与配置+Proteus绘制51单片机最小系统+新建程序模版
前言:本文主要围绕 51 单片机最小系统的绘制及程序模板创建展开。首先介绍了使用 Proteus 绘制 51 单片机最小系统的详细步骤,包括软件安装获取途径、工程创建、器件添加(如单片机 AT89C51、晶振、电容、电阻、按键等)、外围电路&…...
使用 pytesseract 进行 OCR 识别:以固定区域经纬度提取为例
引言 在智能交通、地图定位等应用场景中,经常会遇到需要从图像中提取经纬度信息的需求。本篇文章将介绍如何利用 Python 的 pytesseract 库结合 PIL 对图像进行预处理,通过固定区域裁剪,来有效地识别出图像上显示的经纬度信息。 1. OCR 与 …...
