Docker Compose for Laravel + MongoDB + Mailpit
Laravel is the most popular PHP framework for web development, known for its elegant syntax and rich ecosystem. It is the framework of choice for SaaS products, REST APIs, and rapid application development with Eloquent ORM and first-class queue support.
MongoDB 7 is a document-oriented NoSQL database ideal for flexible schemas and horizontal scaling. It suits content-heavy applications, real-time data pipelines, and projects where the data model evolves rapidly during development.
When should you use this stack?
Laravel with MongoDB is a solid default for local development when your production environment matches it. If you're evaluating alternatives, the related configurations below swap one piece at a time — same framework with a different database, or the same data layer under a different framework — so you can compare without starting from scratch.
docker compose up -d
http://localhost:8080
http://localhost:8025
compose.yml
services:
nginx:
image: nginx:latest
ports:
- "${WEB_PORT-8080}:80"
volumes:
- .:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- php
php:
image: php:8.5-fpm
volumes:
- .:/var/www/html
mongodb:
image: mongo:7
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGODB_INITDB_ROOT_USERNAME-app}
MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_INITDB_ROOT_PASSWORD-secret}
MONGO_INITDB_DATABASE: ${MONGODB_INITDB_DATABASE-app}
ports:
- "${MONGODB_PORT-27017}:27017"
volumes:
- mongodb_data:/data/db
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
interval: 10s
timeout: 5s
retries: 5
mailpit:
image: axllent/mailpit
ports:
- "${MAILPIT_SMTP_PORT-1025}:1025"
- "${MAILPIT_UI_PORT-8025}:8025"
volumes:
mongodb_data:
docker/nginx/default.conf
Run mkdir -p docker/nginx first
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php index.html;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
.env.example
Optional — Compose uses ${VAR-default} fallbacks
WEB_PORT=8080 MONGODB_PORT=27017 MONGODB_INITDB_ROOT_USERNAME=app MONGODB_INITDB_ROOT_PASSWORD=secret MONGODB_INITDB_DATABASE=app MAILPIT_SMTP_PORT=1025 MAILPIT_UI_PORT=8025