Python Web项目的服务器部署

news2025/3/13 12:54:43

一.部署运行

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

 

二.性能优化

方案:

软件:SupervisorNginx

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" ]] && break
    RUN_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 nginx

echo "部署完成!您可以通过 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 可能影响其他进程,建议先确认匹配结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[项目]基于FreeRTOS的STM32四轴飞行器: 八.遥控器摇杆

基于FreeRTOS的STM32四轴飞行器: 八.遥控器摇杆 一.摇杆数据的扫描二.处理摇杆数据三.微调按键处理 一.摇杆数据的扫描 下面摇杆初始化时&#xff0c;启动了ADC-DMA进行了采集&#xff0c;已经开始转换直接将数据通过DMA存入buff数组中&#xff1a; static uint16_t buff[4] …

附下载 | 2024 OWASP Top 10 基础设施安全风险.pdf

《2024 OWASP Top 10 基础设施安全风险》报告&#xff0c;由OWASP&#xff08;开放网络应用安全项目&#xff09;发布&#xff0c;旨在提升企业和组织对基础设施安全风险、威胁与漏洞的意识&#xff0c;并提供高质量的信息和最佳实践建议。报告列出了2024年最重要的10大基础设施…

Pytorch的一小步,昇腾芯片的一大步

Pytorch的一小步&#xff0c;昇腾芯片的一大步 相信在AI圈的人多多少少都看到了最近的信息&#xff1a;PyTorch最新2.1版本宣布支持华为昇腾芯片&#xff01; 1、 发生了什么事儿&#xff1f; 在2023年10月4日PyTorch 2.1版本的发布博客上&#xff0c;PyTorch介绍的beta版本…

化工厂防爆气象站:为石油化工、天然气等领域提供安全保障

【TH-FB02】在石油化工、天然气等高危行业中&#xff0c;安全生产是至关重要的。这些行业常常面临着易燃易爆、有毒有害等潜在风险&#xff0c;因此&#xff0c;对气象条件的监测和预警显得尤为重要。化工厂防爆气象站作为一种专门设计用于这些特殊环境的气象监测设备&#xff…

《A Gentle Introduction to Graph Neural Networks》-GNN的综述性论文

目录 一、什么数据可以表示成一张图 &#xff08;1&#xff09;什么是图&#xff1f; &#xff08;2&#xff09;如何表示图的属性 &#xff08;3&#xff09;images as graphs&#xff08;将图片表示为图&#xff09; &#xff08;4&#xff09;text as graphs&#xff08…

[023-01-40].第40节:组件应用 - OpenFeign与 Sentinel 集成实现fallback服务降级

SpringCloud学习大纲 一、需求说明&#xff1a; 需求1&#xff1a;通过fallback属性进行统一配置 a.问题分析&#xff1a; 1.需要实现cloudalibaba-consumer-nacos-order83模块通过OpenFeign调用cloudalibaba-provider-payment9001 83服务通过OpenFeign调用 9001微服务&…

设计模式-结构型模式-装饰器模式

概述 装饰器模式 : Decorator Pattern : 是一种结构型设计模式. 作用 &#xff1a; 允许你动态地给对象添加功能或职责&#xff0c;而无需修改其原始类的代码,非常的符合 开闭原则。 实现思路 &#xff1a;通过创建一个包装对象&#xff08;即装饰器&#xff09;&#xff0c;来…

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&#xff0c;安装成功后默认可以启动。但是修改daemon.json配置后docker服务无法启动&#xff0c;提示如下错误&#xff1a; 从上图发现&#xff0c;docker服务默认使用阿里docker镜像仓库 2.解决方法 根据提示找到docker服务目…

Linux网络:网络与操作系统1

本文是介绍网络的基本结构&#xff0c;以及和OS之间有什么关系 OSI七层模型 引入 使用网络是为了解决信息的长距离传送&#xff0c;那就需要解决四个问题&#xff1a; 接收方如何使用数据传输的可靠性主机如何定位数据包在局域网如何转发 人们选择用网络协议&#xff08;t…

姚安娜新剧瘦了一圈,《仁心俱乐部》急诊医生顾诗宜在线上岗

