宝塔面板使用docker+nginx+gunicorn部署Django项目实战教程

第一步:创建Django项目

  1. 使用pip install django安装创建django项目的依赖
  2. 在电脑某个根目录下执行django-admin startproject app创建一个名为app的Django项目。目录结构如下:
    ├── app
    │ ├── init.py
    │ ├── asgi.py
    │ ├── settings.py
    │ ├── urls.py
    │ └── wsgi.py
    ├── manage.py
    └── templates

第二步:编写测试代码

  1. 在控制台执行python manage.py startapp page创建一个名为page的应用。其目录结构如下:
    ├── app
    │ ├── init.py
    │ ├── asgi.py
    │ ├── settings.py
    │ ├── urls.py
    │ └── wsgi.py
    ├── manage.py
    ├── page
    │ ├── init.py
    │ ├── admin.py
    │ ├── apps.py
    │ ├── migrations
    │ │ └── init.py
    │ ├── models.py
    │ ├── tests.py
    │ └── views.py
    └── templates

  2. 在veiws.py中编写测试代码

from django.shortcuts import render
# Create your views here.
def index(request):return render(request, 'index.html', context={'title': '你好, Django!'})
  1. 在page根目录创建个名为template的文件夹,并在其中创建index.html文件, 输入如下代码:
<!-- index.html -->
{% load static %}
<!doctype html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>测试页面</title>
</head>
<body>  <h2>{{ title }}</h2><img src="{% static 'images/code.jpg' %}" alt="code">
</body>
</html>
  1. 到app目录下的urls.py添加路由映射
# urls.py
from django.contrib import admin
from django.urls import path
from page.views import *
urlpatterns = [path('admin/', admin.site.urls),path('', index, name='index')
]
  1. 到app目录下的settings.py中修改配置
# settings.py
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','page' # 新增之前添加的page应用
]
  1. 创建超级管理员用户
    输入命令python manage.py createsuperuser创建一个超级管理员来管理后台系统
  2. 安装django-simpleui美化后台管理系统,并将其添加到settings.py中的INSTALLED_APPS列表中
pip install django-simpleui
INSTALLED_APPS = ['simpleui', # 添加到第一行用于美化django自带的后台管理系统'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','page'
]

安装完django-simpleui以后需要在控制台执行一下pyhton manage.py migrate命令,才能激活simpleui的样式.
此时我们可以执行命令python manage.py runserver 127.0.0.1:8000看一下页面长什么样。
前台页面:
在这里插入图片描述
后台页面:
在这里插入图片描述
在这里插入图片描述

  1. 收集静态资源
  • 在app根目录创建一个static目录
    在这里插入图片描述

  • 由于需要部署到生产环境,所以这里需要操作一下收集静态资源命令。在此之前我们需要先修改settings.py配置文件。

# 开发模式设成True, 生产模式设成False
DEBUG = False
# 允许访问的主机(已解析的域名或ip地址)
ALLOWED_HOSTS = ['www.xxx.com', 'xxx.com']
# 合法的csrf_trusted. 如不指定, 会导致后台admin页面无法使用
CSRF_TRUSTED_ORIGINS = ['https://www.xxx.com', 'https://xxx.com']# ...此处省略一些默认配置# Static files (CSS, JavaScript, Images)
STATIC_URL = 'static/'
# STATICFILES_DIRS = [
#     os.path.join(BASE_DIR, "static"),    # 开发模式
# ]
STATIC_ROOT = os.path.join(BASE_DIR, "static") # 生产模式
  • 执行命令收集静态资源
python manage.py collectstatic

执行完这句命令后,静态资源会被收集到STATIC_ROOT所指定的目录中(如上图所示),django-simpleui的相关样式文件也会被一并收集到static目录中。如过不执行此操作,项目部署成功上线后,将无法看到图片、css、js等静态资源。

  1. 上述步骤完成后,就可以开始配置docker+nginx+gunicorn相关的配置文件了。

