前言Discuz! X5.0 是基于 MitFrame 内核全新重构的社区论坛系统全面拥抱 OAuth2.0 的 RESTful API 接口。本文将详细介绍如何在 CentOS 10 系统上使用 Docker Compose 部署最新版 Discuz X5.0 论坛。环境要求项目要求操作系统CentOS 10 StreamDocker20.10本文使用 29.7.2Docker Composev2.0本文使用 v5.4.0PHP8.0容器内使用 8.1数据库MySQL 8.0架构设计浏览器 → Nginx容器(80端口) → Discuz容器(PHPApache) → MySQL容器三个容器通过 Docker 自定义网络discuz_network互相通信。安装步骤第一步检查环境# 检查 Docker 版本docker--version# 检查 Docker Compose 版本dockercompose version# 确保 Docker 服务正常运行sudosystemctl statusdocker第二步创建项目目录结构# 创建项目主目录mkdir-p~/discuz-project/{discuz/html,nginx/conf.d,mysql/data}# 进入项目目录cd~/discuz-project第三步下载 Discuz X5.0 源码官方下载地址https://www.discuz.vip/download使用官方提供的下载脚本# 创建临时下载目录sudomkdir-p/var/www/discuzcd/var/www/discuz# 下载并运行官方安装脚本cd~if[-f/usr/bin/curl];thencurl-sSLOhttps://download.discuz.vip/install/X5.0.sh;elsewget-OX5.0.sh https://download.discuz.vip/install/X5.0.sh;fi;sudobashX5.0.sh# 脚本会询问域名绑定的目录填写/var/www/discuz复制文件到项目目录# 复制 Discuz 文件到项目目录cd~/discuz-project/discuzsudocp-r/var/www/discuz/* html/# 设置权限sudochown-R$USER:$USERhtml/chmod-R755html/mkdir-phtml/{config,data}chmod-R777html/{config,data}第四步创建 Discuz 的 Dockerfilecd~/discuz-project/discuzcatDockerfileEOF FROM php:8.1-apache # 安装必要的 PHP 扩展 RUN apt-get update apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ libxml2-dev \ libzip-dev \ unzip \ docker-php-ext-configure gd --with-freetype --with-jpeg \ docker-php-ext-install -j$(nproc) gd \ docker-php-ext-install mysqli pdo pdo_mysql xml zip # 启用 Apache 重写模块 RUN a2enmod rewrite # 设置工作目录 WORKDIR /var/www/html # 复制 Discuz 文件 COPY html/ /var/www/html/ # 设置权限 RUN chown -R www-data:www-data /var/www/html \ chmod -R 755 /var/www/html \ chmod -R 777 /var/www/html/config /var/www/html/data # 暴露端口 EXPOSE 80 # 启动 Apache CMD [apache2-foreground] EOF第五步创建 Nginx 配置mkdir-p~/discuz-project/nginx/conf.dcat~/discuz-project/nginx/conf.d/discuz.confEOF server { listen 80; server_name 192.168.6.102;# 此处修改成你自己的ip access_log /var/log/nginx/discuz_access.log; error_log /var/log/nginx/discuz_error.log; location / { proxy_pass http://discuz_app:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 20m; } # 静态文件处理 location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ { proxy_pass http://discuz_app:80; proxy_set_header Host $host; expires 30d; add_header Cache-Control public, immutable; } } EOF第六步创建 docker-compose.ymlcd~/discuz-projectcatdocker-compose.ymlEOF services: mysql: image: mysql:8.0 container_name: discuz_mysql restart: always environment: MYSQL_ROOT_PASSWORD: root123456 MYSQL_DATABASE: discuz MYSQL_USER: discuz MYSQL_PASSWORD: discuz123456 volumes: - ./mysql/data:/var/lib/mysql command: --default-authentication-pluginmysql_native_password --max_allowed_packet64M networks: - discuz_network discuz: build: ./discuz container_name: discuz_app restart: always volumes: - ./discuz/html:/var/www/html depends_on: - mysql networks: - discuz_network nginx: image: nginx:alpine container_name: discuz_nginx restart: always ports: - 80:80 - 443:443 volumes: - ./nginx/conf.d:/etc/nginx/conf.d depends_on: - discuz networks: - discuz_network networks: discuz_network: driver: bridge EOF第七步启动服务cd~/discuz-project# 构建并启动所有服务dockercompose up-d# 查看服务状态dockercomposeps# 查看启动日志dockercompose logs-f第八步完成安装1. 访问安装向导在浏览器打开http://192.168.6.102/install/2. 填写数据库信息数据库服务器地址: discuz_mysql 数据库名: discuz 数据库用户名: discuz 数据库密码: discuz123456 数据表前缀: pre_ 系统信箱 Email: adminadmin.com3. 填写管理员信息管理员账号: admin 管理员密码: 设置强密码至少8位 重复密码: 再次输入 管理员 Email: adminadmin.com4. 完成安装后# 删除安装目录安全dockerexecdiscuz_apprm-rf/var/www/html/install# 设置正确权限dockerexecdiscuz_appchmod-R755/var/www/htmldockerexecdiscuz_appchmod-R777/var/www/html/datadockerexecdiscuz_appchmod-R777/var/www/html/config第九步访问论坛前台首页http://192.168.6.102/ 后台管理http://192.168.6.102/admin.php常见问题解决1. 端口被占用# 查看 80 端口占用ss-tuln|grep:80# 停止占用进程或修改 docker-compose.yml 中的端口映射2. 数据库连接失败# 测试容器间网络dockerexecdiscuz_apppingdiscuz_mysql# 测试数据库连接dockerexecdiscuz_app php-r try { \$pdo new PDO(mysql:hostdiscuz_mysql;dbnamediscuz, discuz, discuz123456); echo 连接成功; } catch (PDOException \$e) { echo 连接失败: . \$e-getMessage(); } 3. 权限问题# 完全重置权限cd~/discuz-project/discuzchmod-R755html/mkdir-phtml/{config,data}chmod-R777html/{config,data}dockerrestart discuz_app4. 语言包缺失如果出现 “language undefined” 错误说明下载的国际版缺少中文语言包需要使用官方脚本重新下载中文版。日常管理命令服务管理# 启动服务dockercompose up-d# 停止服务dockercompose down# 重启服务dockercompose restart# 查看状态dockercomposeps# 查看日志dockercompose logs-f数据备份# 备份数据库dockerexecdiscuz_mysql mysqldump-uroot-proot123456discuz~/discuz_backup_$(date%Y%m%d).sql# 备份文件tar-czf~/discuz_files_backup_$(date%Y%m%d).tar.gz ~/discuz-project/discuz/html/更新 Discuz# 停止服务dockercompose down# 备份当前文件cp-r~/discuz-project/discuz/html ~/discuz-project/discuz/html_backup# 下载新版本替换 html 目录# 重新构建并启动dockercompose up-d--build安全建议修改默认密码安装完成后立即修改数据库和管理员密码启用 HTTPS配置 SSL 证书定期备份设置定时备份任务限制后台访问通过 Nginx 限制 admin.php 的访问 IP更新系统及时更新 Discuz 和依赖组件总结本文详细介绍了在 CentOS 10 上使用 Docker Compose 部署 Discuz X5.0 的完整过程。通过 Docker 容器化部署实现了环境隔离、快速部署和便捷管理。整个架构包含 Nginx 反向代理、Discuz 应用和 MySQL 数据库三个容器通过 Docker 网络实现高效通信。参考资料Discuz 官方网站Docker 官方文档注意本文基于 CentOS 10 Stream 环境编写实际部署时请根据服务器环境调整 IP 地址和端口配置。