惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Schneier on Security
The Last Watchdog
The Last Watchdog
Cyberwarzone
Cyberwarzone
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
The Cloudflare Blog
V
V2EX
博客园_首页
博客园 - 聂微东
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
G
GRAHAM CLULEY
T
Tenable Blog
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
SecWiki News
SecWiki News
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
T
Troy Hunt's Blog
博客园 - 【当耐特】
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
A
About on SuperTechFans
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
D
DataBreaches.Net
P
Privacy & Cybersecurity Law Blog
Schneier on Security
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
D
Docker
P
Proofpoint News Feed

艾自由网 | ifree6.cn

忙碌的六月 | 艾自由网 | ifree6.cn 2026年下半年全国计算机等级考试通知 | 艾自由网 | ifree6.cn 难眠一个夜晚 | 艾自由网 | ifree6.cn 【电脑软件】Tabby—终端工具 | 艾自由网 | ifree6.cn 如何使用docker部署Django网站 | 艾自由网 | ifree6.cn 【电脑软件】Bruno—API测试工具 | 艾自由网 | ifree6.cn 【课程】FastAPI后端开发入门到精通 | 艾自由网 | ifree6.cn 学校一年一度的趣味运动会 | 艾自由网 | ifree6.cn 《儿科学》第10版PDF | 艾自由网 | ifree6.cn 湖南师范大学特种设备(快开门式压力容器R1)考试经验 | 艾自由网 | ifree6.cn 事业单位的岗位等级划分 | 艾自由网 | ifree6.cn 【电脑软件】SPlayer—本地音乐播放器 | 艾自由网 | ifree6.cn 【电脑软件】LDDC—歌词下载工具 | 艾自由网 | ifree6.cn
如何使用宝塔和Docker部署Django网站 | 艾自由网 | ifree6.cn
小艾同学 · 2026-06-20 · via 艾自由网 | ifree6.cn

一、准备工作

1.一台有公网IP的云服务器;

2.一台联网的电脑;

3.已准备好的Django项目文件(配置文件DEBUG=FALSE)。常用命令如下:

# 生成依赖文件
pip freeze > requirements.txt

# 收集静态文件
python manage.py collectstatic

# 检查迁移文件
python manage.py makemigrations
python manage.py migrate

二、开始安装

下面是网站的架构图:

Nginx (80)
                    ↓
        ┌─────────────────────┐
        │     Vue Frontend    │
        │   (dist 静态文件)    │
        └─────────────────────┘
                    ↓
        ┌─────────────────────┐
        │    Django API       │
        │   (Gunicorn)        │
        └─────────────────────┘
                    ↓
        ┌─────────────────────┐
        │    MySQL 8.0        │
        └─────────────────────┘

下面是文件的目录结构 :

/www/dk_project/ibrush/
│
├── ibrush_end/              # Django
│   ├── Dockerfile
│   ├── requirements.txt
│   ├── manage.py
│   └── ibrush_end/
│
├── ibrush_font/             # Vue build 后的 dist
│   └── dist/
│
├── mysql/
│   └── data/            # 数据持久化
│
├── nginx/
│   └── default.conf
│  
├── ibrush_db.sql      # 本地数据库
│
└── docker-compose.yml     # 完整配置文件

(一)部署后端Django及依赖

1.使用SSH连接服务器,登录后,输入以下命令安装宝塔面板(debian系统):

wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && bash install_panel.sh ed8484bec

2.前往云服务器官网,在安全组(防火墙)放行前端、后端宝塔登录端口(你的可能不同,以终端显示为准),然后保存一下终端里面的宝塔登录信息。提示:如果不放行端口,会一直报502错误,我就遇到了这一个大坑(还以为是我网站配置文件有问题,浪费了大量时间)。

==================================================================
Congratulations! Installed successfully!

========================面板账户登录信息==========================

 【云服务器】请在安全组放行 36666 端口
 外网ipv4面板地址: https://44.66.16.91:36666/fg12bfg5
 内网面板地址:     https://172.22.23.2:36666/fg12bfg5
 username: w321p3uf
 password: feddddf2

3.通过外网地址,登录宝塔,首次登录会弹出以下窗口,选择Docker套件即可。

