SailでLaravelの環境を手軽に立ち上げる

PHP系のフレームワークやアプリを立ち上げる時、DockerでPHP / MySQL / Nginxなどの環境を用意する必要があるのがちょっと面倒に感じていました。 が、Laravelの場合、curl + bashで簡単 […]

広告ここから
広告ここまで

目次

    PHP系のフレームワークやアプリを立ち上げる時、DockerでPHP / MySQL / Nginxなどの環境を用意する必要があるのがちょっと面倒に感じていました。

    が、Laravelの場合、curl + bashで簡単に環境をセットアップできます。

    curl + bashでLaravelをセットアップ

    macOSなど、Dockerが利用できる環境では、laravel.buildとSailを利用して簡単に立ち上げることができます。

    curl -s "https://laravel.build/example-laravel-app" | bash

    example-laravel-appの部分がディレクトリ名になります。プロジェクト名をそのままパスに入れると良さそうです。

    ./vendor/bin/sail upを実行すると、http://localhost/ でアプリにアクセスできます。

    クエリパラメタで環境のカスタマイズが可能

    curl -s "https://laravel.build/example-app?with=mysql,redis" | bashのように、利用するサービスをカスタムすることもできる様子です。

    サポートしているパラメタなど: https://laravel.com/docs/9.x#choosing-your-sail-services

    セットアップされたプロジェクトのDocker構成を見る

    docker-compose.yamlはこのような中身でした。

    # For more information: https://laravel.com/docs/sail
    version: '3'
    services:
        laravel.test:
            build:
                context: ./vendor/laravel/sail/runtimes/8.1
                dockerfile: Dockerfile
                args:
                    WWWGROUP: '${WWWGROUP}'
            image: sail-8.1/app
            extra_hosts:
                - 'host.docker.internal:host-gateway'
            ports:
                - '${APP_PORT:-80}:80'
                - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
            environment:
                WWWUSER: '${WWWUSER}'
                LARAVEL_SAIL: 1
                XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
                XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
            volumes:
                - '.:/var/www/html'
            networks:
                - sail
            depends_on:
                - mysql
                - redis
                - meilisearch
                - mailhog
                - selenium
        mysql:
            image: 'mysql/mysql-server:8.0'
            ports:
                - '${FORWARD_DB_PORT:-3306}:3306'
            environment:
                MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
                MYSQL_ROOT_HOST: "%"
                MYSQL_DATABASE: '${DB_DATABASE}'
                MYSQL_USER: '${DB_USERNAME}'
                MYSQL_PASSWORD: '${DB_PASSWORD}'
                MYSQL_ALLOW_EMPTY_PASSWORD: 1
            volumes:
                - 'sail-mysql:/var/lib/mysql'
                - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
            networks:
                - sail
            healthcheck:
                test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
                retries: 3
                timeout: 5s
        redis:
            image: 'redis:alpine'
            ports:
                - '${FORWARD_REDIS_PORT:-6379}:6379'
            volumes:
                - 'sail-redis:/data'
            networks:
                - sail
            healthcheck:
                test: ["CMD", "redis-cli", "ping"]
                retries: 3
                timeout: 5s
        meilisearch:
            image: 'getmeili/meilisearch:latest'
            ports:
                - '${FORWARD_MEILISEARCH_PORT:-7700}:7700'
            volumes:
                - 'sail-meilisearch:/meili_data'
            networks:
                - sail
            healthcheck:
                test: ["CMD", "wget", "--no-verbose", "--spider",  "http://localhost:7700/health"]
                retries: 3
                timeout: 5s
        mailhog:
            image: 'mailhog/mailhog:latest'
            ports:
                - '${FORWARD_MAILHOG_PORT:-1025}:1025'
                - '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025'
            networks:
                - sail
        selenium:
            image: 'selenium/standalone-chrome'
            extra_hosts:
                - 'host.docker.internal:host-gateway'
            volumes:
                - '/dev/shm:/dev/shm'
            networks:
                - sail
    networks:
        sail:
            driver: bridge
    volumes:
        sail-mysql:
            driver: local
        sail-redis:
            driver: local
        sail-meilisearch:
            driver: local
    

    Sailでは、sailコマンド越しにコマンドを実行

    Docker環境の中にアプリが用意されています。ですので、npmやcomposerのインストールやmysqlコマンドなどは、sailコマンド越しに実行します。

    $ ./vendor/bin/sail composer require laravel/cashier
    $ ./vendor/bin/sail php artisan migrate 
    $ ./vendor/bin/sail mysql -u root

    環境の立ち上げ・停止も、sailで実行しましょう。

    $ ./vendor/bin/sail start
    $ ./vendor/bin/sail down

    手軽に環境を立ち上げることができますので、Laravel系の開発などで重宝しそうです。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark