使用Docker在本地环境中配置Laravel,从SSL到Laravel Dusk的设置

环境

    • Docker for Mac

 

    • Laravel5.5

 

    • Nginx

 

    • PHP-FPM

 

    MySQL5.7

最终目录结构

docker-laravel/
├── docker-config/
|   ├── docker-compose.yml
│   ├── nginx
│   │    ├── cert-key
│   │    └── nginx.conf
│  └── php-fpm
│        └── Dockerfile
└── laravel(Laravelのディレクトリ)

最终的docker-laravel/docker-config/docker-compose.yml

version: '3'
services: 
  nginx:
    image: nginx:alpine
    depends_on: 
      - php-fpm
    ports:
      - 80:80
      - 443:443
    volumes:
      - ../:/var/www/html
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - ./nginx/cert-key:/etc/nginx/ssl
  php-fpm:
    build: ./php-fpm
    depends_on: 
      - mysql
    ports:
      - 9000:9000
    volumes:
      - ../laravel:/var/www/html
  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    environment:
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=sample
    volumes: 
      - ./data-mysql:/var/lib/mysql
    container_name: mysql57
  selenium:
    image: selenium/standalone-chrome-debug
    ports: 
      - 4444:4444
      - 5900:5900
    depends_on: 
      - nginx
    privileged: true
    container_name: selenium

最初的docker-laravel/docker-config/docker-compose.yml

version: '3'
services: 
  nginx:
    image: nginx:alpine
    depends_on: 
      - php-fpm
    ports:
      - 80:80
      - 443:443
    volumes:
      - ../:/var/www/html
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - ./nginx/cert-key:/etc/nginx/ssl
  php-fpm:
    build: ./php-fpm
    ports:
      - 9000:9000
    volumes:
      - ../:/var/www/html

使用者进行的动作或行为。

首先,在docker-laravel目录中创建一个名为docker-config的文件夹,然后创建初始的docker-compose.yml、nginx文件夹和php-fpm文件夹。

根据以下的配置创建docker-laravel/docker-config/nginx/nginx.conf文件。

#nginx.conf

server {
    listen 80;
    server_name localhost;

    return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name localhost;
    
    root  /var/www/html;
    index index.php;

    ssl on;
    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    ssl_certificate /etc/nginx/ssl/localhost+1.pem;
    ssl_certificate_key //etc/nginx/ssl/localhost+1-key.pem;
 
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
 
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(\.+)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

在 docker-laravel/docker-config/php-fpm 目录下创建 Dockerfile 文件,内容如下所示。

FROM php:fpm-alpine

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer 

RUN docker-php-ext-install mysqli && \
    docker-php-ext-install pdo_mysql
    
RUN apk add --update nodejs nodejs-npm

RUN apk add --no-cache \
    build-base \
    libpng-dev \
    lcms2-dev \
    bash

安装mkcert

在Mac终端上执行以下操作

brew install mkcert
mkcert -install
mkcert localhost 127.0.0.1

将创建的localhost+1.pem和localhost+1-key.pem文件放置在docker-laravel/docker-config/nginx/cert-key目录中。

docker-compose的构建

在docker-laravel/docker-config/目录下执行操作来安装Laravel

docker-compose build
docker-compose up -d
docker-compose exec php-fpm bash
# php-fpm コンテナ内
composer create-project "laravel/laravel=5.5.*" laravel
cd laravel
chmod 777 storage -R
php artisan key:generate

按照最终的docker-laravel/docker-config/docker-compose.yml进行编辑docker-compose.yml。

再次执行以下操作

docker-compose up -d
docker-compose exec php-fpm bash

当在此处访问https://localhost,将打开Laravel的默认页面。

编辑.env文件

请按照以下方式编辑 docker-laravel/laravel/.env 文件。

#.env

APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=https://localhost

DB_CONNECTION=mysql
DB_HOST=mysql57
DB_PORT=3306
DB_DATABASE=root
DB_USERNAME=password
DB_PASSWORD=sample

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=

编辑完成后

# php-fpm コンテナ内
php artisan migrate

确认能够进行迁移。
如果发生错误,可能是因为缓存残留,需清除缓存。

# php-fpm コンテナ内
php artisan config:clear

如果想要使用npm的话

执行以下操作,编译JS文件。

# php-fpm コンテナ内
npm install
npm run dev

启动Laravel Dusk

如果使用Laravel Dusk,执行以下操作

# php-fpm コンテナ内
composer require --dev laravel/dusk:"^2.0"
php artisan dusk:install

在docker-laravel/laravel/tests/DuskTestCase.php文件中进行如下编辑。


<?php

namespace Tests;

use Laravel\Dusk\TestCase as BaseTestCase;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;

abstract class DuskTestCase extends BaseTestCase
{
    use CreatesApplication;

    /**
     * Prepare for Dusk test execution.
     *
     * @beforeClass
     * @return void
     */
    public static function prepare()
    {
        // static::startChromeDriver();
    }
    /*
    *
     * Create the RemoteWebDriver instance.
     *
     * @return \Facebook\WebDriver\Remote\RemoteWebDriver
     */
    protected function driver()
    {
        $options = (new ChromeOptions)->addArguments([
            '--disable-gpu',
            // '--headless'
        ]);

        return RemoteWebDriver::create(
            'http://selenium:4444/wd/hub', DesiredCapabilities::chrome()->setCapability(
                ChromeOptions::CAPABILITY, $options
            )
        );
    }
}

完成编辑后

# php-fpm コンテナ内
php artisan dusk

如果要启动Laravel Dusk,并查看启动状态

    • Finderを起動

 

    • 移動タグを選択

 

    • サーバーへ接続を選択

 

    • サーバーアドレスにvnc://localhost:5900を入力

 

    Passwordにsecretを入力

通过进行这个操作,可以查看启动状态。

请参 …
您可以…
这是一个可供您参考的选项…
看看这个…
以这个为例…

docker-codeception-example
用Docker-Codeception-Example包装Laravel Dusk的日本语官方文档,轻松创建本地环境和Docker环境下的SSL证书
使用Docker快速搭建本地开发环境,包含LAMP和Laravel部分

广告
将在 10 秒后关闭
bannerAds