生产环境部署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

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

可能会遇到错误: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

Redis:

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

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

# 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

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

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

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

生产环境部署Django项目的更多相关文章

  1. k8s-生产环境部署django项目k8s-dashboard管理系统

    1. k8s-生产环境部署django项目k8s-dashboard管理系统 gitee地址: https://gitee.com/scajy/django-k8s-dashboard.git 部署架 ...

  2. Django + Uwsgi + Nginx 的生产环境部署

    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归 ...

  3. ubuntu Django + Uwsgi + Nginx 的生产环境部署

    一.概述 使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇 ...

  4. 学习项目部署Django+uwsgi+Nginx生产环境部署

    绪论 项目生产环境部署,是很重的一个知识点.第一,Django自带的服务器很简陋,由于测试和开发环境尚可,无法用于生产环境,保障安全性和可靠性.以及性能.此外,学习部署方式,还有利于了解生产部署后的项 ...

  5. 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置

    第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本  uwsgi- ...

  6. 10: Django + Uwsgi + Nginx 的生产环境部署

    1.1 一些重要概念 1.Web协议介绍 Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi 1. CGI:  最早的协议 2. FCGI:  比CGI快 ...

  7. Django + Uwsgi + Nginx 的生产环境部署实战

    目录 Django + Uwsgi + Nginx 的生产环境部署实战 安装Uwsgi 一.使用命令来启动django项目 二.使用配置文件来启动我们的Django项目 安装Nginx 配置Nginx ...

  8. 11: Django + gunicorn + Nginx 的生产环境部署

    1.1 gunicorn介绍   1.Gunicorn 1. Gunicorn是使用Python实现的WSGI服务器, 直接提供了http服务, 并且在woker上提供了多种选择, gevent, e ...

  9. Django+Nginx+uWSGI生产环境部署

    生产环境中的数据流 参考文档: wsgi详解:https://blog.csdn.net/li_101357/article/details/52748323 wsgi协议介绍(萌新版):https: ...

随机推荐

  1. 如何讓RHEL7/CentOS7開機過程顯示更多資訊

    rhgb選項rhgb用於圖形啟動(graphical boot-up), quiet 而quiet選項可以消除大部分啟動消息. 如何讓RHEL7/CentOS7開機過程顯示更多資訊 Arthur Ch ...

  2. QTableWidget - 基础讲解(2) 样式、右键菜单、表头塌陷、多选等

    转载:https://www.cnblogs.com/zhoug2020/p/3789076.html 在Qt的开发过程中,时常会用到表单(QTableWidget)这个控件,网上的资料不少,但是都是 ...

  3. 强哥CSS学习笔记

    html嵌套css样式:1.外部(推荐)2.内部3.内联(不推荐) css优先级1.内联2.id选择器3.class选择器4.标签 css长度单位:1.px2.em (14px) css选择器:常用选 ...

  4. elasticksearch分词,导致kibana的url出现问题

    在Kibana的展示页面中,我们点击Table的左侧栏,发现Elasticsearch中的数据在展示中是正确的数据,比如:agent中www.baidu.com/test,该界面中会正确的显示为www ...

  5. Docker网络(5)

    一.docker网络介绍 大量的互联网应用服务需要多个服务组件,这往往需要多个容器之间通过网络通信进行相互配合 docker 网络从覆盖范围可分为单个 host 上的容器网络和跨多个 host 的网络 ...

  6. OpenStack neutron vlan 模式下的网络包流向

    时间:2015-01-15 18:09:41 1.什么是Neutron? Neutron是OpenStack的network project ,是NaaS(networking-as-a-servic ...

  7. Linux-SSH介绍与认证方式

    Linux SSH 前言: 在实际的生产环境中,运维人员经常要使用本地的计算机对远程主机进行控制工作,TCP/IP协议提供了两种协议来完成这样的操作,分别为Telnet协议和SSH协议. 由于Teln ...

  8. 为Go项目编写Makefile

    为Go项目编写Makefile 借助Makefile我们在编译过程中不再需要每次手动输入编译的命令和编译的参数,可以极大简化项目编译过程. make介绍 make是一个构建自动化工具,会在当前目录下寻 ...

  9. 多视觉任务的全能: HRNet

    多视觉任务的全能: HRNet HRNet是微软亚洲研究院的王井东老师领导的团队完成的,打通图像分类.图像分割.目标检测.人脸对齐.姿态识别.风格迁移.Image Inpainting.超分.opti ...

  10. C语言编译器开发之旅(二):解析器

    本节是我们这个编译器系列的第二节,进入语法分析与语义分析的部分解.在本节我们会编写一个简单的解析器. 解析器的主要功能分为两个部分: 识别输入的语法元素生成AST(Abstract Syntax Tr ...