首页 > 其他分享 >生产环境部署Django项目

生产环境部署Django项目

时间:2023-09-05 13:05:10浏览次数:47  
标签:opt http nginx 部署 环境 Django -- k8s uwsgi


生产环境部署Django项目

1、  部署架构



IP地址


安装服务


 

 

172.16.1.251


nginx


uwsgi(sock方式)


docker


mysql5.7


redis5

 

Nginx 前端Web服务,接收到动态请求通过uwsgi模块将请求转发给uwsgi服务器,uwsgi服务器通过django处理完后返回给Nginx,Nginx返回用户浏览器展示。

 

既然uwsgi是一个可以独立部署的服务器,为什么还用Nginx代理?

•          Nginx作为入口可配置安全策略,并且可以为uwsgi提供负载均衡。

•          Nginx处理静态资源能力强

2、将本地开发的项目打包

2.1 导出依赖模块列表


pip3 freeze > requirements.txt

 

2.2 修改数据库为Mysql

 

# vim devops/settings.py
##### 
关闭debug模式和白名单
DEBUG = False
ALLOWED_HOSTS = ['172.16.1.251']
# 
白名单,只允许通过列表中的ip访问django项目,* 代表所有(不建议),默认是127.0.0.1。
 
##### mysql
配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '172.16.1.251',
        'PORT': '3306',
    }
}
 
##### redis
CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'channels_redis.core.RedisChannelLayer',
        'CONFIG': {
            "hosts": [('172.16.1.251', 6379)],
        },
    },
}

3、服务器环境准备

3.1 安装Python3

# yum install zlib-devel libffi-devel mysql-devel -y
# tar -zxvf Python-3.8.6.tgz
# cd Python-3.8.6
# ./configure 
##### ./configure --enable-optimizations 
# make -j 4 && make install
# tar -zxvf Python-3.8.6.tgz

3.2 安装依赖模块列表

# pip3 install -r /root/requirements.txt -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

 

在安装过程中,twisted指定的版本比较新,在仓库里没有,需要单独安装:

 

# yum install bzip2
# tar -jvxf Twisted-20.3.0.tar.bz2
# cd Twisted-20.3.0
# python3 setup.py install
# tar -jvxf Twisted-20.3.0.tar.bz2

 

可能会遇到错误:Can’t connect to HTTPS URL because the SSL module is not available

大致意思是无法使用HTTPS,不能下载相关依赖包。

可能原因:依赖系统openssl的版本低或者系统没有安装

 

安装perl5:

# tar zxvf perl-5.28.0.tar.gz 
# cd perl-5.28.0
# ./Configure -des -Dprefix=/usr/local/perl5
# make -j 4 && make install

 

安装openssl:

# tar zxvf openssl-1.1.1i.tar.gz 
# cd openssl-1.1.1i
# ./config --prefix=/usr/local/openssl 
# make -j 4 && make install
# ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
# ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1


重新编译python:

# cd Python-3.8.6
# ./configure --with-openssl=/usr/local/openssl/
##### ./configure --enable-optimizations --with-openssl=/usr/local/openssl/
# make -j 4 && make install

3.3 安装数据库

MySQL:

# docker run -d --name db -p 3306:3306 -v /mysql/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 test;"
# root@e2eff2d75dd2:/# exit
# docker run -d --name db -p 3306:3306 -v /mysql/mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 --character-set-server=utf8

 

Redis:

# docker run --name redis -d -p 6379:6379 redis:5

 

启动开发环境,验证依赖模块:

# mkdir -p /opt/k8s
# mkdir -p /opt/k8s
# cp -a /root/devops.zip /opt/k8s/
# cd /opt/k8s/
# unzip devops.zip && rm -f devops.zip
# python3 manage.py runserver 0.0.0.0:8080 
 
如果报缺少依赖包,需要再次执行如下命令:
# pip3 install -r /root/requirements.txt -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

 

测试问题,同步数据库:

python3 manage.py migrate

3.4 安装与配置uwsgi

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

 

