宝塔面板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根目录中新建必要的配置文件
- 新建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"]
- 新建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
- 新建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
- 新建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;}}
}
- 上传ssl证书
将certificate.pem和private.key两个文件也上传到djangoProject的根目录中。
步骤3:将djangoProject项目上传到宝塔服务器中的/www/wwwroot目录中
文件目录如下:
步骤4:执行部署命令
- 执行构建docker镜像的命令
docker-compose build
- 执行运行docker镜像的命令
docker-compose up -d
- 查看docker镜像运行情况
docker ps
我们可以看到 , nginx镜像的id是 03851826cfee
django镜像的id是 9894a44b0c38
而且都各自运行在了自己的端口号上。
- 查看某个docker镜像中的文件
docker exec -it [容器ID或名称] /bin/bash
这样可以开辟一个独立的空间来输入linux命令,来查看文件。
比如输入ls -a
这样就能使用命令来查看docker镜像的文件了。
步骤5:打开浏览器,访问绑定的域名或者ip
完成上述操作,就已经成功实现部署了,现在,我们可以打开浏览器,查看运行效果了,不出意外的话,就能在页面中看到Hello World Django!的输出。
相关文章:
宝塔面板Docker+Uwsgi+Nginx+SSL部署Django项目
这次为大家带来的是从零开始搭建一个django项目并将它部署到linux服务器上。大家可以按照我的步骤一步步操作,最终可以完成部署。 步骤1:在某个文件夹中创建一个django项目 安装django pip install django创建一个django项目将其命名为djangoProject …...
Android 无线调试 adb connect ip:port 失败
1. 在手机打开 无线调试 使用 adb connect 连接 adb connect 192.168.14.164:39511如果连接成功, 查看连接的设备, 忽略 配对下面的步骤. adb devices如果连接失败: failed to connect to 192.168.14.164:39511如果失败了, 可以杀死一下进程, 然后执行后面的操作 adb kill…...
年龄与疾病c++
题目描述 某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理,按照0-18岁、19-35岁、36-60岁、61以上(含61)四个年龄段统计的患病人数以及占总患病人数的比例。 输入 共2行,第一行为过…...
neo4j-01
Neo4j是: 开源的(社区版开源免费)无模式(不用预设数据的格式,数据更加灵活)noSQL(非关系型数据库,数据更易拓展)图数据库(使用图这种数据结构作为数据存储方…...
正则表达式 速成
正则表达式的作用 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字…...
21、Lua 面向对象
Lua 面向对象 Lua 面向对象面向对象特征Lua 中面向对象一个简单实例创建对象访问属性访问成员函数完整实例 Lua 继承完整实例 函数重写 Lua 面向对象 面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构。 以下…...
openssl3.2 - exp - class warp for sha3-512
文章目录 openssl3.2 - exp - class warp for sha3-512概述笔记调用方代码子类 - cipher_sha3_512.h子类 - cipher_sha3_512.cpp基类 - cipher_md_base.h基类 - cipher_md_base.cpp备注END openssl3.2 - exp - class warp for sha3-512 概述 前面实验整了一个对buffer进行sha…...
cog predict docker unknown flag: --file
如图: 使用cog predict -i image“link-to-image” 出现docker unknown flag: --file的问题。 解决方法(对我可行):切换cog版本。 这个是我一开始的cog安装命令(大概是下的最新版?)࿱…...
SpringMVC接收参数方式讲解
PathVariable 该注解用于接收具有Restful风格的参数,如/api/v1/1001,最终userId的值为1001。 如下代码中,使用name属性可以指定GetMapping中的id名称与之对应,从而可以自定义参数名称userId,而不是使用默认名称id G…...
JavaScript 中arguments 对象详细解析与案例
在JavaScript中,每个函数都有一个内部对象arguments,它包含了函数调用时传递的所有参数。arguments对象类似一个数组,但是它并不是真正的数组,它没有数组的方法,只有length属性和索引访问元素的能力。 以下是对argume…...
消除 BEV 空间中的跨模态冲突,实现 LiDAR 相机 3D 目标检测
Eliminating Cross-modal Conflicts in BEV Space for LiDAR-Camera 3D Object Detection 消除 BEV 空间中的跨模态冲突,实现 LiDAR 相机 3D 目标检测 摘要Introduction本文方法Single-Modal BEV Feature ExtractionSemantic-guided Flow-based AlignmentDissolved…...
【免安装的MATLAB--MATLAB online】
目录: 前言账号的注册图片处理的示例准备图片脚本函数 总结 前言 在计算机、数学等相关专业中,或多或少都会与MATLAB产生藕断丝连的联系,如果你需要使用MATLAB,但是又不想要安装到自己的电脑上(它实在是太大了啊&#…...
Flyway 数据库版本管理
一、Flyway简介 Flyway是一款开源的数据库迁移工具,可以管理和版本化数据库架构。通过Flyway,可以跟踪数据库的变化,并将这些变化作为版本控制的一部分。Flyway支持SQL和NoSQL数据库,并且可以与现有的开发流程无缝集成࿰…...
lua学习笔记19(面相对象学习的一点总结)
print("*****************************面相对象总结*******************************") object{} --实例化方法 function object:new()local obj{}self.__indexselfsetmetatable(obj,self)return obj end-------------------------如何new一个对象 function object:…...
视觉SLAM学习打卡【10】-后端·滑动窗口法位姿图
本节是对上一节BA的进一步简化,旨在提高优化实时性.难点在于位姿图部分的雅可比矩阵求解(涉及李代数扰动模型求导),书中的相关推导存在跳步(可能数学功底强的人认为过渡的理所当然),笔者参考了知…...
【动态规划 区间dp 位运算】100259. 划分数组得到最小的值之和
本文涉及知识点 动态规划 区间dp 位运算 LeetCode100259. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues,长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组,对于第 ith 个子数…...
CSS核心样式-02-盒模型属性及扩展应用
目录 三、盒模型属性 常见盒模型区域 盒模型图 盒模型五大属性 1. 宽度 width 2. 高度 height 3. 内边距 padding 四值法 三值法 二值法 单值法 案例 4. 边框 border 按照属性值的类型划分为三个单一属性 ①线宽 border-width ②线型 border-style ③边框颜色 bo…...
在 Google Cloud 上轻松部署开放大语言模型
今天,“在 Google Cloud 上部署”功能正式上线! 这是 Hugging Face Hub 上的一个新功能,让开发者可以轻松地将数千个基础模型使用 Vertex AI 或 Google Kubernetes Engine (GKE) 部署到 Google Cloud。 Model Garden (模型库) 是 Google Clou…...
005Node.js模块URL的使用
引入 URL 模块 要使用 URL 模块,首先需要在代码中引入它。可以使用以下代码将 URL 模块导入到你的脚本中: const url require(url);实例代码 const urlrequire(url); var apihttp://www.baidu.com?nameshixiaobin&age20; console.log(url.parse(…...
美团笔试复盘
昨天做了美团的笔试,现在复盘一下。 1、将数组按照绝对值大小排序 有道算法题解决思路需要将数组按照绝对值大小进行排序,我使用的是sort方法Comparator比较器实现的,这里记录一下: public static void main(String[] args) {In…...
IntelliJ IDEA - Since Maven 3.8.1 http repositories are blocked
问题描述 新下载的 IDEA 在构建项目时,在下载引用的包时出现 “Since Maven 3.8.1 http repositories are blocked” 的问题。 原因分析 从 Maven 3.8.1 开始,不再支持 http 的包了。由于现在对网络安全的日益重视,都在向 https 转变&#…...
Django的APP应用更名(重命名)流程
将Django中的一个现有APP更名是一个需要谨慎操作的过程,因为它涉及到多个文件和配置的更新。下面是详细的步骤和一些补充细节,帮助你更顺利地完成APP重命名: 1. 修改APP名称及相关引用 更改APP目录名称: 首先,重命名…...
ChatGLM3-6B大语言模型离线执行
ChatGLM3-6B大语言模型离线执行 模型准备 一般而言,模型和模型参数可以通过如下三个模型源进行相应的下载: HuggingFace | ModelScope | WiseModel 本实例中,使用的是HuggingFace的源下载,相应的地址如下: HuggingFa…...
了解大语言模型的参数高效微调(Parameter-Effcient Fine-Tuning)
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 大语言模型在众多应用领域实现了突破性的进步,显著提升了各种任务的完成度。然而,其庞大的规模也带来了高昂的计算成本。这些模型往往包含数十亿甚至上千亿参数,需要…...
2024.4.14力扣每日一题——设计哈希集合
2024.4.14 题目来源我的题解方法一 链表数组 题目来源 力扣每日一题;题序:705 我的题解 方法一 链表数组 由于给定限制次数为10000,所以构造一个长度为10001的链表数组。对于add操作先看数组对应的位置是否为null或者为空,若是…...
SQL explain 显示子查询A类型为ALL怎么优化
当 SQL EXPLAIN 显示子查询 A 的类型为 ALL 时,这意味着数据库系统正在执行全表扫描,而不是使用索引来执行子查询。全表扫描可能会导致性能下降,特别是在大型表上。 为了优化这种情况,您可以考虑以下几点: 1. **索引…...
网络协议学习——IP协议
IP(Internet Protocol,互联网协议)是网络中最基本的协议之一,负责在互联网中进行数据包的传输。下面是对IP协议的详细讲解: IP协议的作用 IP协议是在网络层(第三层)上工作的协议,它的…...
MATLAB初学者入门(1)—— 基础知识和功能介绍
MATLAB(Matrix Laboratory)是一种用于数值计算、可视化以及编程的高性能语言环境。它广泛应用于工程、科学研究和教育等领域。以下是对MATLAB基础知识和编程技巧的系统性讲解,分为几个主要部分: 1. 基础操作 变量和表达式 在MAT…...
React Css 四种引入方式
React CSS 内联样式 优点 样式之间不会有冲突可以动态获取组件中state的值 缺点 要使用驼峰标识部分样式没有很友好的提示如果大量去写内敛样式 容易造成代码混乱伪类和伪元素无法编写 class HighCom extends PureComponent {constructor(props) {super(props)this.state…...
题目:输入3个数a,b,c,按大小顺序输出。
题目:输入3个数a,b,c,按大小顺序输出。 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried abou…...
sever2012做网站/中国最好的营销策划公司
在创建python包的过程中,IDE都会在包根目录下创建一个__init__.py文件,该Python文件默认是空的.目录结构如下: Pycharm下的package树结构: 在Finder中的目录结构: 从Finder中的目录就可以看出来,每个packag…...
通过做政府门户网站的实验获得什么/手机百度登录入口
1、首先进入mysql的安装目录下的bin目录,例如我的是【C:\WINDOWS\System32\cmd.exe】2、接着输入cmd,回车3、在命令行中输入命令【mysql -hlocalhost -uroot -p 按回车键,输入密码】,其中【-h主机名 -u用户 -p密码】 4、成功进入界…...
团购网站怎么做推广/百度收录官网
报错:叫我们删除log4j-over-slf4j.jar, 选中项目 然后搜索对应的包,然后排除即可,我这边已经排除了,就ok了 ctrlF搜索哦! 版本问题,使用插件解决吧: https://yidajava.blog.csdn.net/article/details/103668676...
做旅游网站怎么样/今日搜索排行榜
利用多张影像对小物体进行拍摄,进而进行三维重建,是计算机视觉中的重要问题之一。 目前对此研究最全面的网站是:http://vision.middlebury.edu/mview/eval/ 目前最优秀的算法是Furukawa的PMVS2:http://www.di.ens.fr/pmvs/ 目前…...
网页设计实训内容/seo营销推广公司
转载于:https://www.cnblogs.com/jasonlixuetao/p/5557845.html...
网站排名快速提升/百度怎么创建自己的网站
源地址:http://devliangel.blog.51cto.com/469347/674244 构建企业服务之windows 2008 负载均衡服务器部署 项目环境: 两台Windows Server 2008 均为双网卡 IP地址 192.168.19.100(外网1) 99.99.99.99(内网1专用) 192.168.19.101(外网2) 99.99.99.100(内…...