当前位置: 首页 > news >正文

Python web实战 | Docker+Nginx部署python Django Web项目详细步骤【干货】

 


概要

在这篇文章中,我将介绍如何使用 Docker 和 Nginx 部署 Django Web 项目。一步步讲解如何构建 Docker 镜像、如何编写 Docker Compose 文件和如何配置 Nginx。


1. Docker 构建 Django Web 项目

1.1 配置 Django 项目

在开始之前,我们需要有一个 Django 项目。如果你还没有 Django 项目,可以按照 Django 官方文档的指导创建一个。我们将 Django 项目放在一个名为 myproject 的目录中。

1.2 编写 Dockerfile

接下来,我们需要编写 Dockerfile。Dockerfile 是用来构建 Docker 镜像的脚本。在 myproject 目录下创建一个名为 Dockerfile 的文件,并在其中添加以下内容:

# 基础镜像
FROM python:3.9# 在容器中创建项目目录
RUN mkdir /code# 设置工作目录
WORKDIR /code# 将当前目录下的所有文件复制到容器中的 /code 目录
COPY . /code/# 安装项目依赖
RUN pip install -r requirements.txt

在上面的 Dockerfile 中,我们首先指定 Python 3.9 作为基础镜像。然后在容器中创建一个名为 /code 的目录,并将当前目录下的所有文件复制到容器中的 /code 目录中。最后,我们安装项目所需的依赖。

1.3 构建 Docker 镜像

现在我们可以使用 Dockerfile 来构建 Docker 镜像了。在 myproject 目录下打开终端,运行以下命令:

docker build -t myproject .

上面的命令将使用 myproject 目录下的 Dockerfile 构建一个名为 myproject 的 Docker 镜像。

1.4 运行 Docker 镜像

现在我们可以运行 Docker 镜像了。在终端中运行以下命令:

docker run -it --rm -p 8000:8000 myproject

上面的命令将运行一个名为 myproject 的 Docker 镜像,并将容器的端口 8000 映射到主机的端口 8000。现在你可以在浏览器中访问 http://localhost:8000 来查看你的 Django 项目是否正常工作了。

2. 使用 Docker Compose 编排 Django Web 项目

虽然上面的方法可以用来构建和运行 Docker 镜像,但是它并没有考虑到一些重要的问题,例如如何处理数据库、如何设置环境变量等等。为了解决这些问题,我们可以使用 Docker Compose。

2.1 编写 Docker Compose 文件

在 myproject 目录下创建一个名为 docker-compose.yml 的文件,并在其中添加以下内容:

version: '3'services:web:build: .command: python manage.py runserver 0.0.0.0:8000volumes:- .:/codeports:- "8000:8000"environment:- DJANGO_SETTINGS_MODULE=myproject.settings- DATABASE_URL=postgres://postgres:postgres@db:5432/postgresdb:image: postgresenvironment:- POSTGRES_DB=postgres- POSTGRES_USER=postgres- POSTGRES_PASSWORD=postgres

在上面的 Docker Compose 文件中,我们定义了两个服务:一个是 web 服务,另一个是 db 服务。web 服务是我们刚才构建的 Django Web 项目,db 服务是一个 PostgreSQL 数据库。

在 web 服务中,我们使用了 build 关键字来指定 Dockerfile 的路径。command 关键字用来指定容器启动时要运行的命令,这里我们运行 Django 的开发服务器。volumes 关键字用来将本地目录与容器内的目录进行映射,这样我们可以在本地编辑文件并在容器内运行它们。ports 关键字用来将容器内的端口映射到主机上的端口。environment 关键字用来设置环境变量,这里我们设置了 Django 的配置和数据库连接的 URL。

在 db 服务中,我们使用了 image 关键字来指定使用 PostgreSQL 官方镜像。environment 关键字用来设置 PostgreSQL 的用户名、密码和数据库名称。

2.2 运行 Docker Compose

现在我们可以使用 Docker Compose 来构建和运行 Docker 镜像了。在终端中运行以下命令:

docker-compose up

上面的命令将使用 docker-compose.yml 文件来构建和运行 Docker 镜像。在容器启动后,你可以在浏览器中访问 http://localhost:8000 来查看你的 Django 项目是否正常工作了。

3. 配置 Nginx 反向代理

尽管我们已经成功地将 Django Web 项目部署到了 Docker 中,但是我们还没有解决如何使用 Nginx 配置反向代理的问题。在这一节中,我们将讲解如何使用 Nginx 配置反向代理。

