ignislabs/freighter

为PHP和Laravel提供简单的Docker开发环境管理

安装: 247

依赖者: 0

建议者: 0

安全: 0

星星: 1

关注者: 2

分支: 0

公开问题: 0

语言:Shell

1.2.1 2017-11-08 02:00 UTC

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来保持尽可能最小化。

端口

在容器内部,端口将保持默认值。但从主机机器访问它们则是另一回事。

Freighter与其他您可能已经运行的服务友好地配合使用,默认使用易于记忆的非标准端口

  • 8000用于Nginx
  • 33060用于MySQL
  • 63790用于Redis
  • 11301用于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 脚本 :bowtie:)。

只需在您的仓库根目录下创建一个名为 freighter.d 的目录,并在其中添加 shell 脚本,Freighter 将立即获取它们。

这些文件需要声明以 _fcmd_ 为前缀的函数,例如:_fcmd_artisan

请查看 vendor/ignislabs/freighter/freighter.d 中的原生脚本,以便了解如何编写它们。

正在开发一个 Artisan 命令,可以更快地生成自定义 Freighter 命令。