python基础开发篇3——线上环境部署Django项目

news2024/11/17 21:35:21

文章目录

  • 一、基本了解
  • 二、打包本地项目
  • 三、服务器环境准备
  • 四、安装web服务
    • 4.1 使用uwsgi代理
    • 4.2 使用nginx代理(推荐)
  • 五、部署daphne

一、基本了解

部署思路:

  • Nginx服务接收浏览器的动态请求,再通过uwsgi模块将请求转发给uwsgi服务器,uwsgi服务器通过django处理完后返回给Nginx,Nginx返回用户浏览器展示。
    在这里插入图片描述

使用Nginx代理的优势:

  1. Nginx作为入口可配置安全策略,并且可以为uwsgi提供负载均衡。
  2. Nginx处理静态资源能力强。

二、打包本地项目

1.导出依赖模块列表,只保留本项目需要的模块。

pip3 freeze > requirements.txt

##保留模块。
channels==2.4.0
Django==3.0.5
kubernetes==17.17.0
PyMySQL==1.0.2

在这里插入图片描述
2.将项目目录整体压缩打包上传到线上环境,修改数据库地址。

##指定数据库驱动,添加如下内容。
# devops/__init__.py
import pymysql
pymysql.install_as_MySQLdb()

##这里是修改成mysql数据库,具体以项目实际情况修改。
# vi devops/settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'k8s',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '192.168.161.121',
        'PORT': '3306',
    }
}

3.关闭debug模式和白名单。

# vi devops/settings.py
DEBUG = False   # 调试模式,线上环境不准使用调试模式运行。
ALLOWED_HOSTS = ['*' ]  # 白名单,只允许列表中的ip访问,*代表所有

三、服务器环境准备

1.准备python环境。

yum  -y install zlib-devel libffi-devel mysql-devel openssl-devel gcc gcc-c++ make  python3-devel   pcre-devel
tar zxf Python-3.8.6.tgz 
cd Python-3.8.6/
./configure 
make && make install

2.安装依赖模块列表。

pip3 install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com  --use-feature=2020-resolver

3.准备数据库。

##安装mysql。
docker run -d --name db -p 3306:3306 -v mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 --character-set-server=utf8

docker exec -it db bash
root@e2eff2d75dd2:/# mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "create database k8s;"

##安装redis,用于websocket存储消息,可选,也可存在内存。
docker run --name redis -d -p 6379:6379 redis:3

4.测试问题,同步数据库。

python3 manage.py migrate

5.启动开发环境,验证依赖模块。

python3 manage.py runserver 0.0.0.0:8080 

四、安装web服务

4.1 使用uwsgi代理

1.uWSGI是一个Web服务器,也是Python的一个模块,直接pip安装即可。

pip3 install uwsgi -i https://mirrors.aliyun.com/pypi/simple

2.创建uwsgi配置文件,路径自定义,这里放在项目目录下。

mkdir  -p /opt/devops/uwsgi

cat >> /opt/devops/uwsgi/uwsgi.ini  << EOF
[uwsgi]
# 项目目录
chdir = /opt/devops
# 指定sock的文件路径
socket = /opt/devops/uwsgi/uwsgi.sock
# 指定监听端口
http = 0.0.0.0:8080   ##若使用uWSGI作为代理,则开启此项;若使用nginx代理,则关闭此项。
# 静态资源
static-map = /static=/opt/devops/static
# wsgi文件(django入口)
wsgi-file=devops/wsgi.py
# 进程个数
processes = 4 
# 指定项目的应用
# module = devops.wsgi
# 进程pid
pidfile = /opt/devops/uwsgi/uwsgi.pid
# 日志路径
daemonize = /opt/devops/uwsgi/uwsgi.log
EOF

3.设置系统服务。

cat >> /usr/lib/systemd/system/uwsgi.service  <<EOF
[Unit]
Description=HTTP Interface Server

[Service]
Type=forking
ExecStart=/usr/local/bin/uwsgi --ini /opt/devops/uwsgi/uwsgi.ini
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target
EOF

4.设置开机自启。

systemctl daemon-reload
systemctl start uwsgi
systemctl enable uwsgi

5.确保启用http参数,访问uwsgi服务ip:8080
在这里插入图片描述

4.2 使用nginx代理(推荐)

1.安装。

yum install epel-release –y
yum install nginx –y

2.修改配置文件。