第三步:搭建项目部署所需要的环境和相关配置文件

  1. 生成requirement.txt文件
    由于项目部署到服务器中,需要一个新的python环境,该python环境需要下载本项目所需的依赖,所以需要一个requirements.txt文件。
    执行命令: pip freeze > requirements.txt即可在根目录中生成一个requirements.txt文件
# requirements.txt
asgiref==3.8.1
Django==5.0.4
django-simpleui==2024.4.1
sqlparse==0.5.0
  1. 在app根目录下新建Dockerfile文件, 并加入如下配置:
# Dockerfile
FROM python:3.10# 设置工作目录
WORKDIR /app# 复制项目文件到工作目录
COPY . /app# 设置清华 pip 镜像
ENV PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
ENV PIP_TRUSTED_HOST=pypi.tuna.tsinghua.edu.cn# 安装项目依赖
RUN pip3 install --no-cache-dir -r requirements.txtRUN pip3 install gunicornRUN python3 manage.py makemigrationsRUN python3 manage.py migrate# 设置环境变量
ENV PYTHONUNBUFFERED 1# 设置静态文件的路径
ENV STATIC_ROOT /app/static# 设置 Django 的配置文件环境变量
ENV DJANGO_SETTINGS_MODULE app.settings
  1. 在app根目录下新建docker-compose.yml文件, 并加入如下配置:
# docker-compose.yml
services:web:build: .# ports:#   - "8000:8000"volumes:- gunicorn_sock:/app/var/run  # 挂载 gunicorn_sock 卷到 web 容器的 /app/var/run 目录command: ["gunicorn", "--bind", "unix:/app/var/run/gunicorn.sock", "app.wsgi:application"]   networks:- app-networknginx:image: nginx:latestports:- "80:80"- "443:443" # https默认端口号, 如果不需要则无需此行配置volumes:- ./nginx.conf:/etc/nginx/nginx.conf:ro # ro表示文件只读的意思- ./static:/app/static:ro  # Nginx容器中的静态文件路径- ./certificate.pem:/etc/nginx/ssl/certificate.pem:ro # ssl证书文件(如不需要则可以不要此行配置)- ./private.key:/etc/nginx/ssl/private.key:ro # ssl证书文件(如不需要则可以不要此行配置)- gunicorn_sock:/app/var/run  # 挂载 gunicorn_sock 卷到 nginx 容器的 /app/var/run 目录    depends_on:- webnetworks:- app-network        
# 保证nginx容器和django容器在同一个网络下,否则socket通信会出问题
networks:app-network:driver: bridgevolumes:gunicorn_sock:  # 定义socket共享卷, 保证两个容器都能访问到
  1. 在app根目录下新建nginx.conf配置文件
# nginx.conf
worker_processes auto;  # 使用CPU核心数来设置工作进程的数量events {worker_connections 1024;
}
http {include  mime.types;  # 包含默认的MIME类型文件default_type  application/octet-stream;  # 默认的MIME类型server {listen 80;server_name www.xxx.com; # 改成你的域名location / {return 301 https://$host$request_uri;}}server {listen 443 ssl http2;server_name www.xxx.com;  # 改成你的域名ssl_certificate /etc/nginx/ssl/certificate.pem;ssl_certificate_key /etc/nginx/ssl/private.key;location / {#端口号方式#proxy_pass http://web:8000;#proxy_set_header Host $host;#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 连接到 Gunicorn 套接字proxy_pass http://unix:/app/var/run/gunicorn.sock;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}# 代理django项目中的静态资源location /static/ {alias /app/static/;  # 静态文件的路径;}}
}
  1. 将ssl证书文件复制粘贴到app根目录中(如不启用https则不需要此操作)
    在这里插入图片描述

第四步:进入宝塔面板正式开始部署项目

  1. 将本地的app项目打包成zip文件,上传至宝塔面板的/www/wwwroot目录下并解压。如下图所示:、
  2. 进入到app目录中并打开终端开始执行命令
    在这里插入图片描述
  3. 在宝塔打开的控制台中执行命令
  • 构建镜像:
