宝塔面板Docker+Uwsgi+Nginx+SSL部署Django项目

这次为大家带来的是从零开始搭建一个django项目并将它部署到linux服务器上。大家可以按照我的步骤一步步操作,最终可以完成部署。

步骤1:在某个文件夹中创建一个django项目

安装django

pip install django

创建一个django项目将其命名为djangoProject

django-admin startproject djangoProject

步骤2:修改djangoProject中的settings.py

from pathlib import PathBASE_DIR = Path(__file__).resolve().parent.parentSECRET_KEY = 'django-insecure-&+xjf50v8*hc2*x6a58ub43u#fugn2+r-7zak0)0z6bhu981+b'# settings.py配置文件主要改了这两个地方# 由于是生产环境Debug模式改为False
DEBUG = False
# 注意: 这里要改成'*' 或者 允许访问django的ip
# 否则部署上线后,访问不到django页面
ALLOWED_HOSTS = ['*']INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','sslserver',
]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'djangoProject.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [BASE_DIR / 'templates'],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]WSGI_APPLICATION = 'djangoProject.wsgi.application'DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}AUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]LANGUAGE_CODE = 'en-us'TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_TZ = TrueSTATIC_URL = 'static/'DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

步骤3:在urls.py中编写测试代码

# /djangoProject/djangoProject/urls.py
from django.urls import path
from django.shortcuts import HttpResponsedef index(request):return HttpResponse("Hello World Django!")urlpatterns = [path('', index)
]

等项目部署成功以后,访问浏览器可以看到页面输出Hello World Django!

步骤4:在djangoProject根目录中新建必要的配置文件

  1. 新建Dockerfile
# 使用 Python 3.9 作为基础镜像
FROM python:3.9# 设置工作目录
WORKDIR /app# 复制项目文件到工作目录
COPY . /app# 创建一个新的用户和组,例如命名为 myapp
ARG USER_ID=1000
ARG GROUP_ID=1000
RUN groupadd -g ${GROUP_ID} myapp && \useradd -u ${USER_ID} -g ${GROUP_ID} -d /app myapp && \chown ${USER_ID}:${GROUP_ID} /app# 切换回 root 用户来创建虚拟环境
USER root# 创建虚拟环境
RUN python -m venv venv# 激活虚拟环境
ENV PATH /app/venv/bin:$PATH# 设置清华 pip 镜像
ENV PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple  
ENV PIP_TRUSTED_HOST=pypi.tuna.tsinghua.edu.cn# 安装项目依赖
RUN pip install --no-cache-dir -r requirements.txt# 设置环境变量,确保Django在生产模式下运行
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1# 切换回 myapp 用户来运行应用
USER myapp# 运行uWSGI服务, 由于docker-compose.yml中制定了command,所以这里可以注释掉
# CMD ["uwsgi", "--ini", "/app/uwsgi.ini"]
  1. 新建docker-compose.yml
# 保证nginx容器和django容器在同一个网络下,否则socket通信会出问题
networks:my_network:services:web:build: .command: uwsgi --ini /app/uwsgi.iniports:- "8000:8000"networks:- my_networknginx:image: nginx:latestvolumes:- ./nginx.conf:/etc/nginx/nginx.conf- ./certificate.pem:/etc/nginx/ssl/certificate.pem- ./private.key:/etc/nginx/ssl/private.keyports:- "80:80"- "443:443"networks:- my_networkdepends_on:- web
  1. 新建uwsgi.ini
# uwsgi.ini
[uwsgi]
master = true
# 指定 Django 项目的 WSGI 文件
module = djangoProject.wsgi:application# 项目根目录,根据实际情况进行调整
chdir = /app# 指定 Python 环境变量,确保使用正确的 Python 版本
home = /app/venv# 如果使用http,而不使用socket,则指定 uWSGI 服务的 http 文件位置
# http = 0.0.0.0:8000
# 配置uWSGI使用socket, socket和http选项二选一即可
socket = 0.0.0.0:8000
# 进程数和线程数根据需要进行调整
processes = 4
threads = 2
chmod-socket = 664# 设置环境变量,确保 Django 在生产模式下运行
env = DJANGO_SETTINGS_MODULE=djangoProject.settings
vacuum = true
  1. 新建nginx.conf
