多阶段 Dockerfile:dev 阶段从本机挂载代码,prod 阶段将代码与优化后的 autoloader 打入镜像并以 www-data 运行
laravel-docker-starter — Laravel 启动器模板
作者 Mominde92
一个基于 Docker Compose 的 Laravel 运行环境模板,包含 Nginx、PHP-FPM 8.4 和 MySQL 8.4,提供开发与生产两种镜像阶段及常用 Make 命令。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
docker-compose.yml 定义 app(PHP-FPM)、web(Nginx)和 db(MySQL,带健康检查,确保 PHP 在数据库就绪后启动)
Nginx 配置仅服务 public/ 目录,将 PHP 请求转给 PHP-FPM,并隐藏 .env、.git 等点文件
提供 Makefile 快捷命令:up、down、shell、migrate、test、logs、perms、prod-image 等
README 记录 CI 会验证首页返回 200、/.env 被阻止以及生产镜像可构建
模板详细介绍
该模板面向 Laravel 项目,提供一套可复用的 Docker Compose 配置。README 说明其包含多阶段 Dockerfile(dev 阶段挂载本机代码,prod 阶段将代码和优化后的 autoloader 打入镜像并以 www-data 运行)、docker-compose.yml(app 为 PHP-FPM、web 为 Nginx、db 为带健康检查的 MySQL,使 PHP 在数据库就绪后才启动)、Nginx 配置(仅服务 public/,将 PHP 请求转给 FPM,并隐藏 .env、.git 等点文件)、OPcache 配置以及 Makefile。
使用方式为将 Dockerfile、docker-compose.yml、.dockerignore、Makefile 和 docker/ 目录复制到已有 Laravel 项目中,在 .env 里配置数据库连接,然后运行 make install 完成构建、启动、composer install、key:generate 和 migrate,访问 http://localhost:8080。README 也列出了不使用 make 时的等价 docker compose 命令。
README 提到 CI 会在每次推送时创建全新 Laravel 应用、启动该栈、运行迁移,并验证首页通过 Nginx 返回 200、/.env 被阻止、生产镜像可构建。README 未提供关于该模板在其他框架、缓存驱动、队列、定时任务或 HTTPS 终止方面的说明。
适合你的项目吗?
适用场景
- 为已有 Laravel 项目添加统一的本地 Docker 开发环境
- 在团队多台机器和服务器上复现相同的 Nginx + PHP-FPM + MySQL 运行环境
- 通过 make prod-image 构建用于部署的生产镜像
- 在 CI 中启动该栈并运行迁移与首页可访问性检查
适合人群
- 使用 Laravel 并希望通过 Docker Compose 管理本地开发环境的开发者
- 需要 Nginx + PHP-FPM + MySQL 组合且希望有生产镜像构建步骤的团队
- 愿意按 README 将模板文件复制进现有 Laravel 项目并手动配置 .env 的用户
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
将 Dockerfile、docker-compose.yml、.dockerignore、Makefile 和 docker/ 目录复制到 Laravel 项目
- 2
在 .env 中设置 DB_CONNECTION=mysql、DB_HOST=db、DB_PORT=3306、DB_DATABASE、DB_USERNAME、DB_PASSWORD
- 3
运行 make install 完成构建、启动、composer install、key:generate 和 migrate,然后访问 http://localhost:8080
- 4
DB_HOST 不能使用 127.0.0.1,应使用服务名 db;DB_USERNAME 不能为 root;storage/ 权限问题可运行 make perms;端口冲突可设置 APP_PORT
- 5
生产部署时 README 建议在 CI 构建镜像并部署带标签的版本、避免将密钥写入镜像、启动时运行 config:cache route:cache view:cache、不发布 MySQL 端口并备份 dbdata 卷
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据
https://github.com/Mominde92/laravel-docker-starter/blob/main/LICENSEhttps://github.com/Mominde92/laravel-docker-starter/blob/main/README.mdPermission is hereby granted, free of charge
许可证原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-14。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 80 / 100
- 技术栈
- Laravel
- 网站类型
- 启动器
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-10-14
- 截图检查日期
- 2026-10-14
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Laravel。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: codex-user-requested-batch-review-20261015 · 2026-10-15
查看当时使用的来源资料
SHA-256: 52b64f2178b39d3a4954a4c15a0c776982f44493d5a6949da5bbe6c69bbb29a0
2026-10-14T12:55:10.710Z
来源文件 / 仓库# Laravel Docker Starter [](https://github.com/Mominde92/laravel-docker-starter/actions/workflows/ci.yml)     A small, production-minded Docker Compose setup for Laravel: **Nginx + PHP-FPM 8.4 + MySQL 8.4**. Drop it into any Laravel project and get the same environment on every laptop and server. Every push is tested in CI: a fresh Laravel app is created, the stack is started, migrations run, the home page must answer `200` through Nginx, `/.env` must be blocked, and the production image must build. ## What you get | File | Purpose | |---|---| | `Dockerfile` | Multi-stage image: `dev` (code mounted from your machine) and `prod` (code + optimized autoloader baked in, runs as `www-data`). | | `docker-compose.yml` | `app` (PHP-FPM), `web` (Nginx) and `db` (MySQL with a healthcheck, so PHP starts only when the database is ready). | | `docker/nginx/default.conf` | Serves `public/` only, passes PHP to FPM, hides dot-files such as `.env` and `.git`. | | `docker/php/opcache.ini` | OPcache tuned for production images. | | `Makefile` | Short commands for daily work. | ## Quick start Copy `Dockerfile`, `docker-compose.yml`, `.dockerignore`, `Makefile` and the `docker/` folder into your Laravel project, then set the database in `.env`: ```env DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=laravel DB_PASSWORD=secret ``` ```bash make install # build, start, composer install, key:generate, migrate ``` Open http://localhost:8080. Without `make`: ```bash docker compose up -d --build --wait docker compose exec app composer install docker compose exec app chown -R www-data:www-data storage bootstrap/cache docker compose exec app php artisan key:generate docker compose exec app php artisan migrate ``` ## Daily commands ```bash make up # start make down # stop make shell # shell inside the PHP container make migrate # run migrations make test # php artisan test make logs # follow logs ``` ## Things that trip people up - **`DB_HOST=127.0.0.1` does not work.** Inside a container that address is the container itself. Use the service name `db`. - **`DB_USERNAME` cannot be `root`.** The MySQL image creates `DB_USERNAME` as a normal user; the root password is `DB_ROOT_PASSWORD`. - **"Permission denied" in `storage/`.** PHP-FPM runs as `www-data`; run `make perms` once. - **Port 8080 is taken.** Set `APP_PORT=8081` in `.env`. ## Production ```bash make prod-image # docker build --target prod -t laravel-app:prod . ``` The `prod` stage installs dependencies without dev packages, copies the code into the image, optimizes the autoloader and drops root. For a real deployment also: - build the image in CI and deploy a tagged version, so servers run exactly what was tested; - keep secrets out of the image (environment variables or Docker secrets, never a committed `.env`); - run `php artisan config:cache route:cache view:cache` on start; - do not publish the MySQL port, and back up the `dbdata` volume. A step-by-step explanation of this setup is on my blog: [Dockerizing a Laravel app with Docker Compose](https://moumen-dev.com/blog/docker-compose-laravel/). ## Author **Moamen Derine**, Senior Full Stack Developer & DevOps Engineer in Dubai. [moumen-dev.com](https://moumen-dev.com) · [LinkedIn](https://www.linkedin.com/in/momin-derine/) ## License [MIT](LICENSE)
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

sage
WordPress starter theme with Laravel Blade components and templates, Tailwind CSS, and block editor support
Laravel · 启动器

wave
Wave - The Software as a Service Starter Kit, designed to help you build the SAAS of your dreams 🚀 💰
Laravel · SaaS

filament-starter
A beautiful starting point for your next TALL stack project using Filament. ⚡
Laravel · 启动器

electrik
Laravel SaaS starter kit: auth, teams, Stripe billing, and Slate 3 — Composer package for Laravel 12
Laravel · SaaS

php-saas
The everything-included starter kit for your next idea
Laravel · SaaS

filament-jetstream
A Laravel starter kit built with Filament inspired by Jetstream.
Laravel · 启动器