docker-compose build

等待容器构建完成即可。

  • 运行镜像:
docker-compose up -d

执行完此行命令,就代表我们的项目部署成功了。

接下来我们可以通过命令的方式查看项目是否成功运行中。

  • docker查看正在运行的镜像
docker ps

在这里插入图片描述
我们可以看到,docker容器中有两个正在运行的镜像,一个是nginx:latest,一个是app-web,并且app-web是通过gunicorn的方式部署的。

接下来我们就可以去浏览器中输入ip地址或者已绑定的域名查看项目了。

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

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

相关文章

【海思Hi3516CV610】是面向新一代视频编解码标准、网络安全和隐私保护、人工智能行业应用方面的IPC SoC

海思Hi3516CV610是面向新一代视频编解码标准、网络安全和隐私保护、人工智能行业应用方面的IPC SoC&#xff0c;除了开发普通摄像机&#xff0c;还可以打造极具竞争力的枪球一体机、双目长短焦摄像机产品&#xff1b; 处理器内核: 支持ARM Cortex-A7 MP2 时钟速率950MHz 支持…

90年代女神返港行李失踪 怒斥国泰航空

现年51岁的童爱玲在1993年拍摄电影《火蝴蝶》入行&#xff0c;外形出众的她当年曾与梁朝伟、黎明等男神合作&#xff0c;因而被封为「男神磁石」。虽然童爱玲与台湾富商王敦民结婚诞下一子后&#xff0c;便淡出演艺圈&#xff0c;但她曾在2022年复出拍摄ViuTV剧集《季前赛》&am…

Linux环境部署MySQL

LINUX环境下部署MySQL MySQL官网&#xff1a;https://www.mysql.com/ MySQL是一种关系型数据库管理系统&#xff0c;所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策&#xff0c;分为社区版和商业版&#xff0c;由于其体积小、速度快、总体…

K8s: 在Pod中使用亲和性调度节点

用节点亲和性把 Pods 分配到节点 在 K8s 集群中&#xff0c;如何使用节点亲和性把 Pod 分配到特定节点机器资源各不相同&#xff0c;配置不同&#xff0c;一些应用对配置有要求的需要部署到相关机器上应用场景 场景1: 对读写性能要求较高的pod部署到安装ssd的机器上场景2: 把同…

探索MATLAB在计算机视觉与深度学习领域的实战应用

随着人工智能技术的快速发展&#xff0c;计算机视觉与深度学习已成为科技领域中最热门、最具挑战性的研究方向之一。 它们的应用范围从简单的图像处理扩展到了自动驾驶、医疗影像分析、智能监控行业等多个领域。 在这样的背景下&#xff0c;《MATLAB计算机视觉与深度学习实战…

3D开发工具HOOPS助力CAM软件优化制造流程

在现代制造业中&#xff0c;计算机辅助制造&#xff08;CAM&#xff09;软件的发展已成为提高生产效率和产品质量的关键。为了满足不断增长的需求和日益复杂的制造流程&#xff0c;CAM软件需要具备高效的CAD数据导入、云端协作、移动应用支持以及丰富的文档生成能力。 Tech So…

手机三要素验证不一致的原因有哪些

在当前数字化时代&#xff0c;手机三要素验证已经成为众多业务场景中的关键环节&#xff0c;它是指通过专门的接口技术手段&#xff0c;核实用户提供的姓名、身份证号码及手机号码这三项关键信息的一致性&#xff0c;以确认用户身份的真实性。然而&#xff0c;在实际操作中&…

DFS的例子

x星球的盛大节日为增加气氛&#xff0c;用30台机光器一字排开&#xff0c;向太空中打出光柱。安装调试的时候才发现&#xff0c;不知什么原因&#xff0c;相邻的两台激光器不能同时打开&#xff01;国王很想知道&#xff0c;在目前这种bug存在的情况下&#xff0c;一共能打出多…

nginx installed inLinux

