【保姆级】Python项目部署到Linux生产环境(uwsgi+python+flask+nginx服务器)

news2024/12/24 21:33:36

1.安装python

我这里是3.9.5版本

安装依赖:

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y

根据自己的需要下载对应的python版本:

cd /usr/local
wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz

 解压 > 编译 > 安装

tar -xvf Python-3.9.5.tgz
cd /usr/local/Python-3.9.5
./configure
make all
make install

Python解释器配置清华源:

pip3.9 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/

2.虚拟环境配置

1)安装 virtualenv

pip3.9 install virtualenv

2)创建虚拟环境(一般是一个项目一个虚拟环境)

mkdir home/python_item/envs
cd /home/python_item/envs/
virtualenv /home/python_item/envs/tender --python=python3.9

3)激活虚拟环境

source  /home/python_item/envs/tender/bin/activate

4)安装项目依赖

cd /home/python_item/tender_project #进入项目目录

pip3.9 install flask
pip3.9 install lxml
pip3.9 install pymysql
pip3.9 install requests

3、uwsgi安装

1)安装uwsgi

激活虚拟环境,在虚拟环境中安装
source  /home/python_item/envs/tender/bin/activate
pip install uwsgi

2)基于uwsgi配置文件的方式运行flask项目

[uwsgi]
    socket = 127.0.0.1:8001  
    chdir = /home/python_item/tender_project 
    wsgi-file = main.py 
    callable = app 
    processes = 1 
    virtualenv = /home/python_item/envs/tender/ 

3)启动项目

uwsgi --ini tender_test.ini

报错:

