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

相关推荐
辉的技术笔记3 小时前
Dify 自部署为什么跑不动?6 层瓶颈诊断法教你定位
docker
你好潘先生8 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师8 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码8 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
copyer_xyf8 小时前
FastAPI 如何连接 MySQL
后端·python
apocelipes21 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
用户8356290780511 天前
使用 Python 在 PDF 中创建与管理书签
后端·python
程序员老赵1 天前
Docker 部署 Redmine:老牌开源项目管理部署实测记录
docker·开源·团队管理
程序员老赵1 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
MeixianAgent1 天前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python