《仁心俱乐部》在芒果 TV 播出&#xff0c;湖南卫视金鹰独播剧场也随之播出&#xff0c;这一剧集受到了不少观众的关注。姚安娜在剧中饰演的急诊科医生顾诗宜&#xff0c;她为患者检查身体时动作娴熟&#xff0c;与患者沟通时展现出的耐心和专注&#xff0c;都展现出很高的专业…

串口数据记录仪DIY,体积小,全开源

作用 产品到客户现场出现异常情况&#xff0c;这个时候就需要一个日志记录仪、黑匣子&#xff0c;可以记录产品的工作情况&#xff0c;当出现异常时&#xff0c;可以搜集到上下文的数据&#xff0c;从而判断问题原因。 之前从网上买过&#xff0c;但是出现过丢数据的情况耽误…

51单片机Proteus仿真速成教程——P1-软件与配置+Proteus绘制51单片机最小系统+新建程序模版

前言&#xff1a;本文主要围绕 51 单片机最小系统的绘制及程序模板创建展开。首先介绍了使用 Proteus 绘制 51 单片机最小系统的详细步骤&#xff0c;包括软件安装获取途径、工程创建、器件添加&#xff08;如单片机 AT89C51、晶振、电容、电阻、按键等&#xff09;、外围电路&…

使用 pytesseract 进行 OCR 识别:以固定区域经纬度提取为例

引言 在智能交通、地图定位等应用场景中&#xff0c;经常会遇到需要从图像中提取经纬度信息的需求。本篇文章将介绍如何利用 Python 的 pytesseract 库结合 PIL 对图像进行预处理&#xff0c;通过固定区域裁剪&#xff0c;来有效地识别出图像上显示的经纬度信息。 1. OCR 与 …

【51单片机】程序实验15.DS18B20温度传感器

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 开发资料下载链接&#xff1a;http://www.prechin.cn/gongsixinwen/208.html 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 目录 DS18B20介绍主要特性内部结构控制时序初始化时序写时序读时序…

Vue项目上传到GitHub,vscode拉取vue项目更新后推送到GitHub上

1、新建Vue项目 2、在GitHub新建仓库 3、留意建立好仓库后提示的命令 4、进入vue项目目录&#xff0c;在空白处点击鼠标右键选择git bash here 5、输入命令 git init git add . git commit -m "注释内容" 输入之前创建GitHub仓库后记下的代码的第一句 git remote…

InternVL:论文阅读 -- 多模态大模型(视觉语言模型)

更多内容&#xff1a;XiaoJ的知识星球 文章目录 InternVL: 扩展视觉基础模型与通用视觉语言任务对齐1.概述2.InternVL整体架构1&#xff09;大型视觉编码器&#xff1a;InternViT-6B2&#xff09;语言中间件&#xff1a;QLLaMA。3&#xff09;训练策略&#xff08;1&#xff09…

【BUG】类文件具有错误的版本 61.0, 应为 52.0,请删除该文件或确保该文件位于正确的类路径子目录中。

报错&#xff1a; [ERROR] 类文件具有错误的版本 61.0, 应为 52.0 [ERROR] 请删除该文件或确保该文件位于正确的类路径子目录中。 报错截图&#xff1a; 原因&#xff1a;Java 版本和 Spring 不兼容&#xff0c;显示 Spring 版本过高 解决方法 1. 使用更高版本的 J…

康谋应用 | 基于多传感器融合的海洋数据采集系统

在海洋监测领域&#xff0c;基于无人艇能够实现高效、实时、自动化的海洋数据采集&#xff0c;从而为海洋环境保护、资源开发等提供有力支持。其中&#xff0c;无人艇的控制算法训练往往需要大量高质量的数据支持。然而&#xff0c;海洋数据采集也面临数据噪声和误差、数据融合…

双周报Vol.67: 模式匹配支持守卫、LLVM 后端发布、支持 Attribute 语法...多项核心技术更新!

2025-03-10 语言更新 模式匹配支持守卫&#xff08;Pattern Guard&#xff09; 模式守卫可以通过在模式后追加 if ... 的语法结构来指定。有模式守卫的分支只有在被模式匹配的值满足对应模式&#xff0c;并且模式守卫为真的情况下才会执行。如果模式守卫为假&#xff0c;则会…