6.3 KiB
Executable file
Laravel Application with Podman
This is a Laravel 12 application configured to run in Podman containers.
Requirements
- Podman 5.0 or later
- podman-compose
Services
The application stack includes:
- app: Laravel application (PHP 8.3-FPM + Nginx)
- db: MySQL 8.0 database
- redis: Redis cache server
Quick Start
1. Start the containers
podman-compose up -d --build
This will build and start all containers in detached mode.
2. Access the application
Open your browser and navigate to:
http://localhost:8080
3. Run migrations
The initial migrations have already been run during setup. If you need to run additional migrations:
podman-compose exec app php artisan migrate
Common Commands
Container Management
# Start containers
podman-compose up -d
# Stop containers
podman-compose down
# View logs
podman-compose logs -f
# View app logs only
podman-compose logs -f app
# Rebuild containers
podman-compose up -d --build
Laravel Artisan Commands
# Run any artisan command
podman-compose exec app php artisan [command]
# Examples:
podman-compose exec app php artisan migrate
podman-compose exec app php artisan migrate:fresh --seed
podman-compose exec app php artisan make:model Post -m
podman-compose exec app php artisan make:controller PostController
podman-compose exec app php artisan route:list
podman-compose exec app php artisan tinker
Composer Commands
# Install dependencies
podman-compose exec app composer install
# Update dependencies
podman-compose exec app composer update
# Add a package
podman-compose exec app composer require vendor/package
Database Access
# Access MySQL CLI
podman-compose exec db mysql -u laravel -psecret laravel
# Or as root
podman-compose exec db mysql -u root -proot laravel
Redis Access
# Access Redis CLI
podman-compose exec redis redis-cli
Running Tests
# Run PHPUnit tests
podman-compose exec app php artisan test
# Or using vendor binary
podman-compose exec app ./vendor/bin/phpunit
File Permissions
If you encounter permission issues with storage or cache:
podman-compose exec app chown -R www-data:www-data /var/www/html/storage
podman-compose exec app chmod -R 755 /var/www/html/storage
Configuration
Environment Variables
The application is configured via the .env file. Key Docker-specific settings:
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secret
REDIS_HOST=redis
REDIS_PORT=6379
Database Credentials
- Database: laravel
- Username: laravel
- Password: secret
- Root Password: root
Ports
- Application: 8080 (maps to container port 80)
- MySQL: 3306
- Redis: 6379
Project Structure
.
├── app/ # Application code
├── bootstrap/ # Bootstrap files
├── config/ # Configuration files
├── database/ # Migrations, seeders, factories
├── docker/ # Docker configuration
│ ├── nginx/ # Nginx configuration
│ └── supervisor/ # Supervisor configuration
├── public/ # Public assets
├── resources/ # Views, assets
├── routes/ # Route definitions
├── storage/ # Storage files
├── tests/ # Tests
├── vendor/ # Composer dependencies
├── compose.yml # Podman Compose configuration
├── Dockerfile # Container image definition
└── .env # Environment configuration
Troubleshooting
Containers won't start
# Check container status
podman-compose ps
# View container logs
podman-compose logs
Database connection errors
Ensure the database container is running and healthy:
podman-compose ps
podman-compose exec db mysql -u root -proot -e "SHOW DATABASES;"
Permission denied errors
Fix storage permissions:
podman-compose exec app chown -R www-data:www-data storage bootstrap/cache
podman-compose exec app chmod -R 775 storage bootstrap/cache
Clear Laravel cache
podman-compose exec app php artisan cache:clear
podman-compose exec app php artisan config:clear
podman-compose exec app php artisan route:clear
podman-compose exec app php artisan view:clear
Development Workflow
- Make code changes in your local files
- Changes are reflected immediately via volume mounting
- For composer or config changes, you may need to restart containers:
podman-compose restart app
Stopping the Application
# Stop containers (preserves data)
podman-compose down
# Stop and remove volumes (deletes database data)
podman-compose down -v
Additional Information
- Laravel Version: 12.52.0
- PHP Version: 8.3
- MySQL Version: 8.0
- Nginx: Latest stable
- Redis: Alpine latest
For more information about Laravel, visit https://laravel.com/docs
About Laravel
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
- Simple, fast routing engine.
- Powerful dependency injection container.
- Multiple back-ends for session and cache storage.
- Expressive, intuitive database ORM.
- Database agnostic schema migrations.
- Robust background job processing.
- Real-time event broadcasting.
Security Vulnerabilities
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via taylor@laravel.com. All security vulnerabilities will be promptly addressed.
License
The Laravel framework is open-sourced software licensed under the MIT license.