You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

7.0 KiB

使用 Docker 部署 DjangoBlog

Docker Pulls Docker Image Version (latest by date) Docker Image Size (latest by date)

本项目全面支持使用 Docker 进行容器化部署,为您提供了快速、一致且隔离的运行环境。我们推荐使用 docker-compose 来一键启动整个博客服务栈。

1. 环境准备

在开始之前,请确保您的系统中已经安装了以下软件:

2. 推荐方式:使用 docker-compose (一键部署)

这是最简单、最推荐的部署方式。它会自动为您创建并管理 Django 应用、MySQL 数据库,以及可选的 Elasticsearch 服务。

步骤 1: 启动基础服务

在项目根目录下,执行以下命令:

# 构建并以后台模式启动容器 (包含 Django 应用和 MySQL)
docker-compose up -d --build

docker-compose 会读取 docker-compose.yml 文件,自动拉取所需镜像、构建项目镜像,并启动所有服务。

  • 访问您的博客: 服务启动后,在浏览器中访问 http://127.0.0.1 即可看到博客首页。
  • 数据持久化: MySQL 的数据文件将存储在项目根目录下的 data/mysql 文件夹中,确保数据在容器重启后不丢失。

步骤 2: (可选) 启用 Elasticsearch 全文搜索

如果您希望使用 Elasticsearch 提供更强大的全文搜索功能,可以额外加载 docker-compose.es.yml 配置文件:

# 构建并以后台模式启动所有服务 (Django, MySQL, Elasticsearch)
docker-compose -f docker-compose.yml -f deploy/docker-compose/docker-compose.es.yml up -d --build
  • 数据持久化: Elasticsearch 的数据将存储在 data/elasticsearch 文件夹中。

步骤 3: 首次运行的初始化操作

当容器首次启动后,您需要进入容器来执行一些初始化命令。

# 进入 djangoblog 应用容器
docker-compose exec web bash

# 在容器内执行以下命令:
# 创建超级管理员账户 (请按照提示设置用户名、邮箱和密码)
python manage.py createsuperuser

# (可选) 创建一些测试数据
python manage.py create_testdata

# (可选,如果启用了 ES) 创建索引
python manage.py rebuild_index

# 退出容器
exit

3. 备选方式:使用独立的 Docker 镜像

如果您已经拥有一个正在运行的外部 MySQL 数据库,您也可以只运行 DjangoBlog 的应用镜像。

# 从 Docker Hub 拉取最新镜像
docker pull liangliangyy/djangoblog:latest

# 运行容器,并链接到您的外部数据库
docker run -d \
  -p 8000:8000 \
  -e DJANGO_SECRET_KEY='your-strong-secret-key' \
  -e DJANGO_MYSQL_HOST='your-mysql-host' \
  -e DJANGO_MYSQL_USER='your-mysql-user' \
  -e DJANGO_MYSQL_PASSWORD='your-mysql-password' \
  -e DJANGO_MYSQL_DATABASE='djangoblog' \
  --name djangoblog \
  liangliangyy/djangoblog:latest
  • 访问您的博客: 启动完成后,访问 http://127.0.0.1:8000
  • 创建管理员: docker exec -it djangoblog python manage.py createsuperuser

4. 配置说明 (环境变量)

本项目的大部分配置都通过环境变量来管理。您可以在 docker-compose.yml 文件中修改它们,或者在使用 docker run 命令时通过 -e 参数传入。

环境变量名称 默认值/示例 备注
DJANGO_SECRET_KEY your-strong-secret-key 请务必修改为一个随机且复杂的字符串!
DJANGO_DEBUG False 是否开启 Django 的调试模式
DJANGO_MYSQL_HOST mysql 数据库主机名
DJANGO_MYSQL_PORT 3306 数据库端口
DJANGO_MYSQL_DATABASE djangoblog 数据库名称
DJANGO_MYSQL_USER root 数据库用户名
DJANGO_MYSQL_PASSWORD djangoblog_123 数据库密码
DJANGO_REDIS_URL redis:6379/0 Redis 连接地址 (用于缓存)
DJANGO_ELASTICSEARCH_HOST elasticsearch:9200 Elasticsearch 主机地址
DJANGO_EMAIL_HOST smtp.example.org 邮件服务器地址
DJANGO_EMAIL_PORT 465 邮件服务器端口
DJANGO_EMAIL_USER user@example.org 邮件账户
DJANGO_EMAIL_PASSWORD your-email-password 邮件密码
DJANGO_EMAIL_USE_SSL True 是否使用 SSL
DJANGO_EMAIL_USE_TLS False 是否使用 TLS
DJANGO_ADMIN_EMAIL admin@example.org 接收异常报告的管理员邮箱
DJANGO_BAIDU_NOTIFY_URL http://data.zz.baidu.com/... 百度站长平台 的推送接口

部署完成后,请务必检查并根据您的实际需求调整这些环境变量,特别是 DJANGO_SECRET_KEY 和数据库、邮件相关的配置。