ignislabs / freighter
为PHP和Laravel提供简单的Docker开发环境管理
This package is not auto-updated.
Last update: 2024-09-15 22:48:46 UTC
README
为PHP和Laravel提供简单的Docker开发环境管理。
您不需要有Laravel项目就可以使用Freighter。
如果您使用Laravel,那么您会有更多玩具,但您当然不需要这样做。它确实包含面向Laravel的命令,但您不需要使用它们。
它还使用了Laravel定义的数据库环境变量名称,但只要您有一个包含这些变量声明的
.env
文件,这就足够了。
安装
您可以使用composer安装它
# Install it with composer
$ composer require ignislabs/freighter
然后您需要运行init,这次是第一次(或者当发布新版本时)
$ bash vendor/ignislabs/freighter/freighter init
init
将freighter二进制文件复制到您的仓库根目录,使其可执行,并将其添加到.gitignore
中,因为您不需要跟踪它。
现在您已经准备好使用它了
$ ./freighter start
堆栈
提供的堆栈非常全面,但我们尽量使用Alpine Linux来保持尽可能最小化。
- PHP 7.1 FPM (最新版本)
- MySQL 5.7 (最新版本)
- Nginx (最新版本 alpine)
- Redis (最新版本 alpine)
- Beanstalkd (定制的alpine — 最新版本)
端口
在容器内部,端口将保持默认值。但从主机机器访问它们则是另一回事。
Freighter与其他您可能已经运行的服务友好地配合使用,默认使用易于记忆的非标准端口
8000
用于Nginx33060
用于MySQL63790
用于Redis11301
用于Beanstalkd
您可以通过在.env
文件中设置相应的环境变量来覆盖这些默认值,将其设置为所需的值
# .env
# ...
# Freighter
F_WEB_PORT=80
F_MYSQL_PORT=3306
F_REDIS_PORT=6379
F_QUEUE_PORT=11300
主机
在容器内部,主机名将对应于在Compose文件中定义的服务名称,因此您需要在.env
文件中替换它们
# .env
# ...
DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd
如果您使用Laravel,那么您可能还需要手动在config/queue.php
中添加QUEUE_HOST
,因为Laravel默认将其硬编码。只需将'host' => env('QUEUE_HOST', 'localhost'),
添加到beanstalkd
连接中。
MySQL
Freighter使用您在.env
文件中定义的环境变量中的凭证,因此您可以使用这些凭证从主机机器连接。
只需记住使用正确的端口(默认为33060
)。
变量名称遵循Laravel约定
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=freighter
DB_USERNAME=freighter
DB_PASSWORD=secret
命令
Freighter包含一些原生命令,并将会有更多。
任何未识别的命令都将传递给docker-compose
。
您可以通过传递-h
来查看任何命令的帮助。一些命令在省略所有参数时也会显示帮助。
启动和停止您的环境
# start the environment in detached mode (up -d) $ ./freighter start # bring down the environment $ ./freighter stop # this is just an alias to docker's native `down`
自定义服务
如果您想自定义Compose文件,您可以手动将vendor中的文件复制到您的仓库中,或者通过运行./freighter copy-services
来实现。
如果在当前位置找到配置文件,Freighter 将使用这个配置文件,而不是供应商中的配置文件。
这样您可以添加服务或自定义现有服务。只要您保持相同的服务名称,应该就没有问题。
Composer
$ ./freighter composer <command> $ ./freighter c <command> # composer alias # Example: require a package $ ./freighter c require predis/predis
Artisan
$ ./freighter artisan <command> $ ./freighter art <command> # artisan alias # Example: run artisan tinker $ ./freighter art tinker # Example: publish vendor files $ ./freighter art vendor:publish --tag="config"
Laravel 日志
$ ./freighter logs:laravel [<logfile>] # Example: default laravel logs $ ./freighter logs:laravel # will tail storage/logs/laravel.log # Example: other laravel logs (if you have any) $ ./freighter logs:laravel other # will tail storage/logs/other.log
测试
# phpspec $ ./freighter phpspec <command> $ ./freighter spec <command> # alias # Example: generate a spec for a class $ ./freighter spec desc App\\Foo\\Bar\\Baz # behat $ ./freighter behat <command> # Example: initialize behat $ ./freighter behat --init
Shell 访问
$ ./freighter shell <container> $ ./freighter sh <container> # shell alias # Example: drop to bash on app container $ ./freighter shell app # Use a different shell (for alpine containers) F_SHELL=sh ./freighter sh nginx
MySQL
$ ./freighter db:dump [<file>] # Example: dump to stdout $ ./freighter db:dump # Example: dump to file $ ./freighter db:dump dump.sql
# Connect to mysql console $ ./freighter db:console $ ./freighter db:clt # db:console alias
运行 Docker Compose 命令
正如我之前提到的,任何未识别的命令都将传递给 docker-compose
。因此,您可以运行任何 docker-compose
命令,并且还有环境变量已设置的好处。
# Rebuild services without cache $ ./freighter build --no-cache # Show live redis logs $ ./freighter logs -f redis
自定义命令
Freighter 非常容易扩展(只要您熟悉 bash 脚本 )。
只需在您的仓库根目录下创建一个名为 freighter.d
的目录,并在其中添加 shell 脚本,Freighter 将立即获取它们。
这些文件需要声明以 _fcmd_
为前缀的函数,例如:_fcmd_artisan
。
请查看 vendor/ignislabs/freighter/freighter.d
中的原生脚本,以便了解如何编写它们。
正在开发一个 Artisan 命令,可以更快地生成自定义 Freighter 命令。