# pip3 install uwsgi -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

 

创建uwsgi配置文件,路径任意:

# cd /opt/k8s
 
# cat uwsgi.ini
[uwsgi]
# 
项目目录
chdir = /opt/k8s
 
# 
指定sock的文件路径,本地sock访问时使用
socket = /opt/k8s/uwsgi.sock
 
# 
指定监听端口,http远程访问时使用
# http = 0.0.0.0:8080
 
# 
静态资源,uwsgi访问方式时使用
# static-map = /static=/opt/k8s/static
 
# wsgi
文件(django入口)
wsgi-file=devops/wsgi.py
 
# 
进程个数
processes = 4
 
# 
指定项目的应用
# module = devops.wsgi
 
# 
进程pid
pidfile = /opt/k8s/uwsgi.pid
 
# 
日志路径
# daemonize = /opt/k8s/uwsgi.log
# uwsgi
服务以守护进程运行)会导致sytemctl启动时多次重启而导致启动失败,
# 
需要改为如下所配置。
logto = /opt/k8s/uwsgi.log
 
# 
指定启动django项目的用户名和用户组
uid = nginx
gid = nginx

 

将uwsgi加入到systemd中进行管理:

# cat /usr/lib/systemd/system/uwsgi.service
[Unit]
Description=uwsgi server
After=network.target
 
[Service]
WorkingDirectory=/opt/k8s
ExecStart=/usr/local/bin/uwsgi --ini /opt/k8s/uwsgi.ini
ExecStop=/usr/local/bin/uwsgi --stop /opt/k8s/uwsgi.pid
ExecReload=/usr/local/bin/uwsgi --reload /opt/k8s/uwsgi.pid
Restart=on-failure
 
[Install]
WantedBy=multi-user.target
 
# systemctl daemon-reload
[Unit]

3.5 配置Nginx

# yum install nginx -y
# id nginx
uid=997(nginx) gid=993(nginx) groups=993(nginx)
 
# vim /etc/nginx/nginx.conf
server {
        listen       80 default_server;
        server_name  _;
 
        location / {
           include     uwsgi_params;
           # 
导入模块用于与uwsgi通信
           uwsgi_pass unix:/opt/k8s/uwsgi.sock;
           # uwsgi_pass http://172.16.1.251:8080;
        }
 
        # 
静态文件目录
        location /static {
           alias /opt/k8s/static;
        }
   }
 
# nginx -t
# id nginx

3.6 赋权

# chown -R nginx.nginx /opt/k8s/

3.7 启动

# systemctl restart uwsgi.service
# systemctl enable uwsgi.service
 
# systemctl restart nginx.service
# systemctl enable nginx.service
 

 
 
访问测试
http://172.16.1.251
# systemctl enable uwsgi.service

3.8 uwsgi补充说明

uwsgi
类似于php-fpm,可以单独配置在一台服务器上,可以通过socket本地访问(性能高),也可以通过http的方式远程进行访问,既能处理动态请求也能处理静态请求。
 
如下配置选项可以通过nginx代理服务进行本地访问:uwsgi_pass unix:/opt/k8s/uwsgi.sock;
# 
指定sock的文件路径,本地sock访问时使用
socket = /opt/k8s/uwsgi.sock
 
如下配置选项可以通过nginx代理服务进行http访问:uwsgi_pass http://172.16.1.251:8080;
# 
指定监听端口,http远程访问时使用
http = 0.0.0.0:8080
 
如下配置选项可以通过uwsgi http方式进行访问:http://172.16.1.251:8080/
# 
指定监听端口,http远程访问时使用
http = 0.0.0.0:8080
# 
静态资源,uwsgi访问方式时使用
static-map = /static=/opt/k8s/static


标签:opt,http,nginx,部署,环境,Django,--,k8s,uwsgi
From: https://blog.51cto.com/u_11409186/7370614

