Add Laravel Sail into your current Laravel project
2 min read

Add Laravel Sail into your current Laravel project

Laravel Sail is a light-weight command-line interface for interacting with Laravel's default Docker development environment. Sail provides a great starting point for building a Laravel application using PHP, MySQL, and Redis without requiring prior Docker experience.
Add Laravel Sail into your current Laravel project

Yesterday Taylor Otwell released a brand new package called Sail which will be available by default in every new Laravel project. However, if you already have your own Laravel project you might want to include it.

What is Laravel Sail?

Laravel Sail is a light-weight command-line interface for interacting with Laravel's default Docker development environment. Sail provides a great starting point for building a Laravel application using PHP, MySQL, and Redis without requiring prior Docker experience.

At its heart, Sail is the docker-compose.yml file and the sail script that is stored at the root of your project. The sail script provides a CLI with convenient methods for interacting with the Docker containers defined by the docker-compose.yml file.

Laravel Sail is supported on macOS, Linux, and Windows (via WSL2).

Update on adding Sail

There is an even easier way to add Sail to an existing Laravel project. Thanks to Paul Redmond on Twitter for replying to me.

Require the Sail package with composer require laravel/sail --dev then run the install command php artisan sail:install and finally publish the env config php artisan sail:publish. And now you have Sail set up with your current project.

Original:

How to add Laravel Sail into your current project

Firstly, in the root of your project you will want to add a docker-compose.yml file.

# For more information: https://laravel.com/docs/sail
version: '3'
services:
    laravel.test:
        build:
            context: ./vendor/laravel/sail/runtimes/8.0
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.0/app
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - mysql
            - redis
            # - selenium
    # selenium:
    #     image: 'selenium/standalone-chrome'
    #     volumes:
    #         - '/dev/shm:/dev/shm'
    #     networks:
    #         - sail
    #     depends_on:
    #         - laravel.test
    mysql:
        image: 'mysql:8.0'
        ports:
            - '${DB_PORT}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sailmysql:/var/lib/mysql'
        networks:
            - sail
    redis:
        image: 'redis:alpine'
        ports:
            - '${REDIS_PORT}:6379'
        volumes:
            - 'sailredis:/data'
        networks:
            - sail
    # memcached:
    #     image: 'memcached:alpine'
    #     ports:
    #         - '11211:11211'
    #     networks:
    #         - sail
    mailhog:
        image: 'mailhog/mailhog:latest'
        ports:
            - 1025:1025
            - 8025:8025
        networks:
            - sail
networks:
    sail:
        driver: bridge
volumes:
    sailmysql:
        driver: local
    sailredis:
        driver: local

Update your .env file

There's a couple of changes you need to make to your .env file which can be done through a find and replace.

DB_HOST=mysql

QUEUE_CONNECTION=database

MEMCACHED_HOST=memcached

REDIS_HOST=redis

MAIL_HOST=mailhog
MAIL_PORT=1025

Run Composer

Next, run composer require laravel/sail --dev to install the Sail package. Once installed you will be able to run vendor/bin/sail up to build and run the Sail containers. If you would like to learn more about Sail, then you can read the Laravel documentation here.

Enjoying these posts? Subscribe for more