
后端前端CMS【免费下载链接】DjangoBlog基于Django的博客系统项目地址https://gitcode.com/gh_mirrors/dj/DjangoBlog点击查看免费下载本指南以 DjangoBlog 官方 Docker 部署文档 为骨架结合仓库内真实的docker-compose编排文件、多阶段Dockerfile、容器启动脚本与 settings.py 环境变量解析逻辑系统讲解如何用 Docker 快速、一致、隔离地部署这套基于 Django 的博客系统。读完本文你将掌握一键启动博客服务栈、可选启用 Elasticsearch 全文检索、独立镜像对接外部 MySQL以及通过环境变量完成密钥、缓存、邮件、搜索等生产配置的完整方案。1. 环境准备在开始之前确保目标服务器已安装以下软件Docker Engine容器运行时负责拉取镜像、构建镜像并运行容器Docker Compose多容器编排工具用于一次性启动 Django 应用、MySQL、Redis、Nginx 等服务。若使用 Docker DesktopmacOS/WindowsCompose 已内置无需单独安装。Linux 服务器可通过发行版对应的 Docker Engine 安装教程完成安装本文后续所有命令均假设 Docker 与 Compose 已可用并在项目根目录下执行。2. 推荐方式docker-compose 一键部署docker-compose是官方最推荐的方式它会自动创建并管理 Django 应用、MySQL 数据库、Redis 缓存、Nginx 反向代理以及可选的 Elasticsearch 全文检索服务免去手工配置依赖与网络互联的繁琐步骤。2.1 读懂服务栈仓库里的 compose 文件到底编排了什么项目根目录下可直接使用的编排文件是 deploy/docker-compose/docker-compose.yml它定义了 4 个核心服务服务镜像/构建来源对外端口作用dbmysql:latest3306博客主数据库数据挂载在命名卷mysql_datadjangoblog通过build: ../..指向仓库根目录的 Dockerfile 构建8000Django 应用本体启动时执行 deploy/entrypoint.shnginxnginx:latest80 / 443对外反向代理 静态文件服务redisredis:latest6379缓存服务供 Django 的 Redis 缓存后端使用值得注意的两个设计细节静态文件通过命名卷共享static_files命名卷同时挂载到djangoblog容器的/code/djangoblog/collectedstatic和nginx容器的/code/djangoblog/collectedstatic:ro。Django 容器执行collectstatic后Nginx 可以直接以只读方式服务静态资源见 deploy/nginx.conf 中location /static/的alias配置。Nginx 作为唯一入口Nginx 监听 80/443 端口将非静态请求通过proxy_pass http://djangoblog:8000转发给 Djangodeploy/nginx.conf。因此访问博客时用的是80 端口而不是 Django 的 8000 端口。2.2 步骤 1启动基础服务Django MySQL Redis Nginx在项目根目录执行# 构建镜像并以后台模式启动所有基础服务 docker-compose up -d --builddocker-compose会读取 compose 文件自动拉取mysql:latest、redis:latest、nginx:latest并使用仓库根目录的 Dockerfile 构建 Django 应用镜像随后按依赖顺序db→djangoblog→nginx启动全部容器。访问博客服务启动后浏览器访问http://127.0.0.1即可看到博客首页Nginx 端口 80 转发到 Django 8000。数据持久化MySQL 数据保存在命名卷mysql_data挂载至容器内/var/lib/mysqlRedis 与 Nginx 无需持久化。即使容器被删除重建数据库内容也不会丢失。查看启动状态与日志可用docker-compose ps查看各服务状态用docker-compose logs -f djangoblog跟踪 Django 应用日志。2.3 步骤 2可选启用 Elasticsearch 全文搜索DjangoBlog 的全文搜索默认使用内置 Whoosh 索引若希望获得更强大的全文检索能力支持中文 IK 分词、关键词高亮可以叠加加载 ES 编排文件# 同时加载基础编排与 ES 编排构建并后台启动全部服务 docker-compose -f docker-compose.yml -f deploy/docker-compose/docker-compose.es.yml up -d --builddocker-compose.es.yml 额外定义了es服务镜像liangliangyy/elasticsearch-analysis-ik:8.6.1已内置 IK 中文分词插件单节点模式discovery.typesingle-nodeJVM 堆内存限制 512MB数据目录挂载到宿主./bin/datas/es/kibana服务kibana:8.6.1通过ELASTICSEARCH_HOSTShttp://es:9200连接 ES便于可视化查看索引数据。启用 ES 后Django 端通过DJANGO_ELASTICSEARCH_HOST环境变量设为es:9200切换搜索引擎后端详见本文第 5 节的环境变量解析。2.4 步骤 3首次运行的初始化操作容器首次启动后需要进入djangoblog容器执行初始化命令# 进入 djangoblog 应用容器 docker-compose exec web bash说明compose 文件中的服务名为djangoblogcontainer_name: djangoblog文档中示例使用web为服务名若提示找不到服务请改用docker-compose exec djangoblog bash。在容器内依次执行# 创建超级管理员账户按提示设置用户名、邮箱和密码 python manage.py createsuperuser # 可选创建一些测试数据便于快速体验功能 python manage.py create_testdata # 可选如果启用了 ES重建全文搜索索引 python manage.py rebuild_index # 退出容器 exit其中create_testdata是仓库内置的 管理命令rebuild_index由 django-haystack 提供而仓库自身也封装了 build_index 命令容器启动时会被自动调用一次。创建管理员后即可通过http://127.0.0.1/admin/进入后台管理。3. 深入容器启动链路镜像构建与 entrypoint 自动初始化理解 DjangoBlog 镜像的构建与启动过程有助于排查部署问题。镜像构建采用两阶段多阶段构建见 DockerfileStage 1前端构建基于node:20-alpine复制frontend/与templates/执行npm ci与npm run build用 Vite 将 Alpine.js Tailwind CSS HTMX 前端资源打包输出到blog/static/blog/distStage 2运行镜像基于python:3.11安装default-libmysqlclient-dev、gettext等系统依赖安装 requirements.txt 中的 Python 依赖以及gunicorn[gevent]拷贝应用代码并将 Stage 1 构建好的前端资源复制进镜像最后把 deploy/entrypoint.sh 设为ENTRYPOINT。容器启动时deploy/entrypoint.sh 会按序自动完成一整串初始化动作任一环节失败即退出|| exit 1python manage.py makemigrations \ python manage.py migrate \ python manage.py collectstatic --noinput \ python manage.py compress --force \ python manage.py build_index \ python manage.py compilemessages随后以gunicorn djangoblog.wsgi:application启动生产服务器使用 gevent worker 类、4 个线程监听0.0.0.0:8000。这意味着只要镜像启动数据库迁移、静态资源收集、搜索索引构建都会自动完成无需手工执行migrate与collectstatic这也是 Docker 部署比传统裸机部署更省心的原因之一。4. 备选方式使用独立 Docker 镜像对接外部 MySQL如果你已经有一套运行中的外部 MySQL不需要 compose 中的db服务也可以只运行 DjangoBlog 应用镜像# 从 Docker Hub 拉取最新镜像 docker pull liangliangyy/djangoblog:latest # 运行容器并通过环境变量链接到外部数据库 docker run -d \ -p 8000:8000 \ -e DJANGO_SECRET_KEYyour-strong-secret-key \ -e DJANGO_MYSQL_HOSTyour-mysql-host \ -e DJANGO_MYSQL_USERyour-mysql-user \ -e DJANGO_MYSQL_PASSWORDyour-mysql-password \ -e DJANGO_MYSQL_DATABASEdjangoblog \ --name djangoblog \ liangliangyy/djangoblog:latest访问博客启动完成后访问http://127.0.0.1:8000该方式没有 Nginx 前置直接暴露 Django 端口。创建管理员docker exec -it djangoblog python manage.py createsuperuser。此方式的关键在于镜像内部的所有外部依赖数据库、缓存、邮件、搜索都通过环境变量注入因此务必先确认外部 MySQL 的库名、账号密码与网络连通性。生产环境中还应在数据库侧为博客库创建专用账号避免使用权限过大的 root。5. 配置说明环境变量全表与 settings.py 解析原理DjangoBlog 的大部分配置都通过环境变量管理在docker-compose.yml的environment段中修改或在docker run时用-e参数传入。官方文档给出的环境变量清单如下环境变量名称默认值/示例备注DJANGO_SECRET_KEYyour-strong-secret-key务必修改为随机且复杂的字符串DJANGO_DEBUGFalse是否开启 Django 调试模式DJANGO_MYSQL_HOSTmysql数据库主机名DJANGO_MYSQL_PORT3306数据库端口DJANGO_MYSQL_DATABASEdjangoblog数据库名称DJANGO_MYSQL_USERroot数据库用户名DJANGO_MYSQL_PASSWORDdjangoblog_123数据库密码DJANGO_REDIS_URLredis:6379/0Redis 连接地址用于缓存DJANGO_ELASTICSEARCH_HOSTelasticsearch:9200Elasticsearch 主机地址DJANGO_EMAIL_HOSTsmtp.example.org邮件服务器地址DJANGO_EMAIL_PORT465邮件服务器端口DJANGO_EMAIL_USERuserexample.org邮件账户DJANGO_EMAIL_PASSWORDyour-email-password邮件密码DJANGO_EMAIL_USE_SSLTrue是否使用 SSLDJANGO_EMAIL_USE_TLSFalse是否使用 TLSDJANGO_ADMIN_EMAILadminexample.org接收异常报告的管理员邮箱DJANGO_BAIDU_NOTIFY_URLhttp://data.zz.baidu.com/...百度站长平台的推送接口5.1 这些变量在 settings.py 中如何生效阅读 djangoblog/settings.py 可以看到每个变量对应的底层解析逻辑这决定了配置的优先级与行为数据库settings.py#L108-L119DJANGO_MYSQL_DATABASE/USER/PASSWORD/HOST/PORT逐一映射到DATABASES[default]未设置时回退到本地默认值djangoblog/root/root/127.0.0.1/3306连接字符集固定为utf8mb4。调试模式settings.py#L34通过env_to_bool解析未设置时默认Truecompose 编排中显式设置DJANGO_DEBUGFalse。生产环境务必保持False以关闭调试页信息泄露并启用异常邮件上报。密钥settings.py#L31-L32优先取DJANGO_SECRET_KEY未设置时使用代码内置的默认密钥——该默认值公开在仓库中生产部署必须覆盖。Redis 缓存settings.py#L295-L301仅当设置了DJANGO_REDIS_URL时缓存后端才从本地内存LocMemCache切换为django.core.cache.backends.redis.RedisCache连接串为redis://{DJANGO_REDIS_URL}。Elasticsearchsettings.py#L210-L250一旦检测到DJANGO_ELASTICSEARCH_HOST就会构建ELASTICSEARCH_DSL支持verify_certs、用户名密码、API Key、证书认证等可选认证方式并将 django-haystack 的连接引擎切换为 djangoblog/elasticsearch_backend.py 中的ElasticSearchEngine否则回退到 djangoblog/whoosh_cn_backend.py 的 Whoosh 引擎。邮件settings.py#L307-L318DJANGO_EMAIL_HOST/PORT/USER/PASSWORD映射到 SMTP 配置注意代码读取的 SSL/TLS 开关变量名实际为DJANGO_EMAIL_SSL与DJANGO_EMAIL_TLS默认True/FalseDJANGO_ADMIN_EMAIL则写入ADMINS用于 Django 异常时的邮件告警。百度推送settings.py#L304-L305DJANGO_BAIDU_NOTIFY_URL供 ping_baidu 管理命令 使用用于新内容发布后向百度站长平台推送收录。5.2 部署后的配置检查清单部署完成后务必按实际需求复查以下项目DJANGO_SECRET_KEY替换为随机长字符串可用python -c import secrets; print(secrets.token_urlsafe(50))生成数据库与 Redis 密码compose 示例中的密码为演示值正式环境应修改 compose 文件中MYSQL_ROOT_PASSWORD与DJANGO_MYSQL_PASSWORD保持两者一致邮件服务配置真实的 SMTP 账户否则评论回复、密码找回等邮件功能不可用域名相关ALLOWED_HOSTS与CSRF_TRUSTED_ORIGINSsettings.py#L39-L41默认包含示例值绑定自定义域名后需在源码中调整为实际域名并在 Nginx 侧完成 443 HTTPS 配置静态资源缓存Nginx 对/static/设置了expires max前端资源更新后若出现缓存未刷新可清理浏览器缓存或调整 Nginx 缓存策略。6. 容器日常运维与常见问题查看/跟随日志docker-compose logs -f查看全部服务日志docker-compose logs -f djangoblog单独跟踪应用日志日志文件同时写入/code/djangoblog/logs对应宿主./logs目录。重建容器修改 compose 配置或升级镜像后执行docker-compose up -d --build会重建受影响的容器数据卷中的数据库与静态文件不会丢失。数据备份MySQL 数据位于命名卷mysql_data可通过docker run --rm -v djangoblog_mysql_data:/var/lib/mysql -v $(pwd):/backup alpine tar czf /backup/mysql_backup.tar.gz -C /var/lib/mysql .一类命令备份uploads目录图床/用户上传则直接映射到宿主./uploads注意一并纳入备份。ES 内存占用docker-compose.es.yml 为 ES 设置了-Xms512m -Xmx512m的 JVM 堆限制若宿主机内存紧张可下调该值但不宜低于 256MB。端口冲突compose 将 3306、6379、80、443 全部映射到宿主若本机已有 MySQL/Redis/Nginx 占用可修改 compose 中的ports映射如3307:3306。若需要将方案进一步扩展为 Kubernetes 集群部署仓库还提供了完整的 Kubernetes 部署指南含deploy/k8s/下的 deployment、service、pv/pvc、configmap 等清单可作为容器化部署的进阶参考。总体而言采用 docker-compose 方案即可在几分钟内获得一套包含数据库、缓存、反向代理与可选全文搜索的完整博客服务且所有关键配置均可通过环境变量在部署时灵活注入非常适合个人博客与中小型内容站点的快速上线与后续迁移。赞分享后端前端CMS【免费下载链接】DjangoBlog基于Django的博客系统项目地址https://gitcode.com/gh_mirrors/dj/DjangoBlog点击查看免费下载相关推荐百度网盘秒传脚本终极指南5分钟掌握永久文件分享的黑科技百度网盘秒传脚本终极指南5分钟掌握永久文件分享的黑科技 你是否厌倦了百度网盘链接频繁失效的烦恼是否想要一种一劳永逸的文件分享方式今天我要向你介绍一个让文件后端前端CMSEtherpad Docker 部署完全指南镜像拉取、自定义构建、环境变量配置与 Docker Compose 实战Etherpad Docker 部署完全指南镜像拉取、自定义构建、环境变量配置与 Docker Compose 实战 导读 本文基于 Etherpad 官方仓后端协同办公WebSocket前端富文本QUANTAXIS Docker Compose配置一键启动完整量化环境QUANTAXIS Docker Compose配置一键启动完整量化环境 你还在为量化交易环境搭建耗费数小时还在因依赖冲突、端口占用、数据库配置等问题焦头烂金融科技后端数据分析上一篇Ceph Octopus 系列发布说明深度解析v15.2 版本演进、关键修复与升级实践指南下一篇Delta模拟器让经典游戏重获新生的5个实用技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考