This guide provides instructions for setting up the project in different environments (local, stage, prod) using Docker Compose and Laravel. The codebase remains the same across environments, with only the database and configuration files changing.
The project supports three environments:
docker-compose.yml
docker-compose.stage.yml
docker-compose.prod.yml
Each environment has its own .env
file:
src/.env.local
for localsrc/.env.stage
for stagesrc/.env
for prodClone the repository: git clone https://github.com/Gurinder-Batth/laravel-12-dockerize
docker compose -f docker-compose.yml up -d --build
docker compose -f docker-compose.yml exec app composer install
docker compose -f docker-compose.yml exec app php artisan key:generate
docker compose -f docker-compose.yml exec app php artisan migrate
docker compose -f docker-compose.stage.yml up -d --build
docker compose -f docker-compose.stage.yml exec app composer install
docker compose -f docker-compose.stage.yml exec app php artisan key:generate
docker compose -f docker-compose.stage.yml exec app php artisan migrate
docker compose -f docker-compose.prod.yml up -d --build
docker compose -f docker-compose.prod.yml exec app composer install
docker compose -f docker-compose.prod.yml exec app php artisan key:generate
docker compose -f docker-compose.prod.yml exec app php artisan migrate
.env
files differ.docker-compose
file, allowing resource customization (e.g., including Adminer in local)..env
files in the src/
directory.The Laravel application dynamically loads the appropriate .env
file based on the APP_ENV
variable. This is configured in src/bootstrap/app.php
:
// Get environment name from APP_ENV
$env = env('APP_ENV_FILE', 'local');
// Determine the environment-specific .env file
$envFile = ".env.$env";
// Load the environment file if it exists
$basePath = dirname(__DIR__);
if (file_exists("$basePath/$envFile")) {
$dotenv = Dotenv\Dotenv::createImmutable($basePath, $envFile);
$dotenv->safeLoad();
}
To create a new environment (e.g., newenv
):
docker-compose.newenv.yml
file by copying docker-compose.stage.yml
.stage
with newenv
in the new file..env.newenv
file in the src/
directory and register all necessary variables.docker compose -f docker-compose.newenv.yml up -d --build
docker compose -f docker-compose.newenv.yml exec app composer install
docker compose -f docker-compose.newenv.yml exec app php artisan key:generate
docker compose -f docker-compose.newenv.yml exec app php artisan migrate
http://localhost:{new_port}/
, where {new_port}
is the port defined in docker-compose.newenv.yml
.To create a new environment (e.g., newenv
):