4.将django项目文件(ibrush)上传到“/www/dk_project/wwwroot/”目录,然后解压,再确保项目中有以下文件(没有则需手动创建):

Dockerfile
docker-compose.yml
requirements.txt
manage.py

其中,Dockerfile文件内容如下(Python版本指定到3.10就可以了,不要细化到3.10.x,否则可能出错):

FROM python:3.10

WORKDIR /app

COPY . /app

RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

EXPOSE 8000

CMD ["gunicorn", "ibrush_end.wsgi:application", "--bind", "0.0.0.0:8000"]

5.检查刚才上传到服务器上的django配置文件“settings.py”,以下关键内容是否设置好:

# 设置了密钥
from django.core.management.utils import get_random_secret_key
SECRET_KEY = get_random_secret_key()

# 关闭debug
DEBUG = False

# 允许指定的前端访问
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = ['http://8.163.117.91:8080', ]
CSRF_TRUSTED_ORIGINS = ['http://8.163.117.91:8080', ]

如果你修改了配置文件,需要重启django容器,命令如下:

docker compose restart backend

(二)部署MySQL数据库

1.在ibrush目录下,创建一个新目录“mysql”,再在“mysql”里面创建一个目录“data”。

2.将本地的sql文件上传到“ibrush”目录下,切换到当前目录,然后执行以下命令(-p后的密码需要替换成你的)将数据库导入:

docker exec -i ibrush_mysql mysql -u root -p12345678 ibrush_db < ibrush_db.sql

3.执行下面的命令(-p后的密码需要替换成你的),如果看到表,说明就导入成功了:

docker exec -it ibrush_mysql mysql -u root -p12345678 -e "show tables;" ibrush_db

(三)部署前端VUE项目

1.在ibrush目录下,创建一个新目录“ibrush_front”。

2.将打包好的前端项目(名字为dist)上传到此,然后解压。

(四)部署Nginx

1.在ibrush目录下,创建一个新目录“nginx”。

2.进入新目录,创建一个“default.conf”文件,内容如下:

server {
    listen 80;

    # 前端
    location / {
        root /usr/share/nginx/html;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    # 后端API
    location /api/ {
        proxy_pass http://backend:8000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 静态文件
    location /static/ {
        alias /app/staticfiles/;
    }

    location /media/ {
        alias /app/media/;
    }
}

(五)构建容器

在网站目录(/www/dk_project/wwwroot/ibrush)内,创建一个“docker-compose.yml”文件。

内容如下(注意django配置文件的数据库信息改成'HOST': 'db'):

version: "3.8"

services:

  db:
    image: mysql:8.0
    container_name: ibrush_mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 1234
      MYSQL_DATABASE: ibrush_db
      MYSQL_USER: ibrush
      MYSQL_PASSWORD: 1234
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password

  backend:
    build: ./ibrush_end
    container_name: ibrush_django
    restart: always
    ports:
      - "8000:8000"
    depends_on:
      - db
    volumes:
      - ./ibrush_end:/app
    working_dir: /app
    command: gunicorn ibrush_end.wsgi:application -b 0.0.0.0:8000

  nginx:
    image: nginx:latest
    container_name: ibrush_nginx
    ports:
      - "8080:80"
    volumes:
      - ./ibrush_font/dist:/usr/share/nginx/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - backend

5.创建Docker容器。首先,在宝塔的Docker设置中,添加一个加速url(https://docker.1ms.run),因为拉取国外镜像会被墙。然后用SSH连接服务器,依次输入以下命令:

# 切换到项目目录
cd /www/dk_project/wwwroot/ibrush

# 构建镜像
docker compose build

# 启动全部服务
docker compose up -d

# 初始化数据库
docker exec -it ibrush_django bash
python manage.py migrate
python manage.py createsuperuser

出现以下的类似内容,表示镜像构建完成:

提示:如果修改了“docker-compose.yml”文件,每次都需要先停止并删除旧容器,再重新创建容器并启动,可使用以下命令:

docker compose down
docker compose up -d

现在,通过“ip+端口”的方式,应该就可以正常访问前端和后端了。其实只需要记得前端的“ip+端口”分享给好友就行,后端是给我们自己开发看的。

当然,为了更加安全,你也可以将ip更换成域名,再套上CDN等。