events {worker_connections 1024;
}http {# 设置全局的代理超时时间proxy_connect_timeout 30s;  # 连接到 uWSGI 服务器的超时时间proxy_send_timeout 30s;     # 发送数据到 uWSGI 服务器的超时时间proxy_read_timeout 30s;    # 从 uWSGI 服务器读取响应的超时时间server {listen 80;  # 监听 80 端口server_name *.xxx.com xxx.com;  # 配置服务器名称,支持通配符子域名和顶级域名return 301 https://$host$request_uri;}server {listen 443 ssl;server_name *.xxx.com xxx.com;# 这里的路径要和docker-compose.yml中nginx容器的volumes中挂载的证书容器保持一致ssl_certificate /etc/nginx/ssl/certificate.pem;ssl_certificate_key /etc/nginx/ssl/private.key;location / {# 使用http方案# proxy_pass http://web:8000; # 转发到 uWSGI 服务 # 转发到 uWSGI 监听的端口# 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;# 使用socket方案uwsgi_pass web:8000;include uwsgi_params;}}
}
  1. 上传ssl证书
    将certificate.pem和private.key两个文件也上传到djangoProject的根目录中。

步骤3:将djangoProject项目上传到宝塔服务器中的/www/wwwroot目录中

文件目录如下:
在这里插入图片描述

步骤4:执行部署命令

  1. 执行构建docker镜像的命令
docker-compose build
  1. 执行运行docker镜像的命令
docker-compose up -d
  1. 查看docker镜像运行情况
docker ps

在这里插入图片描述
我们可以看到 , nginx镜像的id是 03851826cfee
django镜像的id是 9894a44b0c38
而且都各自运行在了自己的端口号上。

  1. 查看某个docker镜像中的文件
docker exec -it [容器ID或名称] /bin/bash

这样可以开辟一个独立的空间来输入linux命令,来查看文件。
比如输入ls -a
在这里插入图片描述
这样就能使用命令来查看docker镜像的文件了。

步骤5:打开浏览器,访问绑定的域名或者ip

完成上述操作,就已经成功实现部署了,现在,我们可以打开浏览器,查看运行效果了,不出意外的话,就能在页面中看到Hello World Django!的输出。
在这里插入图片描述

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

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

相关文章

Ubuntu系统搭建Tipask开源问答系统并发布公网分享好友远程访问

文章目录 1. 前言2.Tipask网站搭建2.1 Tipask网站下载和安装2.2 Tipask网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3 Cpolar稳定隧道(本地设置) 4. 公网访问测试5. 结语…

STM32——TIMER(定时器)篇

技术笔记! 1. 定时器概述(了解) 1.1 软件定时器原理 使用纯软件(CPU死等)的方式实现定时(延时)功能 缺点:1. 延时不准确 2. CPU死等。 1.2 定时器定时原理 1.…

品牌舆情都包含什么内容?建议收藏

一个品牌的声誉、形象、产品质量、服务质量等,无时无刻不在接受着大众的检验。互联网传播迅速,一个不好的舆论直接导致整个品牌的声誉受到严重影响。品牌舆情都包含什么内容?接下来伯乐网络传媒就来给大家讲一讲。 一、品牌舆情的基本构成 1…

冯喜运:5.13黄金晚间还会跌吗?原油还会涨吗?

【黄金消息面分析】:自5月初以来,黄金和白银一直在享受需求的回归,买家在过去几天加大了力度,一度推动金价重返2370美元上方,白银重返28.5美元上方。不过,经过几天的盘整后,黄金白银价格双双下跌…

【npm】解决npm包突然消失MODULE_NOT_FOUND

今天折腾新特性时需要升级nodejs,安装新版后npm离奇消失了。C:\Users\**用户名\AppData\Roaming\npm\node_modules下只有cnpm,没有npm的目录。重装nodejs也不好使。 机智如我,试了下cnpm -v是正常的,而且能看到nodejs,…

什么是.faust勒索病毒?应该如何防御?

faust勒索病毒详细介绍 faust勒索病毒是一种新型的勒索软件,最早出现在2018年。该病毒通过加密计算机系统中的文件并要求支付赎金来解锁文件,从而获取经济利益。与传统的勒索软件相比,faust勒索病毒采用了更加先进的加密算法和隐藏技术&#…

山洪灾害无线预警广播系统的主要设备和功能

一、背景 山洪泥石流是指在山区或者其他沟谷深壑,地形险峻的地区,因为暴雨、暴雪或其他自然灾害引发的洪水、山体滑坡并携带有大量泥沙以及石块的特殊洪流。山洪泥石流等地质灾害具有突然性以及流速快,流量大,物质容量大和破坏力…

