Docker 一键部署

项目根目录自带 docker-compose.yml 和 deploy/docker/,一条命令即可拉起 Nginx、PHP、MySQL,再通过网页安装器完成安装。以下命令都在项目根目录执行。

以下 docker 部署是本地环境,生产环境部署也类似,使用命令行就可以了

1. 安装 Docker

按 Docker 官方说明 安装 Docker Engine 与 Compose 插件;宝塔服务器可直接用面板的 Docker 功能。确认可用:

docker version
docker compose version

打开 docker

打开 docker程序

2. 准备程序

下载完整包(官方下载页)并解压到服务器,例如 /www/wwwroot/badoucms。确保目录里直接包含 docker-compose.yml、deploy/docker/、think、public,不要再套一层目录。

下载包若还没带 Docker 文件,把本项目的 docker-compose.yml 和整个 deploy/docker/ 一起上传。

打开 vscode 使用命令行启动

打开 vscode 使用命令行启动

3. 启动

docker compose up -d --build

执行命令

首次会拉取镜像并构建 PHP 环境,耐心等待。查看状态:

docker compose ps

服务说明端口(宿主机 → 容器)
nginxWeb 入口8080 → 80
phpPHP-FPM,执行框架与 AI 对话仅容器内部
mysql数据库 5.7仅容器内部

容器启动时会自动创建 runtime、public/uploads 并设置好可写权限;vendor 缺失时自动执行 composer install,无需手动处理。

4. 安装

浏览器访问 http://服务器IP:8080,会自动进入安装向导,数据库填写:

开始安装程序

安装项值
数据库地址mysql(Compose 服务名,不要填 127.0.0.1)
端口3306
数据库名badouadmin
用户badouadmin
密码badouadmin
表前缀bd_

填站点名称和管理员账号密码,完成安装后用该账号登录 /admin.php。

安装完成

安装完成后建议把后台入口 public/admin.php 改成自定义文件名,或用插件市场的「后台地址修改」插件处理。

5. 常用命令

# 查看日志
docker compose logs --tail=100 nginx php

# 重启
docker compose restart php nginx

# 停止(保留数据库数据卷)
docker compose down

# 导出数据库
docker compose exec -T mysql sh -c 'MYSQL_PWD="$MYSQL_PASSWORD" mysqldump -u "$MYSQL_USER" --single-transaction --no-tablespaces "$MYSQL_DATABASE"' > backup.sql
docker compose down 不会删除数据库;不要加 -v,否则会删除本部署的数据卷。

修改默认密码和端口(生产必做)

上面的数据库账号密码是方便体验的默认值。生产环境请直接编辑根目录 docker-compose.yml:

  • 改 mysql.environment 下的 MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD、MYSQL_ROOT_PASSWORD;
  • 按需改 nginx.ports 的端口映射,例如改成 - "80:80"。

改完后重启(改了数据库账号密码需要清库重建才生效):

docker compose down -v
docker compose up -d --build

注意:数据库账号只在首次初始化(数据卷为空)时创建,之后再改 docker-compose.yml 不会修改数据库里已有的用户,需要同步改库并更新框架连接配置。

直接暴露 8080 到公网仅适合测试。生产环境用面板的 Nginx 反代到 http://127.0.0.1:8080 再上 HTTPS,具体见下。

上生产:域名 + HTTPS(反向代理)

容器 nginx 监听宿主机 8080,生产环境用面板的 Nginx 做一层反向代理到 http://127.0.0.1:8080,再申请证书。

原则:面板只做反向代理,不要再安装面板自带的 PHP、MySQL(容器里已经有),也不要让容器占用 80/443,避免和面板服务抢端口。

宝塔面板

  1. 「软件商店」安装 Nginx(不用装 PHP、MySQL)。
  2. 「网站」→ 添加站点,绑定域名,PHP 版本选「纯静态」。
  3. 站点「反向代理」:目标 http://127.0.0.1:8080,发送域名填 $host。
  4. 「SSL」申请 Let's Encrypt 证书并开启强制 HTTPS。
  5. 放行端口:面板「安全」和云服务器「安全组」都放行 80、443。

1Panel

  1. 「应用商店」安装 OpenResty(Nginx)。
  2. 「网站」→ 创建网站,类型选「反向代理」,绑定域名,代理地址填 http://127.0.0.1:8080。
  3. 「网站」→ HTTPS:申请证书并开启强制跳转。
  4. 「防火墙」放行 80、443。
反向代理是纯 HTTP 透传,面板不读写项目文件,因此不会出现 www 与 www-data 的权限问题。若想让容器直接监听 80,把 nginx.ports 改成 - "80:80",但会与面板 Nginx 冲突,生产用反代更省心。

更新时间:2026-10-12 21:34:00

文章目录