(tender) [root@node1 tender_project]# uwsgi --ini tender_test.ini
[uWSGI] getting INI configuration from tender_test.ini
*** Starting uWSGI 2.0.26 (64bit) on [Tue Jul 16 15:30:21 2024] ***
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-44) on 16 July 2024 07:24:56
os: Linux-3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022
nodename: node1
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 8
current working directory: /home/python_item/tender_project
detected binary path: /home/python_item/envs/tender/bin/uwsgi
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
chdir() to /home/python_item/tender_project
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 7787
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address 127.0.0.1:8001 fd 3
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
Python version: 3.9.5 (default, Jul 16 2024, 15:00:56)  [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
PEP 405 virtualenv detected: /home/python_item/envs/tender/
Set PythonHome to /home/python_item/envs/tender/
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x27abcc0
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72920 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
Traceback (most recent call last):
  File "main.py", line 7, in <module>
    from common import WebInfoFactory
  File "/home/python_item/tender_project/./common.py", line 2, in <module>
    import requests
  File "/home/python_item/envs/tender/lib/python3.9/site-packages/requests/__init__.py", line 43, in <module>
    import urllib3
  File "/home/python_item/envs/tender/lib/python3.9/site-packages/urllib3/__init__.py", line 42, in <module>
    raise ImportError(
ImportError: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fips  26 Jan 2017'. See: https://github.com/urllib3/urllib3/issues/2168
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 1600, cores: 1)

解决:

urllib3版本不兼容,卸载重装

pip3.9 uninstall urllib3

pip3.9 install urllib3==1.22

重启即可

uwsgi --ini tender_test.ini

nginx

安装:Linux安装Nginx

配置:

    upstream flask {
	server 127.0.0.1:8001 weight=1;
}

    


    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /tenderTest {    
            uwsgi_pass   flask;
            include  /usr/local/nginx/conf/uwsgi_params;
#            index  index.html index.htm;
        }

        location /test/ {
            uwsgi_pass   127.0.0.1:8002;
            include  /usr/local/nginx/conf/uwsgi_params;
#            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

4.访问成功 

5.编写脚本快速重启/停止

reboot.sh

#! /usr/bin/env bash
echo -e "======================wsgi process======================"

ps -ef|grep tender_test.ini |grep -v grep

sleep 0.5

echo -e "======================going to close ======================"

ps -ef | grep tender_test.ini | grep -v grep | awk '{print $2}' | xargs kill -9

sleep 0.5

echo -e "======================check if the kill action is correct ======================"

/home/python_item/envs/tender/bin/uwsgi --ini tender_test.ini & >/dev/null

echo -e "======================started... ======================"

sleep 1

ps -ef | grep tender_test.ini |grep -v grep

 stop.sh

echo -e "======================wsgi process======================"

ps -ef|grep tender_test.ini |grep -v grep

sleep 0.5

echo -e "======================going to close ======================"

ps -ef  |grep tender_test.ini | grep -v grep | awk '{print $2}' | xargs kill -9

sleep 0.5

在项目目录下执行重启或停止,脚本放在下面,根据自己的实际情况进行修改即可

更新权限

chmod 775 reboot.sh

chmod 775 stop.sh 

启动!

./reboot.sh

./stop.sh

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

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

相关文章

洛谷 P1056 [NOIP2008 普及组 T2]:排座椅 ← 贪心算法

【题目来源】https://www.luogu.com.cn/problem/P1056https://www.acwing.com/problem/content/436/【题目描述】 上课的时候总有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的一件事情。 不过&#xff0c;班主任小雪发现了一些有趣的现象&#xff0c…

云动态摘要 2024-07-16

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起&#xff01; [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造&…

【Flask从入门到精通:第十二课:常用模块、蓝图 Blueprint】

常用模块 Faker 文档: https://faker.readthedocs.io/en/master/locales/zh_CN.html 批量生成测试数据: https://github.com/joke2k/faker pip install faker -i https://pypi.douban.com/simple代码&#xff1a; from flask import Flask from flask_sqlalchemy import S…

Nginx介绍、安装、使用

更多优质内容欢迎访问我的个人博客网站&#xff1a;www.zpf0000.com Nginx官网 官网&#xff1a;nginx news 什么是Nginx&#xff1f; Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访…

exif格式及解析库easyexif使用介绍

1. JPEG文件结构和EXIF数据的信息 JPEG文件以字符串"0xFFD8"开头表示图像信息开始,以字符串"0xFFD9"结尾表示图像信息结束。 在JPEG文件头中有一系列"0xFF??"格式的数据段,称为"标识",用来标记JPEG文件的信息段。 0xFFE0-0xFFEF之间…

SQL 获取employees中的first_name

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 现有employee…

在 PostgreSQL 里如何处理数据的存储优化和数据库备份的时间窗口冲突?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 中处理数据存储优化和数据库备份时间窗口冲突 在 PostgreSQL 中处理数据存储优化和数据…

智能测评养号系统:解决效率与成本难题,让测评效率翻倍

各位跨境电商从业者好,我是陈哥。今天我想和大家分享一下关于测评养号系统的一些见解和经验。 近期,不少做测评工作室的朋友向我咨询,希望能找到一种新型的测评养号系统,以解决当前面临的诸多问题,如成本高昂、效率低下、账号纯净度不够、操作不便捷等。 众所周知,测评养号系统…

某客户管理系统Oracle RAC节点异常重启问题详细分析记录

一、故障概述 某日10:58分左右客户管理系统数据库节点1所有实例异常重启&#xff0c;重启后业务恢复正常。经过分析发现&#xff0c;此次实例异常重启的是数据库节点1。 二、故障原因分析 1、数据库日志分析 从节点1的数据库日志来看&#xff0c;10:58:49的时候数据库进程开始…

Qt实现IP地址输入框-自定义控件

在 许多应用程序中&#xff0c;我们经常需要使用IP地址。为了方便用户输入和处理&#xff0c;一个好的解决方案是使用自定义控件。本示例代码使用Qt编写一个名为“IPAddress”的自定义控件来实现IP地址的输入功能。通过使用此控件&#xff0c;用户可以方便地输入和处理IP地址。…

【源码交付】一站式自助数据分析解决方案(JVS-BI):系统架构蓝图

1.引言 JVS-BI是一体化、自助式的数据分析平台&#xff0c;它采用的高度集成化的思路&#xff0c;针对企业级用户&#xff0c;提供集中仓库便捷分析的企业级数据开发套件&#xff0c;解决企业各种需要数据分析的场景&#xff0c;多种数据库、多种业务系统、跨库关联、离线数据…

新版网页无插件H.265播放器EasyPlayer.js如何测试demo视频?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff1b;支持WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#xff0…

【病毒分析】Babyk加密器分析-NAS篇

1.前情提要 继上篇分析了关于Babyk加密器在Windows环境的行为特征&#xff0c;本篇是针对NAS系统的相关分析。 2.总体行为 3.密钥下发&#xff08;Builder.exe) 这里可以通过VS生成了Builder.exe来实现对其Builder过程进行分析&#xff0c;可以看到主要是对这部分文件的处理…

Excel 学习手册 - 精进版(包括各类复杂函数及其嵌套使用)

作为程序员从未想过要去精进一下 Excel 办公软件的使用方法&#xff0c;以前用到某功能都是直接百度&#xff0c;最近这两天跟着哔哩哔哩上的戴戴戴师兄把 Excel 由里到外学了一遍&#xff0c;收获良多。程序员要想掌握这些内容可以说是手拿把掐&#xff0c;对后续 Excel 的运用…

Elastic 线下 Meetup 将于 2024 年 7 月 27 号在深圳举办

2024 Elastic Meetup 深圳站活动&#xff0c;由 Elastic、腾讯、新智锦绣联合举办&#xff0c;现诚邀广大技术爱好者及开发者参加。 时间地点 2024年 7 月 27 日 13:30-18:00 活动地点 中国深圳 南山区海天二路 33 号腾讯滨海大厦 北塔 3 楼多功能厅 ​ 活动流程 14:00-15…

如何轻松统管虚拟化和容器环境?一文了解 SmartX 虚拟化容器融合基础设施

随着越来越多的企业完成应用容器化改造&#xff0c;应用负载的运行环境也变得越来越复杂——近 60% 的企业正在或计划同时采用虚拟化环境和容器环境运行应用系统*&#xff0c;以满足不同业务在性能和敏捷性等方面的不同需求。不过&#xff0c;虚拟化和容器平台通常由不同的厂商…

基于单片机STC89C52和GSM实现的远程拨号开锁设计(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于单片机STC89C52和GSM实现的远程拨号开锁设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 摘要 仿真图 单片机系统流程图 实物图 代码 系统论文 资源下载 摘要 本文介…

汇编教程1

本教程主要教大家如何使用vscode插件编写汇编语言&#xff0c;这样更方便&#xff0c;不用在32位虚拟机中编写汇编语言&#xff0c;后续的汇编实验代码都是使用vscode编写&#xff0c;话不多说&#xff0c;开始教学 安装vscode 如果已经安装过vscode&#xff0c;可以跳过这一…

Spring事务原理、Spring事务传播机制

Spring的EnableTransactionManagement 和Transactional原理 Configuration EnableTransactionManagement public class AppConfig { // 配置类内容 } Service public class MyService { Transactional public void processPayment(Payment payment) { // 这里是业…

聚焦 Navicat 17 新特性 | 数据字典提升数据结构清晰度

随着 Navicat 17 的发布&#xff0c;在业界引起了广泛的共鸣与热议。我们曾深入剖析其众多革新特性&#xff0c;包括模型设计创新与优化、高效的查询与配置、用户界面交互体验再升级&#xff0c;以及它如何原生适配国产 Linux ARM 平台和麒麟操作系统等&#xff0c;这些新特性实…