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项目的性能。

相关推荐
benchmark_cc4 小时前
前复权数据每天可能变化,历史数据库应该覆盖还是保留原始价格?
大数据·python·pandas·量化交易·股票数据·quantdash
计算机编程指导师4 小时前
计算机毕设选题推荐:Hadoop大数据下的个体肥胖健康风险评估与可视化系统源码 毕业设计 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·肥胖健康风险
code2cat4 小时前
【随笔】MCP输入Schema:把参数错误拦在工具执行之前
python·json schema·ai agent·mcp
余醉 | dtminer4 小时前
56%的保护效应藏在乳腺密度里:Nat Commun 高分中介孟德尔随机化全 R 管线拆解(附核心图)
开发语言·r语言·孟德尔随机化
2501_933923254 小时前
SpringCloud组件:Eureka服务注册与发现
java·开发语言·后端·spring cloud·eureka
计算机编程指导师5 小时前
Python大数据毕设怎么写?Django结合Hadoop+Spark京东销售分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·京东商品
合尘猫5 小时前
AI 项目上线就停:一次事件循环阻塞的完整排查过程
人工智能·后端·python
染指11105 小时前
142.Agent-多Agent框架-通过Skills实现多Agent
开发语言·人工智能·python·langchain·agents
天国梦5 小时前
国密门禁品牌怎么选?2026年最新3个避坑要点
运维·服务器·数据库·python
好好学习O(∩_∩)O5 小时前
[QT] 多线程moveToThread 和易踩的8个坑
开发语言·qt