diff --git a/README.md b/README.md index 32ba721..6851ea9 100644 --- a/README.md +++ b/README.md @@ -1,249 +1,61 @@ -# Laravel Docker Examples Project +
-## Table of Contents + -- [Overview](#overview) -- [Project Structure](#project-structure) - - [Directory Structure](#directory-structure) - - [Development Environment](#development-environment) - - [Production Environment](#production-environment) -- [Getting Started](#getting-started) - - [Clone the Repository](#clone-the-repository) - - [Setting Up the Development Environment](#setting-up-the-development-environment) -- [Usage](#usage) -- [Production Environment](#production-environment-1) - - [Building and Running the Production Environment](#building-and-running-the-production-environment) -- [Technical Details](#technical-details) -- [Contributing](#contributing) - - [How to Contribute](#how-to-contribute) -- [License](#license) +## 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: -## Overview +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). -The **Laravel Docker Examples Project** offers practical and modular examples for Laravel developers to create efficient Docker environments for development and production. This project demonstrates modern Docker best practices, including multi-stage builds, modular configurations, and environment-specific customization. It is designed to be educational, flexible, and extendable, providing a solid foundation for Dockerizing Laravel applications. +Laravel is accessible, powerful, and provides tools required for large, robust applications. +## Learning Laravel -## Project Structure +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. -The project is organized as a typical Laravel application, with the addition of a `docker` directory containing the Docker configurations and scripts. These are separated by environments and services. There are two main Docker Compose projects in the root directory: +You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. -- **compose.dev.yaml**: Orchestrates the development environment. -- **compose.prod.yaml**: Orchestrates the production environment. +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. -### Directory Structure +## Laravel Sponsors -``` -project-root/ -├── app/ # Laravel app folder -├── ... # Other Laravel files and directories -├── docker/ -│ ├── common/ # Shared configurations -│ ├── development/ # Development-specific configurations -│ ├── production/ # Production-specific configurations -├── compose.dev.yaml # Docker Compose for development -├── compose.prod.yaml # Docker Compose for production -└── .env.example # Example environment configuration -``` +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com). -This modular structure ensures shared logic between environments while allowing environment-specific customizations. - - -### Production Environment - -The production environment is configured using the `compose.prod.yaml` file. It is optimized for performance and security, using multi-stage builds and runtime-only dependencies. It uses a shared PHP-FPM multi-stage build with the target `production`. - -- **Optimized Images**: Multi-stage builds ensure minimal image size and enhanced security. -- **Pre-Built Assets**: Assets are compiled during the build process, ensuring the container is ready to serve content immediately upon deployment. -- **Health Checks**: Built-in health checks monitor service statuses and ensure smooth operation. -- **Security Best Practices**: Minimizes the attack surface by excluding unnecessary packages and users. -- **Docker Compose for Production**: Tailored for deploying Laravel applications with Nginx, PHP-FPM, Redis, and PostgreSQL. - -This environment is designed for easy deployment to any Docker-compatible hosting platform. - - -### Development Environment - -The development environment is configured using the `compose.dev.yaml` file and is built on top of the production version. This ensures the development environment is as close to production as possible while still supporting tools like Xdebug and writable permissions. - -Key features include: -- **Close Parity with Production**: Mirrors the production environment to minimize deployment issues. -- **Development Tools**: Includes Xdebug for debugging and writable permissions for mounted volumes. -- **Hot Reloading**: Volume mounts enable real-time updates to the codebase without rebuilding containers. -- **Services**: PHP-FPM, Nginx, Redis, PostgreSQL, and Node.js (via NVM). -- **Custom Dockerfiles**: Extends shared configurations to include development-specific tools. - -To set up the development environment, follow the steps in the **Getting Started** section. - - -## Getting Started - -Follow these steps to set up and run the Laravel Docker Examples Project: - -### Prerequisites -Ensure you have Docker and Docker Compose installed. You can verify by running: - -```bash -docker --version -docker compose version -``` - -If these commands do not return the versions, install Docker and Docker Compose using the official documentation: [Docker](https://docs.docker.com/get-docker/) and [Docker Compose](https://docs.docker.com/compose/install/). - -### Clone the Repository - -```bash -git clone https://github.com/rw4lll/laravel-docker-examples.git -cd laravel-docker-examples -``` - -### Setting Up the Development Environment - -1. Copy the .env.example file to .env and adjust any necessary environment variables: - -```bash -cp .env.example .env -``` - -Hint: adjust the `UID` and `GID` variables in the `.env` file to match your user ID and group ID. You can find these by running `id -u` and `id -g` in the terminal. - -2. Start the Docker Compose Services: - -```bash -docker compose -f compose.dev.yaml up -d -``` - -3. Install Laravel Dependencies: - -```bash -docker compose -f compose.dev.yaml exec workspace bash -composer install -npm install -npm run dev -``` - -4. Run Migrations: - -```bash -docker compose -f compose.dev.yaml exec workspace php artisan migrate -``` - -5. Access the Application: - -Open your browser and navigate to [http://localhost](http://localhost). - -## Usage - -Here are some common commands and tips for using the development environment: - -### Accessing the Workspace Container - -The workspace sidecar container includes Composer, Node.js, NPM, and other tools necessary for Laravel development (e.g. assets building). - -```bash -docker compose -f compose.dev.yaml exec workspace bash -``` - -### Run Artisan Commands: - -```bash -docker compose -f compose.dev.yaml exec workspace php artisan migrate -``` - -### Rebuild Containers: - -```bash -docker compose -f compose.dev.yaml up -d --build -``` - -### Stop Containers: - -```bash -docker compose -f compose.dev.yaml down -``` - -### View Logs: - -```bash -docker compose -f compose.dev.yaml logs -f -``` - -For specific services, you can use: - -```bash -docker compose -f compose.dev.yaml logs -f web -``` - -## Production Environment - -The production environment is designed with security and efficiency in mind: - -- **Optimized Docker Images**: Uses multi-stage builds to minimize the final image size, reducing the attack surface. -- **Environment Variables Management**: Sensitive data such as passwords and API keys are managed carefully to prevent exposure. -- **User Permissions**: Containers run under non-root users where possible to follow the principle of least privilege. -- **Health Checks**: Implemented to monitor the status of services and ensure they are functioning correctly. -- **HTTPS Setup**: While not included in this example, it's recommended to configure SSL certificates and use HTTPS in a production environment. - - -### Deploying - -The production image can be deployed to any Docker-compatible hosting environment, such as AWS ECS, Kubernetes, or a traditional VPS. - -## Technical Details - -- **PHP**: Version **8.3 FPM** is used for optimal performance in both development and production environments. -- **Node.js**: Version **22.x** is used in the development environment for building frontend assets with Vite. -- **PostgreSQL**: Version **16** is used as the database in the examples, but you can adjust the configuration to use MySQL if preferred. -- **Redis**: Used for caching and session management, integrated into both development and production environments. -- **Nginx**: Used as the web server to serve the Laravel application and handle HTTP requests. -- **Docker Compose**: Orchestrates the services, simplifying the process of starting and stopping the environment. -- **Health Checks**: Implemented in the Docker Compose configurations and Laravel application to ensure all services are operational. +### Premium Partners +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[DevSquad](https://devsquad.com/hire-laravel-developers)** +- **[Redberry](https://redberry.international/laravel-development/)** +- **[Active Logic](https://activelogic.com)** ## Contributing -Contributions are welcome! Whether you find a bug, have an idea for improvement, or want to add a new feature, your input is valuable. - -### How to Contribute - -1. **Fork the Repository:** - - Click the "Fork" button at the top right of this page to create your own copy of the repository. - -2. **Clone Your Fork:** - -```bash - git clone https://github.com/your-user-name/laravel-docker-examples.git - cd laravel-docker-examples -``` - -3. Create a Branch: - -```bash - git checkout -b your-feature-branch -``` - -4. Make Your Changes. - - Implement your changes or additions. - -5. Commit Your Changes: +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). -```bash -git commit -m "Description of changes" -``` +## Code of Conduct -6. Push to Your Fork: +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). -```bash - git push origin feature-branch -``` +## Security Vulnerabilities -7. Submit a Pull Request: - - Go to the original repository. - - Click on "Pull Requests" and then "New Pull Request." - - Select your fork and branch, and submit your pull request. +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. ## License -This project is licensed under the MIT License. See the LICENSE file for more details. \ No newline at end of file +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Models/User.php b/app/Models/User.php index def621f..749c7b7 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -9,12 +9,13 @@ class User extends Authenticatable { + /** @use HasFactory<\Database\Factories\UserFactory> */ use HasFactory, Notifiable; /** * The attributes that are mass assignable. * - * @var array