使用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部分