3.1 编写 Nginx 配置文件

在 myproject 目录下创建一个名为 nginx.conf 的文件,并在其中添加以下内容:

upstream web {server web:8000;
}server {listen 80;location / {proxy_pass http://web;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

在上面的配置文件中,我们定义了一个名为 web 的 upstream,将其指向 Docker Compose 中的 web 服务。然后我们定义了一个 Nginx 服务器监听 80 端口。在 location 中,我们将请求代理到 upstream 中的 web 服务,并设置了 Host 和 X-Real-IP 头。

以上配置为访问ip打开项目。如果你想绑定域名,可以改成:

upstream web {server web:8000;
}server {listen 80;server_name example.com;location / {proxy_pass http://web;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

把example.com解析到你的ip后,即可实现访问域名打开项目。

3.2 编写 Dockerfile

为了让 Nginx 能够使用我们编写的配置文件,我们需要编写一个 Dockerfile。

在 myproject 目录下创建一个名为 Dockerfile.nginx 的文件,并在其中添加以下内容:

# 基础镜像
FROM nginx:latest# 删除默认配置文件
RUN rm /etc/nginx/conf.d/default.conf# 将自定义配置文件复制到容器中的 /etc/nginx/conf.d/ 目录下
COPY nginx.conf /etc/nginx/conf.d/

在上面的 Dockerfile 中,我们首先指定 Nginx 最新版本作为基础镜像。然后我们删除默认的配置文件,并将我们编写的配置文件复制到容器中的 /etc/nginx/conf.d/ 目录下。

3.3 构建 Docker 镜像并运行

现在我们可以使用 Dockerfile.nginx 来构建 Docker 镜像了。在终端中运行以下命令:

docker build -t myproject-nginx -f Dockerfile.nginx .

上面的命令将使用 Dockerfile.nginx 构建一个名为 myproject-nginx 的 Docker 镜像。

接下来,我们需要使用 Docker Compose 来启动 Nginx 服务。在 docker-compose.yml 中添加以下内容:

version: '3'services:web:build: .command: python manage.py runserver 0.0.0.0:8000volumes:- .ports:- "8000:8000"environment:- DJANGO_SETTINGS_MODULE=myproject.settings- DATABASE_URL=postgres://postgres:postgres@db:5432/postgresdb:image: postgresenvironment:- POSTGRES_DB=postgres- POSTGRES_USER=postgres- POSTGRES_PASSWORD=postgresnginx:build: .ports:- "80:80"depends_on:- web

在上面的 Docker Compose 文件中,我们定义了一个名为 nginx 的服务,使用之前编写的 Dockerfile.nginx 来构建 Docker 镜像。我们将容器的端口 80 映射到主机的端口 80,并且在 depends_on 中指定了 web 服务,这样 Nginx 就可以将请求代理到 web 服务中。

现在我们可以使用 Docker Compose 来构建和运行 Docker 镜像。在终端中运行以下命令:

docker-compose up

上面的命令将使用 docker-compose.yml 文件来构建和运行 Docker 镜像。在容器启动后,你可以在浏览器中访问 http://localhost 来查看你的 Django 项目是否正常工作了,这时请求会被 Nginx 代理到 web 服务中。

4. 配置静态文件服务和 HTTPS 支持

如果你的 Django 项目中包含静态文件,你需要将它们配置为独立的静态文件服务。此外,你可能还需要为你的 Web 应用程序配置 HTTPS 支持。在这一节中,我们将讲解如何配置静态文件服务和 HTTPS 支持。

4.1 配置静态文件服务

为了让 Nginx 作为静态文件服务,我们需要在 nginx.conf 文件中添加以下内容:

upstream web {server web:8000;
}server {listen 80;location /static/ {alias /code/static/;}location / {proxy_pass http://web;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

在上面的配置文件中,我们添加了一个名为 /static/ 的 location,并设置其别名为 /code/static/,这样 Nginx 就可以将静态文件服务到客户端了。

4.2 配置 HTTPS 支持

为了配置 HTTPS 支持,我们需要使用 SSL 证书。你可以购买 SSL 证书,也可以使用免费的 Let's Encrypt 证书。

4.2.1 使用 Let's Encrypt 证书

如果你想使用 Let's Encrypt 证书,可以按照以下步骤进行配置。

首先,安装 Certbot 工具。你可以在 Certbot 的官方网站上找到详细的安装说明。

接下来,使用 Certbot 工具来申请证书。在终端中运行以下命令:

sudo certbot certonly --webroot --webroot-path=/code/static -d example.com

上面的命令将使用 webroot 插件来申请证书。--webroot-path 选项将 Certbot 配置为在指定目录下查找验证文件。-d 选项指定了你的域名。

最后,将以下内容添加到 nginx.conf 文件中:

upstream web {server web:8000;
}server {listen 80;server_name example.com;return 301 https://$host$request_uri;
}server {listen 443 ssl;server_name example.com;ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;location /static/ {alias /code/static/;}location / {proxy_pass http://web;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

在上面的配置文件中,我们定义了两个服务器:第一个服务器监听 80 端口,并将请求重定向到 443 端口;第二个服务器监听 443 端口,并使用 SSL 证书来启用 HTTPS 支持。ssl_certificate 和 ssl_certificate_key 分别指定了 SSL 证书和私钥的路径。

4.3 Docker Compose 文件更新

最后,我们需要更新 Docker Compose 文件来包含新的 Nginx 配置和静态文件服务。以下是更新后的 Docker Compose 文件:

version: "3"services:web:build:context: .dockerfile: Dockerfileports:- "8000:8000"environment:- DJANGO_SETTINGS_MODULE=myproject.settings- DATABASE_URL=postgres://postgres:postgres@db:5432/postgresdb:image: postgresenvironment:- POSTGRES_DB=postgres- POSTGRES_USER=postgres- POSTGRES_PASSWORD=postgresnginx:build:context: .dockerfile: Dockerfile.nginxports:- "80:80"- "443:443"depends_on:- webvolumes:- ./nginx.conf:/etc/nginx/nginx.conf- ./certbot:/etc/letsencrypt

在上面的 Docker Compose 文件中,我们添加了一个名为 nginx 的服务,并将其端口 443 映射到主机的端口 443,以支持 HTTPS。此外,我们将 /etc/nginx/nginx.conf 和 /etc/letsencrypt 目录挂载到主机上,以便在容器外部进行配置和证书的管理。

现在,你可以使用 Docker Compose 来构建和运行 Docker 镜像,并在浏览器中访问 https://example.com 来查看你的 Django 项目是否正常工作了。

5. 技术总结

如果你以前没有使用过 Docker,本文可能会有点晦涩。但是,当你熟悉了这些工具和框架,你会发现使用它们来构建和部署应用程序是非常方便和高效的。

今天的分享就到这里,欢迎点赞收藏转发,感谢。

相关文章:

Python web实战 | Docker+Nginx部署python Django Web项目详细步骤【干货】

概要 在这篇文章中,我将介绍如何使用 Docker 和 Nginx 部署 Django Web 项目。一步步讲解如何构建 Docker 镜像、如何编写 Docker Compose 文件和如何配置 Nginx。 1. Docker 构建 Django Web 项目 1.1 配置 Django 项目 在开始之前,我们需要有一个 D…...

【uniapp】实现买定离手小游戏

前言 最近玩了一个小游戏,感觉挺有意思,打算放进我的小程序【自动化小助手】里面,“三张押一张,专押花姑娘!”,从三张卡牌,挑选一张,中奖后将奖励进行发放,并且创建下一…...

【vim 学习系列文章 3 - vim 选中、删除、复制、修改引号或括号内的内容】

文章目录 vim 快捷命令vim 操作符vim 文本对象vim 动作 上篇文章: vim 学习系列文章 2 - vim 常用插件配置 vim 快捷命令 Vim 有一个模块化的结构,允许你使用各种命令的组合操作。大多数命令有两个、三个或四个部分。三部分结构的一个版本是这样的:操作…...

webpack联邦模块介绍及在dumi中使用问题整理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ModuleFederationPlugin参数含义?二、如何在dumi中使用及问题整理1. 如何在dumi中使用(这个配置是好使的)2.相关问题整理2.1 问题12.2 问题2 总…...

记录一下Kotlin: Module was compiled with an incompatible version of Kotlin.的问题

我遇到的整个报错是这样的: Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.1.16. 大概意思就是不匹配,但是我这是个不太能随便改代码的项目&#x…...

html中使用Vue+element UI动态创建表单数据不显示问题

直接上代码&#xff1a;html代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&…...

CentOS下 Docker、Docker Compose 的安装教程

Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。 Docker Compose是用于定义…...

[OnWork.Tools]系列 02-安装

下载地址 百度网盘 历史版本连接各种版本都有,请下载版本号最高的版本 链接&#xff1a;https://pan.baidu.com/s/1aOT0oUhiRO_L8sBCGomXdQ?pwdn159提取码&#xff1a;n159 个人链接 http://on8.top:5000/share.cgi?ssiddb2012fa6b224cd1b7f87ff5f5214910 软件安装 双…...

【外键合并python】

外键合并&#xff08;Foreign Key Merge&#xff09; 外键合并是指在数据库或者数据表中&#xff0c;通过共同的外键将多个数据表合并在一起的操作。在 Excel 表格中&#xff0c;我们可以使用外键来将多个表格合并&#xff0c;类似于数据库中的关联操作。 步骤一&#xff1a;…...

Mongodb SQL 到聚合映射快速参考

SQL 映射 聚合管道允许MongoDB 提供原生聚合功能&#xff0c;对应于 SQL 中许多常见的数据聚合操作。比如&#xff1a;GROUP BY、COUNT()、UNION ALL 测试数据 For MySQL rootlocalhost 14:40:40 [test]> select * from orders; -------------------------------------…...

腾讯云标准型S6/SA3/SR1/S5/SA2服务器CPU处理器大全

腾讯云服务器CVM标准型CPU处理器大全&#xff0c;包括标准型S6、SA3、SR1、S5、S5se、SA2、S4、SN3ne、S3、SA1、S2ne实例CPU处理器型号大全&#xff0c;标准型S6云服务器CPU采用Intel Ice Lake(2.7GHz/3.3GHz)&#xff0c;标准型S5采用Intel Xeon Cascade Lake 8255C/Intel Xe…...

idea 关于高亮显示与选中字符串相同的内容

dea 关于高亮显示与选中字符串相同的内容&#xff0c;本文作为个人备忘的同时也希望可以作为大家的参考。 依次修改File-settings-Editor-Color Scheme-General菜单下的Code-Identifier under caret和Identifier under caret(write)的Backgroud色值&#xff0c;可以参考下图。…...

【重点:单例模式】特殊类设计

请设计一个类&#xff0c;只能在堆上创建对象 方式如下&#xff1a; 将构造函数设置为私有&#xff0c;防止外部直接调用构造函数在栈上创建对象。向外部提供一个获取对象的static接口&#xff0c;该接口在堆上创建一个对象并返回。将拷贝构造函数设置为私有&#xff0c;并且…...

智能家居是否可与ChatGPT深度融合?

​ ChatGPT自2022年面世以来&#xff0c;已为亿万网民提供智能问答服务。然而我们是否曾想到&#xff0c;这一人工智能驱动的聊天机器人&#xff0c;是否可为智能家居赋能? 要实现ChatGPT与智能家居设备之间的无缝对话&#xff0c;单单依靠一台终端是远远不够的。ChatGPT必须…...

LED芯片 VAS1260IB05E 带内部开关LED驱动器 汽车硬灯带灯条解决方案

VAS1260IB05E深力科LED芯片是一种连续模式电感降压转换器&#xff0c;设计用于从高于LED电压的电压源高效驱动单个或多个串联连接的LED。该设备在5V至60V之间的输入电源下工作&#xff0c;并提供高达1.2A的外部可调输出电流。包括输出开关和高侧输出电流感测电路&#xff0c;该…...

微信小程序插件 painter 生成海报、二维码

GitHub 地址&#xff1a;https://github.com/Kujiale-Mobile/Painter 一、引入 将 components/painter 整个文件放到自己项目的 components 中&#xff1b;以组件的形式在页面的 json 文件中引入&#xff1b; 二、使用 <view class"container"><image s…...

Python版day60

84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 class Solution:def largestRectangleArea(self, heights: List[int]) -> i…...

windows C++多线程同步<3>-互斥量

windows C多线程同步&#xff1c;3&#xff1e;-互斥量 概念&#xff0c;如下图&#xff1a; 另外就是互斥对象谁拥有&#xff0c;谁释放 那么一个线程允许多次获取互斥对象吗&#xff1f; 答案是允许&#xff0c;但是申请多次就要释放多次&#xff0c;否则其他线程获取不到互…...

(学习笔记-系统结构)Linux内核与windows内核

内核 计算机是由各种外部硬件设备组成的&#xff0c;比如内存、CPU、硬盘等&#xff0c;如果每个应用都要和这些硬件设备对接通信协议&#xff0c;那这样太累了&#xff0c;所以这个中间人由内核来负责&#xff0c;让内核作为应用连接硬件设备的桥梁&#xff0c;应用程序只关心…...

find_in_set在oracle下的解决方案

比如一张表&#xff1a; artile (id,type,content); # type:1表示文艺类&#xff0c;2表示小说类&#xff0c;3表示传记&#xff0c;4表示传说&#xff0c;等等5,6,7,8表数据&#xff1a; idtypecontent13,1dfasdfasdf21,3,6,8dfasdf36,8,9add 现在要找出3传记类的artile记录…...

从测速到配置:一套完整的cFosSpeed网络加速保姆级教程(适用于小白)

从零开始掌握cFosSpeed&#xff1a;网络加速全流程实战指南对于经常进行在线游戏、视频会议或大文件传输的用户来说&#xff0c;网络延迟和带宽利用率低下往往是影响体验的关键痛点。cFosSpeed作为一款专业的网络流量优化工具&#xff0c;能够显著改善这些问题&#xff0c;但许…...

DragonBones与Godot集成:骨骼动画的可编程化实践

1. 为什么在Godot里用DragonBones不是“锦上添花”&#xff0c;而是“绕不开的刚需” 去年上线一个横版动作手游Demo时&#xff0c;美术团队交来一套20个角色、每个角色含8套动画&#xff08;待机/跑动/跳跃/攻击/受击/死亡/闪避/必杀&#xff09;的Spine资源。我兴冲冲导入God…...

告别硬编码!在UE5.1里用蓝图动态配置MySQL连接参数(控件蓝图实战)

动态配置MySQL连接&#xff1a;UE5.1控件蓝图的工程化实践在游戏开发中&#xff0c;数据库连接往往是项目架构中不可或缺的一环。传统硬编码方式虽然简单直接&#xff0c;却带来了维护困难、安全性差、灵活性低等一系列问题。本文将深入探讨如何在UE5.1中构建一个完全动态化的M…...

终极Node.js Mock工具:Mockery入门到精通实战教程

终极Node.js Mock工具&#xff1a;Mockery入门到精通实战教程 【免费下载链接】mockery Simplifying the use of mocks with Node.js 项目地址: https://gitcode.com/gh_mirrors/mock/mockery Mockery是Node.js生态中简化Mock使用的终极工具&#xff0c;它为开发者提供了…...

氘可来昔替尼常见副作用为鼻咽炎头痛及腹泻,如何应对

任何口服药物的临床价值&#xff0c;都必须在疗效与安全性的天平上找到精准的平衡点。氘可来昔替尼以PASI 75应答率的全面胜出证明了自己在银屑病治疗中的卓越地位&#xff0c;而其不良反应谱同样经过了严苛的临床验证。鼻咽炎、头痛和腹泻构成了这款药物最需关注的三大安全信号…...

PS5 NOR Modifier深度解析:如何通过Windows工具修复PS5硬件故障与实现光驱版转数字版

PS5 NOR Modifier深度解析&#xff1a;如何通过Windows工具修复PS5硬件故障与实现光驱版转数字版 【免费下载链接】PS5NorModifier The PS5 Nor Modifier is an easy to use Windows based application to rewrite your PS5 NOR file. This can be useful if your NOR is corru…...

开源三角洲机器人Delta-Robot One:从入门到精通的创客实践指南

1. 项目概述&#xff1a;一个为学习而生的开源三角洲机器人如果你对机器人感兴趣&#xff0c;但又觉得它高深莫测、无从下手&#xff0c;那么Delta-Robot One&#xff08;我们亲切地称它为“One”&#xff09;可能就是为你量身打造的入门项目。这不是一个遥不可及的工业设备&am…...

解决claude code频繁封号与token不足的taotoken接入方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 解决Claude Code频繁封号与Token不足的Taotoken接入方案 1. 问题背景&#xff1a;Claude Code用户面临的挑战 对于依赖Claude Cod…...

观察Taotoken在多模型聚合调用下的路由与失败重试效果

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken在多模型聚合调用下的路由与失败重试效果 在构建依赖大模型能力的应用时&#xff0c;服务的稳定性是开发者关注的核心…...

D2DX如何让暗黑破坏神2在4K显示器上流畅运行:5个关键技术解析

D2DX如何让暗黑破坏神2在4K显示器上流畅运行&#xff1a;5个关键技术解析 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 当…...