yum install nginx [rootmufeng ~]# yum install nginx CentOS系列&#xff1a;【Linux】CentOS7操作系统安装nginx实战&#xff08;多种方法&#xff0c;超详细&#xff09; ———————————————— 版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC …

FPGA_verilog语法整理

FPGA_verilog语法整理 verilog的逻辑值 verilog的常数表达 位宽中指定常数的宽度&#xff08;表示成二进制数的位数&#xff09;&#xff0c;单引号加表示该常数为几进制的底数符号。 二进制底数符号为b&#xff0c;八进制为 o&#xff0c;十进制为d&#xff0c;十六进制为 h…

Kimichat用于学习教育场景的7种高级方法

●AI作为导师 你是一个乐观、鼓励学生的导师&#xff0c;通过解释观点和问学生问题来帮助学生理解概念。下面每一步只一步步的执行&#xff0c;不要全部执行。 #向学生介绍自己&#xff0c;作为他们的AI导师&#xff0c;很高兴帮助他们解答任何问题。一次只问一个问题。 #首…

sqli-labs靶场学习(一)

一.知识点 1.数据库 数据库是一个用于存储和管理数据的仓库。数据按照特定的格式存储&#xff0c;可以对数据库中的数据进行增加、修改、删除和查询操作。数据库的本质是一个文件系统&#xff0c;按照一定的逻辑结构组织数据&#xff0c;以方便高效地访问和维护。 2.数据库管…

光伏无人机勘探技术应用分析

光伏无人机勘探与传统勘探想必&#xff0c;具有智能化作业、测控精度高、环境适应性强等明显优势&#xff1b;卫星勘探辅助其能更快速甚至实时完成测绘拼图&#xff1b;在进行勘察时&#xff0c;可根据需要自由更换机载设备&#xff1b;自动诗经建模使数据更直观&#xff0c;工…

深度学习每周学习总结P5(运动鞋识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 –来自百度网盘超级会员V5的分享 目录 0. 总结1. 数据导入及处理部分2. 加载数据集3.模型构建部分3.1 模型构建3.2 公式推导 4. 设置超参…

Web开发:ASP.NET CORE的前端demo(纯前端)

目录 一、建立项目 二、删除无用文件 三、样式添加 四、写一个登录页面 五、登录主界面 一、建立项目 二、删除无用文件 三、样式添加 将你的图片资源添加在wwwroot下方&#xff0c;例如pics/logo.png 四、写一个登录页面 将Privacy.cshtml改为 Forget.cshtml &#xff0…

【数学】深度学习中的概率基础知识记录

基于 Deep Learning (2017, MIT) 书总结了必要的概率知识 原blog 以及用到的Ipython notebook 文章目录 1 概述2 知识2.1 离散变量和概率质量函数&#xff08;PMF&#xff09;2.2 连续变量和概率密度函数&#xff08;PDF&#xff09;2.3 边缘概率2.4 条件概率2.5 条件概率的链式…

爬虫 //获取元素中的数据

// <!--jsoup解析工具所需依赖--> // <dependency> // <groupId>org.jsoup</groupId> // <artifactId>jsoup</artifactId> // <version>1.10.3</version> // </depende…

Android view点击监听

转载简书&#xff1a;Android无痕埋点&#xff08;1&#xff09;— 点击监听 - 简书

阿里云ECS服务器安装docker

首先查看阿里云ECS的服务器的版本 cat /etc/redhat-release如果是Alibaba Cloud Linux release 3,请执行以下命令 添加docker-ce的dnf源。 sudo dnf config-manager --add-repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装Alibaba Cloud Linux 3专…

MongoDB 索引全攻略

目录 一、索引介绍 1.1 单字段索引 1.2 复合索引 1.3 多键索引 1.4 主键索引 1.5 TTL 索引 1.6 地理空间索引 1.7 哈希索引 1.8 创建索引时注意事项 1.9 索引效果查看 二、索引实现原理 2.1 为什么使用 B-Tree 三、执行计划 一、索引介绍 任何数据库都有索引这一核心功能&…