Linux环境部署Python Web服务

在这里插入图片描述

“姑娘,再见面就要靠运气了,可别装作不认识,那句“好久不见”可干万别打颤…”

将使用 Python 编写的后端 API 部署到 Linux 环境中,可以按照以下详细步骤操作。本文将涵盖环境准备、API 编写、使用 Gunicorn 作为 WSGI 服务器、配置 Nginx 作为反向代理以及使用 Systemd 管理服务。

1. 准备环境

安装 Python

如果你的 Linux 系统上还没有安装 Python,可以使用以下命令进行安装:

sudo yum update
sudo yum install python3 python3-pip

安装必要的库

假设你使用的是 Flask 或 Django 框架,先安装所需的库:

pip3 install flask  # 如果你使用的是 Flask
pip3 install django  # 如果你使用的是 Django

2. 编写 API 代码

Flask 示例

创建一个简单的 Flask API 示例:

from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/api', methods=['GET'])
def api():return jsonify({'message': 'Hello, World!'})if __name__ == '__main__':app.run(host='0.0.0.0')

Django 示例

创建一个新的 Django 项目并添加 API:

django-admin startproject myproject
cd myproject
django-admin startapp myapp

myapp/views.py 中添加 API 视图:

from django.http import JsonResponse
def api(request):return JsonResponse({'message': 'Hello, World!'})

myproject/urls.py 中配置 URL 路由:

from django.contrib import admin
from django.urls import path
from myapp.views import apiurlpatterns = [path('admin/', admin.site.urls),path('api/', api),
]

3. 方式一——直接启动

想在开发或测试环境中快速启动应用,可以直接运行:

python main.py 或者 nohup python main.py
Django 示例:

Django 有自己的开发服务器,你可以用以下命令启动:

python manage.py runserver 0.0.0.0:8000

生产环境推荐使用 Gunicorn ,为了在生产环境中确保应用的性能和稳定性,建议你使用 Gunicorn ,Gunicorn 作为应用服务器,处理 Python 代码的执行和多进程管理。

4.方式二—— 配置 Gunicorn(生产环境的 WSGI 服务器)

安装 Gunicorn

安装 Gunicorn:

pip3 install gunicorn

运行 Flask 应用

使用 Gunicorn 运行 Flask 应用:

gunicorn --bind 0.0.0.0:8000 app:app

运行 Django 应用

使用 Gunicorn 运行 Django 应用:

gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application

5. 使用 Nginx 作为反向代理

安装 Nginx

安装 Nginx:

sudo yum install nginx

配置 Nginx

编辑配置文件 /etc/nginx/sites-available/default

server {listen 80;server_name your_domain_or_IP;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;}
}

重新加载 Nginx 配置:

sudo systemctl restart nginx

6. 使用 Systemd 管理 Gunicorn

创建 Systemd 服务文件

创建一个新的 Systemd 服务文件:

sudo vim /etc/systemd/system/myproject.service

添加服务配置

Flask 应用
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target[Service]
User=your_user
Group=www-data
WorkingDirectory=/path/to/your/project
ExecStart=/usr/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 app:app[Install]
WantedBy=multi-user.target
Django 应用

ExecStart 行改为:

ExecStart=/usr/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 myproject.wsgi:application

启动并启用服务

启动并启用服务:

sudo systemctl start myproject
sudo systemctl enable myproject

7. 检查服务状态

确保服务正在运行:

sudo systemctl status myproject

这样,你的 Python API 就成功部署到 Linux 环境中了。你可以根据需要调整配置,以适应具体的项目需求。希望这篇详细的指南对你有所帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

磁致伸缩液位计的应用领域

磁致伸缩液位计作为一种高精度、高稳定性的液位测量设备,在众多行业中都有着广泛的应用。接下来,我们将从多个角度详细探讨磁致伸缩液位计在不同领域的应用情况。 石油化工行业 在石油化工行业中,磁致伸缩液位计主要用于储罐、反应器和管道等…

celery执行任务报错ValueError: not enough values to unpack

背景 在做用户注册模块的时候需要对手机号验证的过程进行优化,目前想到的方式是通过celeryrabbitmq的方式进行异步处理,选择使用celery是因为使用方便、性能好、可分布式部署。 环境信息 目前使用地win11容器化启动 rabbitmq:3.13.2 python:3.6.8 cel…

Linux学习看这一篇就够了,超超超牛的Linux基础入门

引言 小伙伴们,不管是学习c还是学习其他语言在我们学的路上都绕不过操作系统,而且,老生常谈的Linux更是每个计算机人的必修,那么我们对Linux的了解可能只是从别人那听到的简单的这个系统很牛,巴拉巴拉的,但…

STM32介绍

本内容是基于江协科技STM32视频学习之后,并参考【重写】简析stm32启动过程-CSDN博客和STM32 最小系统_stm32最小系统-CSDN博客以及其他资料综合整理而成。 1. STM32 1.1 STM32简介 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器;STM32常应用在…

