Docker 一键部署
项目根目录自带 docker-compose.yml 和 deploy/docker/,一条命令即可拉起 Nginx、PHP、MySQL,再通过网页安装器完成安装。以下命令都在项目根目录执行。
以下 docker 部署是本地环境,生产环境部署也类似,使用命令行就可以了
1. 安装 Docker
按 Docker 官方说明 安装 Docker Engine 与 Compose 插件;宝塔服务器可直接用面板的 Docker 功能。确认可用:
docker version
docker compose version打开 docker

2. 准备程序
下载完整包(官方下载页)并解压到服务器,例如 /www/wwwroot/badoucms。确保目录里直接包含 docker-compose.yml、deploy/docker/、think、public,不要再套一层目录。
下载包若还没带 Docker 文件,把本项目的docker-compose.yml和整个deploy/docker/一起上传。
打开 vscode 使用命令行启动

3. 启动
docker compose up -d --build
首次会拉取镜像并构建 PHP 环境,耐心等待。查看状态:
docker compose ps
| 服务 | 说明 | 端口(宿主机 → 容器) |
|---|---|---|
nginx | Web 入口 | 8080 → 80 |
php | PHP-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.sqldocker 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,避免和面板服务抢端口。
宝塔面板
- 「软件商店」安装 Nginx(不用装 PHP、MySQL)。
- 「网站」→ 添加站点,绑定域名,PHP 版本选「纯静态」。
- 站点「反向代理」:目标
http://127.0.0.1:8080,发送域名填$host。 - 「SSL」申请 Let's Encrypt 证书并开启强制 HTTPS。
- 放行端口:面板「安全」和云服务器「安全组」都放行
80、443。
1Panel
- 「应用商店」安装 OpenResty(Nginx)。
- 「网站」→ 创建网站,类型选「反向代理」,绑定域名,代理地址填
http://127.0.0.1:8080。 - 「网站」→ HTTPS:申请证书并开启强制跳转。
- 「防火墙」放行
80、443。
反向代理是纯 HTTP 透传,面板不读写项目文件,因此不会出现www与www-data的权限问题。若想让容器直接监听 80,把nginx.ports改成- "80:80",但会与面板 Nginx 冲突,生产用反代更省心。
更新时间:2026-10-12 21:34:00
BadouCMS