vi /etc/nginx/nginx.conf
......
    server {
        listen       80 default_server;
        server_name  _;

        location / {
           include     uwsgi_params;  # 导入模块用于与uwsgi通信
           uwsgi_pass unix:/opt/devops/uwsgi/uwsgi.sock; 
        }
        # 静态文件目录
        location /static {
           alias /opt/devops/static;
        }
}

3.启动服务。

systemctl start nginx
systemctl enable nginx

##若存在端口占用问题,进入/usr/sbin,使用./nginx命令启动。

4.直接访问Nginx ip。
在这里插入图片描述

五、部署daphne

  • uwsgi和nginx都不能处理websocket请求,需要asgi服务器来处理websocket请求。
  • 官方推荐的asgi服务器是daphne。

1.安装daphne。

pip3 install daphne -i https://mirrors.aliyun.com/pypi/simple

2.在项目配置文件(settings.py)同级配置asgi.py文件内容如下。

import os
import django
from channels.routing import get_default_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'devops.settings')
django.setup()
application = get_default_application()

3.启动daphne服务。

cat >> /usr/lib/systemd/system/daphne.service  << EOF
[Unit]
Description=Django Websocket Server

[Service]
WorkingDirectory=/opt/devops
ExecStart=/usr/local/bin/daphne devops.asgi:application -b 127.0.0.1 -p 8000
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl start daphne
systemctl enable daphne

4.Nginx配置文件增加代理。

......
    server {
        listen       80 default_server;
        server_name  _;

        location / {
           include     uwsgi_params;  # 导入模块用于与uwsgi通信
           uwsgi_pass unix:/opt/devops/uwsgi/uwsgi.sock;
        }
        location ~ /workload/(terminal|container_log) {    ##容器终端、实时日志功能。
           proxy_pass http://127.0.0.1:8000;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
        }
        # 静态文件目录
        location /static {
           alias /opt/devops/static;
        }
}

systemctl restart nginx

5.web查看。
在这里插入图片描述

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

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

相关文章

计算机网络(二):TCP篇

文章目录 1. TCP头部包含哪些内容&#xff1f;2. 为什么需要 TCP 协议&#xff1f; TCP 工作在哪一层&#xff1f;3. 什么是 TCP &#xff1f;4. 什么是 TCP 连接&#xff1f;5. 如何唯一确定一个 TCP 连接呢&#xff1f;6. UDP头部大小是多少&#xff1f;包含哪些内容&#xf…

基于SSM+Vue的鲸落文化线上体验馆设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【NVM】nvm安装教程(nodejs多版本切换)

系列文章 C#底层库–记录日志帮助类 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/124187709 文章目录 系列文章前言一、安装准备1. 1 下载nvm-setup1. 2 卸载掉nodejs 二、安装步骤2.1 欢迎页面2.2 选择nvm安装目录2.3 选择nodejs安装目录2.4 安装…

进程间通信--信号

1&#xff1a;信号 什么是信号&#xff1f; 信号是给程序提供一种可以处理异步事件的方法&#xff0c;它利用软件中断来实现。不能自定义信号&#xff0c;所有信号都是系统预定义的。 信号由谁产生&#xff1f; 1)由shell终端根据当前发生的错误&#xff08;段错误、非法指令…

途虎养车IPO:飞轮效应下的汽车后市场巨头

汽车已经成为了家家户户必不可少的存在。作为消费品来说&#xff0c;汽车更新换代快&#xff0c;日常使用磨损大&#xff0c;随着智能汽车和新能源汽车市场的不断扩大&#xff0c;也给汽车售后服务产线带来了巨大的发展市场。保养以及维修市场的缺口越来越大&#xff0c;也为汽…

简明 SQL 子查询指南:掌握 EXISTS 实现数据筛选

子查询是一种在查询语句内部嵌套另一个完整查询的方式&#xff0c;用于获取更复杂的查询结果或数据过滤。在执行包含子查询的查询时&#xff0c;数据库引擎首先执行子查询&#xff0c;然后将其结果用作外层查询的条件或数据源。 以下两表作为后续SQL语句所用 table1 …

Jmeter系列-并发线程Concurrency Thread Group的介绍(7)

简介 Concurrency Thread Group提供了用于配置多个线程计划的简化方法&#xff0c;该线程组目的是为了保持并发水平&#xff0c;意味着如果并发线程不够&#xff0c;则在运行线程中启动额外的线程Concurrency Thread Group提供了更好的用户行为模拟&#xff0c;因为它使您可以…

AeDet:方位不变的多视图3D物体检测