【python学习】快速了解python基本数据类型

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言1. 整数(int)2. 浮点数(float)3. 布尔值(bool&#xf…

[个人感悟] 消息队列应该考察哪些问题?

前言 消息队列. 不论是Java内部提供的LinkedBlockingQueue, 还是当下主流的中间件RabbitMQ, Kafka, RockMQ. 其本质上都是一个削峰填谷的工具. 我们都知道, 请求和流量都有可能瞬间很高, 或者很低. 所以, 很多时候, 我们需要请求存储起来, 或者使用异步的方式, 来匀速的处理过…

Qt QWizard新建向导实例

使用QWizard做新建向导,最简单的实例 class MyWizard : public QWizard { public: MyWizard(QWidget* parent nullptr); QWizardPage* createFirstPage(); QWizardPage* createSecondPage(); QWizardPage* createThirdPage(); }; MyWizard::MyWizard(QWidget* par…

python 10个自动化脚本

目录 🌟 引言 📚 理论基础 🛠️ 使用场景与代码示例 场景一:批量重命名文件 场景二:自动下载网页内容 场景三:数据清洗 场景四:定时执行任务 场景五:自动化邮件发送 场景六…

AI实时免费在线图片工具6:以图生相似图

1、以图生图,生成相似图 https://huggingface.co/spaces/diffusers/unofficial-SDXL-Turbo-i2i-t2i 间接实现:可以是图片先提取描述,再通过描述再去生成新图片 https://huggingface.co/spaces/gokaygokay/KolorsPlusPlus

徒手绘制 Android 通用进度条

拖动条&#xff08;FlexSeekBar&#xff09;&#xff0c;在Android的各个地方都非常常用&#xff0c;本文旨在自研一套通用的进度条&#xff0c;非常适合车载App使用 样式如下&#xff1a; 使用示例 <!--默认用法--> <com.max.android.ui.seekbar.FlexSeekBarandroi…

思路打开!腾讯造了10亿个角色,驱动数据合成!7B模型效果打爆了

世界由形形色色的角色构成&#xff0c;每个角色都拥有独特的知识、经验、兴趣、个性和职业&#xff0c;他们共同制造了丰富多元的知识与文化。 所谓术业有专攻&#xff0c;比如AI科学家专注于构建LLMs,医务工作者们共建庞大的医学知识库&#xff0c;数学家们则偏爱数学公式与定…

Unity 实现UGUI 简单拖拽吸附

获取鼠标当前点击的UI if(RectTransformUtility.RectangleContainsScreenPoint(rectTransform, Input.mousePosition)) {return rectTransform.gameObject; } 拖拽 在Update 中根据鼠标位置实时更新拖拽的图片位置。 itemDrag.transform.position Input.mousePosition; …

《安全行业大模型技术应用态势发展报告(2024)》

人工智能技术快速迭代发展&#xff0c;大模型应用场景不断拓展&#xff0c;随着安全行业对人工智能技术的应用程度日益加深&#xff0c;大模型在网络安全领域的应用潜力和挑战逐渐显现。安全行业大模型技术的应用实践不断涌现&#xff0c;其在威胁检测、风险评估和安全运营等方…

秋招突击——7/5——复习{}——新作{跳跃游戏II、划分字母区间、数组中的第K个大的元素(模板题,重要)、前K个高频元素}

文章目录 引言正文贪心——45 跳跃游戏II个人实现参考实现 划分字母区间个人实现参考实现 数组中的第K个最大元素个人实现参考做法 前K个高频元素个人实现参考实现 总结 引言 今天就开始的蛮早的&#xff0c;现在是九点多&#xff0c;刚好开始做算法&#xff0c;今天有希望能够…

方圆资源网,方圆资源官网

在当今这个信息化高速发展的时代&#xff0c;方圆资源网络已成为推动社会进步、促进经济发展的重要力量。方圆资源网不仅汇聚了海量的信息资源&#xff0c;更为我们提供了一个高效、便捷的信息交流平台。本文旨在详细介绍资源网的概念、特点、功能以及其在现代社会中的重要意义…

理解算法复杂度:空间复杂度详解

引言 在计算机科学中&#xff0c;算法复杂度是衡量算法效率的重要指标。时间复杂度和空间复杂度是算法复杂度的两个主要方面。在这篇博客中&#xff0c;我们将深入探讨空间复杂度&#xff0c;了解其定义、常见类型以及如何进行分析。空间复杂度是衡量算法在执行过程中所需内存…

【python爬虫实战】进阶天气虫虫(过程复盘 心得分享)

程序设计过程里的一些心得&#xff1a; 0. 规模较大的程序&#xff0c;往往都是以更小的功能块搭建起来的。如此&#xff0c;为了提升总体程序的构建效率&#xff0c; 笔者发现分“两步走”会比较高效&#xff1a; A. 遇到需要反复调试的功能块&#xff0c;可先在另一程序中逐…

植物大战僵尸融合嫁接版 MAC 版本下载安装详细教程

继植物大战僵尸杂交版火了之后&#xff0c;PVZ改版可谓是百花齐放&#xff0c;最近又有一个非常好玩的模式被开发出来了&#xff0c;他们称为《植物大战僵尸融合嫁接版》 该版本并没有对植物卡牌做改动&#xff0c;而是可以将任意两种植物叠放到一起进行融合&#xff0c;产生新…

玲珑大爆料!deepin Meetup(上海站)议程抢先看!

Linux软件生态正迎来一场革命&#xff0c;随着软件数量的激增&#xff0c;传统的包管理系统逐渐暴露出依赖性强、兼容性差、安全性不足等问题。“玲珑”是一种新型的独立包管理工具集&#xff0c;通过先进的隔离技术和分层管理&#xff0c;为应用提供了一个安全、稳定、高效的运…