相关文章

  • Django中创建项目步骤
    step1:创建一个文件夹projectstep2:进入cmd,进入该文件夹cdE:/pythoncode/projectstep3:创建Django项目,该项目名称为“project_name”django-adminstartprojectproject_name创建成功......
  • Docker 部署 Jenkins 构建 SpringBoot 工程发布镜像
    说明全部都基于Docker服务搭建使用,首先用Docker安装Jenkins环境,Docker安装GitLab版本管理系统,执行Jenkins拉取指定版本tag进行编译构建,在用SonarQube进行代码质量检测,在打包制作镜像,发布到Harbor镜像仓库,最后启动SpringBoot工程并进行访问。系统平台CentOSLinu......
  • 软件测试|Django 入门:构建Python Web应用的全面指南
    引言Django是一个强大的PythonWeb框架,它以快速开发和高度可扩展性而闻名。本文将带您深入了解Django的基本概念和核心功能,帮助您从零开始构建一个简单的Web应用。什么是Django?Django是一个基于MVC(模型-视图-控制器)设计模式的Web框架,旨在简化Web应用程序的开发过程。它由Django软......
  • Jeecg Boot低代码平台部署手册
    1、前端1.1基础环境安装1.1.1安装Node.js如果您电脑未安装Node.js,请安装它。验证#出现相应npm版本即可npm-v#出现相应node版本即可node-v如果你需要同时存在多个node版本,可以使用Nvm或者其他工具进行Node.js进行版本管理;node版本过于超前也可能会出现问题。1.1.2.pnpm安......
  • 云计算环境中高性能计算的挑战与对策
    文章目录云计算中的高性能计算挑战1.资源竞争:2.网络延迟:3.数据传输效率:4.虚拟化开销:5.节点异构性:高性能计算在云计算环境中的对策1.定制化虚拟机镜像:2.弹性资源调整:3.高效数据传输:4.任务并行度:未来发展和展望1.边缘计算的结合:2.量子计算的应用:3.智能任务调度:结论......
  • 虚拟机部署gitlab 接口502 含泪做笔记 ==> /var/log/gitlab/nginx/gitlab_error.log <
    行不通勿喷,谢谢!!**虚拟机部署gitlab接口502**gitlab-ctltail查看具体报错信息:==>/var/log/gitlab/nginx/gitlab_error.log<==2023/09/0416:45:44[crit]42817#0:*2connect()tounix://var/opt/gitlab/gitlab-rails/sockets/gitlab.socketfailed(13:Permissionde......
  • 视频监控管理平台EasyCVR部署后无法正常启用是什么问题?该如何解决?
    安防监控/视频监控/视频汇聚平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,视频云存储/安防监控汇聚平台EasyCVR支持多种播放协议,包括:HLS、HTTP-FLV、WebSocket-FLV、WebRTC、RTSP、RTMP,并且支持对外分享,平台可支持1、4、9、16......
  • 你折腾一天都装不上的插件,函数计算部署 Stable Diffusion 都内置了
    在进行函数计算StableDiffusion答疑的过程中,遇到很多同学在装一些插件的过程中遇到了难题,有一些需要安装一些依赖,有一些需要写一些代码,很多时候安装一个插件就能折腾几天,我们收集了很多同学需要的插件,这一次把比较难装的StableDiffusion插件都装好了。可以根据自己的需要自......
  • 视频汇聚/视频云存储/视频监控管理平台EasyCVR部署后无法正常启用是什么问题?该如何解
    安防监控/视频监控/视频汇聚平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,视频云存储/安防监控汇聚平台EasyCVR支持多种播放协议,包括:HLS、HTTP-FLV、WebSocket-FLV、WebRTC、RTSP、RTMP,并且支持对外分享,平台可支持1、4、9、1......
  • Python-Virtualenv虚拟环境
    一.为何需要之前我们安装python第三方库时,都是直接通过pipinstallxx的方式进行安装的,这样会使第三方库直接安装到Python系统环境中,同时默认安装的都是最新版本的第三方库 这样安装会存在一个问题:如果用Django1.10.x开发了一个网站,同时有一个用Django0.9开发的旧项目需要......