thinkphp8短剧系统docker一键部署需确保自动加载、路由重写、runtime可写、数据库连接、静态路径五项全满足;采用多阶段构建镜像,apache启用allowoverride all,挂载runtime与init.sql,启动后验证首页、日志及数据库表。

将ThinkPHP8短剧系统通过Docker一键部署到生产环境,需确保容器内自动加载生效、路由重写可用、runtime目录可写、数据库连接就绪、静态资源路径正确——缺一不可,否则首页白屏、后台404、上传失败、登录态丢失等问题会立即暴露。
构建ThinkPHP8短剧镜像
使用多阶段构建,第一阶段装依赖,第二阶段仅复制代码与vendor,避免dev工具残留和镜像臃肿。
在项目根目录新建 Dockerfile,内容如下:
FROM php:8.1-cli AS builder
WORKDIR /app
COPY composer.json composer.lock ./
RUN apt-get update && apt-get install -y unzip libzip-dev && docker-php-ext-install zip && rm -rf /var/lib/apt/lists/*
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install --no-dev --optimize-autoloader --ignore-platform-reqs
FROM php:8.1-apache
COPY --from=builder /app/vendor /var/www/html/vendor
COPY . /var/www/html
RUN mkdir -p /var/www/html/runtime/{log,cache,route,view} && chmod -R 777 /var/www/html/runtime
RUN a2enmod rewrite
COPY docker/apache.conf /etc/apache2/sites-available/000-default.conf
EXPOSE 80
【关键点】必须用--no-dev参数,否则vendor/autoload.php不生成,Class 'think\App' not found错误必然出现
配置Apache支持ThinkPHP路由
短剧系统依赖PATHINFO或URL重写,Apache默认禁用.htaccess,必须显式启用AllowOverride All。
创建 docker/apache.conf 文件:
DocumentRoot /var/www/html/public
AllowOverride All
Require all granted
这一步不做,所有跳转链接都会返回404,后台菜单点击无效,短剧列表页无法加载。
编写docker-compose.yml启动三件套
短剧系统需要PHP运行时、MySQL存储、Nginx反向代理(或直接用Apache),此处采用Apache内置方案,简化结构。
第一步:创建 docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "80:80"
volumes:
- ./runtime:/var/www/html/runtime:rw
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: shortplay2026
MYSQL_DATABASE: shortplay_db
volumes:
- db_data:/var/lib/mysql
第二步:声明挂载卷
volumes:
db_data:
第三步:确认public/.htaccess存在且未被.gitignore误删——短剧系统的伪静态规则全靠它驱动。
初始化短剧系统数据库与配置
方法一:进入容器执行迁移
docker-compose exec web bash -c "cd /var/www/html && php think migrate:run"
方法二:挂载SQL初始化脚本(推荐)
在 docker/init.sql 中写入建库语句与基础数据,然后在docker-compose.yml的db服务下添加:
volumes:
- ./docker/init.sql:/docker-entrypoint-initdb.d/init.sql
【注意】init.sql必须以UTF8编码保存,否则中文短剧名入库乱码
验证部署是否成功
执行 docker-compose up -d 启动服务。
访问 http://localhost,看到短剧首页轮播图与分类导航即表示Web层通了。
执行 docker-compose logs -f web,观察是否有 PHP Fatal error 或 Class not found 报错。
执行 docker-compose exec db mysql -uroot -pshortplay2026 -e "USE shortplay_db; SHOW TABLES;",确认migration表已建好。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











