Python web实战 | 用Docker部署Django项目


1. Docker与Django

为什么要使用Docker来部署Django项目?这是因为Docker提供了一个独立、一致的环境,让开发者可以在任何地方运行他们的应用程序,而不用担心环境配置问题。这就像是你有一个可以装下所有工具和材料的宝箱,无论你走到哪里,都可以随时随地开始工作。

好了,废话不多说,我们开始吧!

1.1 安装Docker

先安装Docker。在终端输入以下命令:

复制代码
sudo apt-get update
sudo apt-get install docker-ce

然后,用这个命令来验证Docker是否安装成功:

复制代码
docker --version

如果你看到了Docker的版本号,那就说明你成功了!请给自己一点掌声。👏

1.2 创建Django项目

接下来,我们要创建一个新的Django项目。在终端输入以下命令:

复制代码
django-admin startproject myproject

然后进入项目目录:

复制代码
cd myproject

这样你的Django项目就已经创建好了。

2. Docker化你的Django项目

接下来就是把你的Django项目放到Docker中去。

2.1 创建Dockerfile

首先需要创建一个Dockerfile。在你的项目根目录下创建一个新的文件,名字就叫做Dockerfile。在这个文件里,我们要写下如何在Docker中创建一个可以运行你的Django项目的环境。

复制代码
# Dockerfile
FROM python:3.9
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

2.2 创建docker-compose.yml文件

接着还需要一个docker-compose.yml文件。这个文件会告诉Docker如何运行你的项目。

复制代码
# docker-compose.yml
version: "3.8"
services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - 8000:8000

2.3 构建和运行Docker容器

最后,使用以下命令来构建和运行Docker容器:

复制代码
docker-compose up

如果一切顺利的话,你现在应该可以在浏览器里访问 http://localhost:8000 来查看你的Django项目了。

3. Nginx

Nginx是一个高性能的HTTP和反向代理服务器,它可以帮助我们将Docker中运行的Django项目暴露给外部网络。这样,我们的Django项目就可以在互联网上被访问了。

3.1 在Docker容器中安装Nginx

首先,我们需要在Docker容器中安装Nginx。我们可以在Dockerfile中添加以下命令:

复制代码
# Dockerfile
FROM python:3.9
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
RUN apt-get update && apt-get install -y nginx

3.2 配置Nginx

然后,我们需要配置Nginx。我们可以在项目根目录下创建一个新的文件,名字叫做nginx.conf。在这个文件里,我们要写下如何配置Nginx。

复制代码
# nginx.conf
server {
    listen 80;
    server_name localhost;
    location / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

3.3 在Dockerfile中添加Nginx配置文件

接着,我们需要在Dockerfile中添加Nginx配置文件。

复制代码
# Dockerfile
FROM python:3.9
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
RUN apt-get update && apt-get install -y nginx
COPY nginx.conf /etc/nginx/sites-enabled/
RUN service nginx start

4. MySQL

MySQL是一种关系型数据库管理系统,它可以帮助我们存储和管理我们的Django项目的数据。

4.1 安装MySQL

首先,我们需要在Docker容器中安装MySQL。我们可以在Dockerfile中添加以下命令:

复制代码
# Dockerfile
FROM python:3.9
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
RUN apt-get update && apt-get install -y nginx mysql-server
COPY nginx.conf /etc/nginx/sites-enabled/
RUN service nginx start

4.2 配置MySQL

可以在项目根目录下创建一个新的文件,名字叫做my.cnf。在这个文件里,我们要写下如何配置MySQL。

复制代码
# my.cnf
[mysqld]
bind-address = 0.0.0.0

4.3 在Dockerfile中添加MySQL配置文件

接着需要在Dockerfile中添加MySQL配置文件。

复制代码
# Dockerfile
FROM python:3.9
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
RUN apt-get update && apt-get install -y nginx mysql-server
COPY nginx.conf /etc/nginx/sites-enabled/
COPY my.cnf /etc/mysql/my.cnf
RUN service nginx start
RUN service mysql start

5. 技术总结

现在,你的Django项目已经在一个独立、一致的环境中运行,并且可以通过Nginx在互联网上被访问。

这些技术背后,还有更深、更广的知识等待你去探索。比如,你可以尝试用Docker Swarm或者Kubernetes来管理你的Docker容器,或者用Gunicorn或者uWSGI来提高你的Django项目的性能。

相关推荐
数据知道6 小时前
Java 安全审计实战:SSRF、反序列化、SpEL 注入
java·开发语言·安全·网络安全
陈年老古董6 小时前
矿物分类数据处理:缺失值填充方法详解
开发语言·python·机器学习·项目
晚风醉蝶6 小时前
1-18-基数排序-RadixSort
python·算法·排序算法·基数排序
今天AI了吗6 小时前
从“金鱼脑”到“大象记忆”:AI Agent 短期记忆与长期记忆的存储与检索全解
数据库·人工智能·python·sql·rust
whcyhhh6 小时前
头歌实践教学平台:数据科学与大数据技术导论(十八4)
大数据·开发语言·python
编码者卢布6 小时前
【Azure Developer】通过 API 获取 Azure VM 信息实践指南 Part 2(Azure China)
python·flask·azure
65岁退休Coder7 小时前
LangGraph v1.2.9 核心概念 & 流程控制
后端·python·langchain
IPdodo_7 小时前
2026年AI 数据采集代理 IP 选型:成功率、并发、轮换与成本评估
前端·网络·人工智能·chrome·python·http·网络调试
z落落7 小时前
C# Modbus-RTU 串口读写设备+CRC16+邮件告警
开发语言·c#
DS随心转小程序7 小时前
Gemini只能导出了一部分Word文档,很少的一部分,不是我这个窗口所有的对话内容?
开发语言·人工智能·c#·word·豆包·deepseek·ai导出鸭