光数据传送器|光通讯传感器极速版OPT系列尺寸与安装步骤

光数据传送器|光通讯传感器极速版OPT系列是利用可见光及不可见光作为信息载体,无需光纤、网线等有线介质,在空中直接进行信息传输的无线方式通信。驱动光源以可见光及不可见光的高速明暗变化来传输数字信号,以极高光频率双向发射接收光信号&a…

python跟C++选哪个?

选择使用Python还是C取决于你的具体需求和项目背景。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个评论222,私信22,我在后台发给你。 在通信工程行业…

QT C++(QWidget类及其常见的属性)

文章目录 1. QWidget类及其常见的属性 1. QWidget类及其常见的属性 QT各种控件都是继承自QWidget类,QWidget类是QT控件体系中通用的部分。 QWidget属性如下图 常见的QT属性为: enabled:描述控件是否处于可用状态(禁用状态这个…

Python 求高斯误差函数 erf 和 erfc

文章目录 Part.I IntroductionPart.II 概念定义Chap.I 误差函数 erfChap.II 误差函数补 erfc Part.II 求值与绘图Chap.I 求取方式Chap.II 绘图 Reference Part.I Introduction 本文将对误差函数(ERror Function, ERF)进行简单的介绍,并探索如…

【Flutter】极光推送配置流程(VIVO/OPPO/荣耀厂商通道) 章三

前言 很高兴大家来看小编写的文章~~ 继【Flutter】极光推送配置流程(极光通道/华为厂商/IOS) 章一 继【Flutter】极光推送配置流程(小米厂商通道) 章二 接下配置VIVO/OPPO/华为荣耀的厂商通道 所有截图来源于公司项目,所以会有大量马赛克&am…

虚拟数字人及AI相关应用分享

一、虚拟数字人 1、简介 虚拟数字人可分为基础类和仿真智能类。可用于直播的,一般是仿真智能类;基础类动作缓慢,体验差,很容易被直播平台封号。 目前各大短视频平台上介绍的数字人,出于营销目的,有夸大宣传…

prophet时间序列模型水质预测应用

前言 此前已经分析了,ARIMA 模型在水质预测中的应用,今天用 prophet 模型测试下在水质预测中的效果。 Prophet 简介 Prophet 是 Facebook 于2017年开源的一个时间序列预测框架,特别适合于处理具有明显趋势性和季节性的数据。该模型设计初衷…

springboot3项目练习详细步骤(第三部分:文章管理模块)

目录 发布文章 接口文档 业务实现 自定义参数校验 项目参数要求 实现思路 实现步骤 文章列表(条件分页) 接口文档 业务实现 mapper映射 更新文章 接口文档 业务实现 获取文章详情 接口文档 业务实现 删除文章 接口文档 业务实现 文章管理业务表结构…

数据可视化训练第6天(美国人口调查获得关于收入与教育背景的数据,并且可视化)

数据来源 https://archive.ics.uci.edu/dataset/2/adult 过程 首先;关于教育背景的部分翻译有问题。 本次使用字典嵌套记录数据,并且通过lambda在sorted内部进行对某个字典的排序,最后用plotly进行绘图 本次提取数据的时候,用到…

ubuntu server 22.04.4 系统安装详细教程

本教程使用vmware workstation 17创建虚拟机进行安装演示,安装方式和真机安装没有区别。 1、下载镜像 下载ubuntu server版本系统镜像,官网下载地址:https://cn.ubuntu.com/download/server/step1 注意:自己下载时需要确认是否是…

基于springboot + vue 实现的简易博客系统

项目效果图 登陆页面 文章列表 发表文章 用户管理 栏目管理 数据统计 后端技术栈后端主要采用了: 1.SpringBoot 2.SpringSecurity 3.MyBatis 4.部分接口遵循Restful风格 5.MySQL 前端技术栈前端主要采用了: 1.Vue 2.axios 3.Elemen…

每周一算法:传递闭包

题目描述 不等式排序 给定 n n n个变量和 m m m个不等式。其中 n n n小于等于 26 26 26,变量分别用前 n n n 的大写英文字母表示。 不等式之间具有传递性,即若 A > B A>B A>B 且 B > C B>C B>C,则 A > C A>C …

GPU prompt

提问: GPU是如何与CPU协调工作的? GPU也有缓存机制吗?有几层?速度差异是多少? GPU渲染流程有哪些阶段?他们的功能分别是什么? Early-Z技术是什么?发生在哪个阶段?这个…