sinnebeck / laravel-served
Docker化的 artisan serve 版本
Requires (Dev)
- laravel/framework: >=6.0
- orchestra/testbench: ^4.0 || ^5.0 || ^6.0
- phpunit/phpunit: ^8.0 || ^9.0
- symfony/process: ^5.1
README
简介
Laravel Served 是 artisan serve 的 Docker 版本。它使得通过配置文件以 Laravel 方式(即快速启动开发环境)变得简单。
开始所需的东西只有
- Php (cli)
- Docker
- Laravel
注意:此包处于积极开发中,任何时间都可能发生重大变化。因此,阅读文档并在每次新版本后重新发布配置文件是个好主意。
可用服务
这些是 Served 提供的可用服务。未来还将添加更多。如果您缺少特定内容,只需创建一个新问题,请求它。
- Php
- Nginx
- Apache2
- Mysql
- Postgres
- Redis
- Memcached
- Mailhog
安装
使用 composer 安装此包
$ composer require sinnbeck/laravel-served --dev
首次运行
安装后,您可以直接启动开发服务器。这将启动 3 个 Docker 镜像
要启动容器,只需运行
$ php artisan served:up
如果您是第一次运行此命令,它将首先构建镜像,然后启动容器。如果您之前已运行过 served:up
命令,Docker 将快速检查镜像的更新,并再次启动容器。
启动和停止 Served
第一次运行后,您可以轻松地启动和停止容器,无需构建镜像或容器。只需运行
$ php artisan served:start
要再次停止容器而不删除任何内容。
$ php artisan served:stop
这很有用,如果您有多个项目使用相同的端口。
Ssh
要进入容器工作,可以运行
$ php artisan served:ssh container_name
container_name
是可选的,默认为 php(您可以在其中运行 artisan 等)。
Served 实际上并没有 ssh 进入容器,而是直接启动 bash shell。《served:ssh》听起来更好,并且快速易打。
清理
您可以删除 served 设置的所有数据。为此,只需运行
$ php artisan served:teardown
配置
虽然可以在不进行任何配置的情况下运行 served,但根据您的需求配置 served 可能是个好主意。要开始,您需要发布配置文件。
$ php artisan vendor:publish --provider="Sinnbeck\LaravelServed\ServedServiceProvider"
名称
为了避免项目之间的命名冲突,您可以为 served 配置定义自己的名称。此名称将在创建网络、镜像和容器时使用。确保它在项目之间是唯一的!如果没有设置名称,served 将使用 Laravel 安装文件夹的名称(短斜杠版本)
重要的是,名称只能包含字母、数字、.
、-
和 _
。其他特殊字符将引发异常。
如果在某个时候您希望更改名称,而该项目已使用 served,则重要的是使用 served:teardown
拆卸镜像和容器。如果您已更改名称并且遇到使用新名称启动容器的问题,只需将名称改回,运行 teardown,然后将其设置为新的名称即可。
Php
在此处,您可以指定如何构建 php。任何留空或删除的选项都将默认使用 served 提供的默认值。
'php' => [
'version' => env('SERVED_PHP_VERSION', '7.4'),
'modules' => [
'pdo_mysql',
'zip',
],
'npm' => true, //enable or disable npm in build
'xdebug' => [
'enabled' => env('SERVED_XDEBUG_ENABLED', true),
'port' => 9001,
],
],
模块数组可以填充以下 URL 中找到的任何模块(除了 parallel、pthread 和 tdlib)
https://github.com/mlocati/docker-php-extension-installer
Xdebug
建议安装xdebug以简化调试过程。要安装并配置它,只需确保在配置中将其设置为启用状态,同时运行php artisan served:up php
由于Xdebug可能会降低请求速度,因此可以根据需要快速开启和关闭它。
启用Xdebug
$ php artisan served:xdebug enable
禁用Xdebug
$ php artisan served:xdebug disable
交互式切换Xdebug
$ php artisan served:xdebug
请注意,如果您决定在配置中启用Xdebug,则需要再次运行php artisan served:up php
。如果最初未安装,则无法切换其开启或关闭状态。
Web
Served目前支持nginx和apache。只需将服务设置为想要使用的软件,并设置正确的版本(或删除版本,以便served使用合理的默认版本)。Apache目前仅支持最新版本,并将忽略任何设置的版本。
'web' => [
'service' => 'nginx', //or apache
'version' => '1.9.2',
'port' => env('SERVED_WEB_PORT', 8095),
'ssl_port' => env('SERVED_WEB_SSL_PORT', 4443),
],
如果您尝试使用https地址,将会显示证书错误。要在Chrome中修复此问题,请打开chrome://settings/certificates并选择“受信任的根证书颁发机构”选项卡。点击导入,然后在您的/storage/app/served/web/
目录中找到localhost.crt
附加功能
在此处可以定义您希望运行的额外图像。数组键用作名称,这意味着可以多次运行相同的服务,使用不同的名称(例如,两个mysql实例)。
当前支持的形象是
Mysql
端口号用于从laravel外部连接到mysql。例如,127.0.0.1:3306。
要从laravel连接到数据库,您需要使用配置键(例如,示例中的mysql
)作为主机名。端口号是mysql的默认值(3306),而不是配置中指定的端口号。
如果您希望覆盖从您的docker外部连接到mysql时使用的端口号,可以在.env中添加'SERVED_EXTERNAL_DB_PORT'。
'mysql' => [
'service' => 'mysql',
'version' => '5.7',
'port' => env('SERVED_EXTERNAL_DB_PORT', 3306),
'root_password' => 'password',
'database' => env('DB_DATABASE', 'laravel'),
'username' => env('DB_USERNAME', 'laravel'),
'password' => env('DB_PASSWORD', 'password'),
],
Postgres
要从laravel连接到postgresql,您需要使用配置键(例如,示例中的postgres
)作为主机名。端口号是mysql的默认值(5432),而不是配置中指定的端口号。要从laravel外部连接,请使用配置中指定的端口号(例如,54320)和127.0.0.1。
'postgres' => [
'service' => 'postgres',
'version' => '12.4',
'port' => 54320,
'database' => 'laravel',
'username' => 'laravel',
'password' => 'password',
],
Redis
将redis添加到php模块中,然后将其添加到您的额外数组中。
'redis' => [
'service' => 'redis',
]
将.env中的REDIS_HOST
更改为您使用的键(例如,redis)。
Memcached
将memcached添加到php模块中,然后将其添加到您的额外数组中。
'memcached' => [
'service' => 'memcached',
]
将.env中的CACHE_DRIVER
更改为memcached
,并添加MEMCACHED_HOST
,将其设置为您使用的键(例如,memcached)。
Mailhog
将mailhog添加到您的额外数组中。
'mail' => [
'service' => 'mailhog',
'port' => 8025
]
将.env中的MAIL_HOST
更改为您使用的键(例如,mail),并将MAIL_PORT
更改为1025。要在浏览器中查看邮箱,请打开http://localhost:8025(将8025替换为配置中设置的端口号)。
测试
使用以下命令运行测试:
$ composer test
待办事项
- 测试!
- 添加更多图像
- 允许用户创建服务
- 如果未设置,让served生成合适的名称(而不是默认为'served')
- 处理设置/添加卷
- 处理移除卷
- 处理图像的升级/降级
- 将cli输出接口传递给其他类,以便从它们中输出到cli
- 在其他平台(如Ubuntu)上进行测试