代码&#xff1a;https://github.com/fcjian/AeDet 项目地址&#xff1a;https://fcjian.github.io/aedet/ 导读&动机 本篇论文探讨了自动驾驶领域中的多视图3D目标检测问题&#xff0c;特别关注了LSS&#xff08;Lift-Splat-Shoot&#xff09;方法的发展&#xff0c;该方法…

模拟实现C语言--strcat函数

模拟实现C语言–strcat函数 文章目录 模拟实现C语言--strcat函数一、strcat函数是什么&#xff1f;二、使用示例二、模拟实现 一、strcat函数是什么&#xff1f; 作用是把源数据追加到目标空间 char * strcat ( char * destination, const char * source );源字符串必须以 ‘…

Springboot整合规则引擎

Springboot整合Drools 规则引擎 1.添加maven 依赖坐标&#xff0c;并创建springboot项目 <!-- drools规则引擎 --> <dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.6.0.Final<…

maven-resources-production:trunk-auth: java.lang.NegativeArraySizeException

ijdea启动auth项目报错&#xff1a; maven-resources-production:trunk-auth: java.lang.NegativeArraySizeException 一直在本地启动不起来&#xff0c;记录下操作步骤 第一步&#xff1a;将ijdea中的缓存都清理掉了&#xff0c;不行 第二步&#xff1a;将maven中的对应项目…

如何将内网ip映射到外网?快解析内网穿透

关于内网ip映射到外网的问题&#xff0c;就是网络地址转换&#xff0c;私网借公网。要实现这个&#xff0c;看起来说得不错&#xff0c;实际上是有前提条件的。要实现内网ip映射到外网&#xff0c;首先要有一个固定的公网IP&#xff0c;可以从运营商那里得到。当你得到公网IP后…

Mybatis动态数据源及其原理

一、引言 作者最近的平台项目需要一个功能&#xff0c;数据库是动态的&#xff0c;sql也是动态的&#xff0c;所以需要动态注入数据源&#xff0c;并且能够在运行过程中进行切换数据库。作者在这里分享一下做法&#xff0c;以及Mybatis这样做的原理。 二、分析 接下来分析一下…

【案例教学】华为云API图引擎服务 GES的便捷性—AI帮助快速处理图片小助手

云服务、API、SDK&#xff0c;调试&#xff0c;查看&#xff0c;我都行 阅读短文您可以学习到&#xff1a;人工智能AI快速处理图片 1 IntelliJ IDEA 之API插件介绍 API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts IDE&#xff0c;基于华为云服务提供…

LeetCode //C - 637. Average of Levels in Binary Tree

637. Average of Levels in Binary Tree Given the root of a binary tree, return the average value of the nodes on each level in the form of an array. Answers within 1 0 − 5 10^{-5} 10−5 of the actual answer will be accepted. Example 1: Input: root [3…

学Python的漫画漫步进阶 -- 第十三步

学Python的漫画漫步进阶 -- 第十三步 十三、图形用户界面13.1 Python中的图形用户界面开发库13.2 安装wxPython13.3 第一个wxPython程序13.4 自定义窗口类13.5 在窗口中添加控件13.6 事件处理13.7 布局管理13.7.1 盒子布局管理器13.7.2 动动手——重构事件处理示例13.7.3 动动手…

赴日开发工程师工作怎么找?

想要做赴日开发工作的途径有一下几种&#xff1a;一个是自己去联系日本的企业&#xff0c;当然这种的前提是你日语完全没有问题&#xff0c;但是现在很少有企业愿意直接与求职人员沟通。第二个就是你有IT技术&#xff0c;但是不会日语&#xff0c;年纪不大的可以来日本读个学校…

单目标追踪——【工具】汉明窗(Hamming window)

目录 汉明窗&#xff08;Hamming window&#xff09;原理作用代码实例可视化总结 汉明窗&#xff08;Hamming window&#xff09; 原理 汉明&#xff08;Hanning&#xff09;窗可以看成是升余弦窗的一个特例&#xff0c;汉宁窗可以看作是3个矩形时间窗的频谱之和&#xff0c;…

webpack实战:最新QQ音乐sign参数加密分析

文章目录 1. 写在前面2. 接口抓包分析3. 扣webpack代码4. 补浏览器环境5. 验证加密结果 1. 写在前面 现在&#xff01;很多的网站使用Webpack加载和处理JS文件。所以对于使用了Webpack加载的JS代码&#xff0c;一旦它们被打包并在浏览器中执行&#xff0c;通常是难以直接阅读和…

选择正确的开发框架:构建高效、可维护的应用程序

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 引言 在现代软件开发中…