tiknil / skipper
用于管理多个本地Web应用实例的CLI应用程序
Requires
- php: ^8.0
- ext-posix: *
- symfony/console: ^6.2
- symfony/process: ^6.2
- symfony/yaml: ^6.2
Requires (Dev)
- laravel/pint: ^1.10
README
Skipper 是一个用于管理多个本地 Laravel docker-compose 部署的工具。
在构建 Laravel 应用程序时,它强烈倾向于使用 Tiknil 使用的模式。
安装
composer global require tiknil/skipper
确保 composer 二进制文件目录在您的 $PATH 中
您可以通过运行以下命令将 Skipper 更新到最新版本:
composer global update tiknil/skipper
用法
将当前路径注册为 Skipper 项目
# No options, sane defaults will be used and you will be asked to confirm the main fields skipper init # All fields can also be set via command line options skipper init --host=[host] --name=[name] \ --compose-file=docker/docker-compose.yml \ --env-file=docker/.env \ --http-container=nginx --php-container=php-fpm
您将被提示自动安装默认的 laravel docker compose 文件。
请参阅 项目 了解每个字段的详细信息。
启动项目容器
skipper sail
停止项目容器
skipper dock
安装 caddy 根证书
skipper proxy:certs
一旦项目运行,Skipper 提供了一些有用的命令,可以直接与之交互。
skipper bash # Start a new bash shell inside the PHP container skipper composer [command...] # Run a composer command (use instead of composer [command] skipper artisan [command...] # Run an artisan command (use instead of php artisan [command] skipper tinker # Start a new Laravel Tinker shell skipper backup # Create a new MySQL backup skipper restore --file [file] # Restore a MySQL backup
运行不带参数的 skipper 以获取可用的完整命令列表
架构
Skipper 运行一个 Caddy 容器,作为反向代理并将请求转发到相应的项目实例。Caddy 还能生成本地域的 HTTPS 证书,使本地环境非常类似于生产部署。
Skipper 在 ~/.skipper 目录中安装其文件。
Mailpit
默认情况下,Skipper 还运行一个 Mailpit 容器。您可以在 localhost:8025 上看到 Web 仪表板。
Laravel 应该使用主机 host.docker.internal 和端口 1025,驱动 SMTP
MAIL_MAILER=smtp
MAIL_HOST=host.docker.internal
MAIL_PORT=1025
这避免了为每个项目运行一个单独的 mailpit/mailhog 实例。
Docker compose 命令
您可能需要为项目运行自定义的 docker compose 命令,例如 ps 来查看正在运行的容器。
您可以使用 compose 命令
skipper compose [command]
基本上,将每个 docker-compose [command] 替换为 skipper compose [command]。这是 必需的,因为 Skipper 将一些选项附加到 docker-compose 命令中,这些选项是必需的,例如名称或环境文件路径。
项目
为了使反向代理工作,Skipper 需要知道有关项目的信息并更新 Caddy 配置文件。可以使用 init 命令注册一个新的项目。
所有可用的项目都注册在
~/.skipper/config.yaml配置文件中。
- name: 项目名称用作与项目相关的每个容器的 docker compose 前缀,包括与项目相关的数据卷和网络。因此,它必须是唯一的,更新可能会导致数据丢失(将使用新的 docker 数据卷)。
- host: 要在反向代理中注册的域名
- path: 项目根的路径
- composeFile: docker-compose 文件的相对路径。
- envFile: docker-compose 文件的 .env 文件的相对路径
- httpContainer: http 容器的名称,Caddy 应将请求转发到其中
- phpContainer: php 容器的名称,在其中运行实用命令。
开发
如果您正在开发跳过器并需要测试您的编辑,您有两个选择
- 直接运行
bin/skipper二进制文件(例如bin/skipper list) - 使用对本地项目的引用更新您的全局composer.json文件
"repositories": [
{
"type": "path",
"url": "path/to/your/local/project"
}
],
现在运行composer global require tiknil/skipper,将使用本地版本而不是发布版本。
故障排除
新项目上的无效SSL证书
如果在启动新项目后出现ssl错误,您可能需要将Caddy根证书安装到您的系统中。
skipper proxy:certs
请注意,浏览器可能会缓存ssl错误,您可能需要在安装证书后等待一段时间,以便浏览器停止显示警告
运行中的项目上的无效SSL证书(INVALID_DATE)
如果在项目运行一段时间后开始出现ssl错误,这可能是由于您的PC日期时间和容器内部时钟之间的时间偏差引起的。您可以重新加载caddy容器以解决此问题
skipper proxy:reload
未找到命令:skipper
如果您的shell在通过composer全局安装后找不到跳过器命令,您可能没有将composer的bin目录添加到$PATH中。
将以下行添加到您的~/.zshrc
export PATH=$PATH:$HOME/.composer/vendor/bin
然后重新加载文件
source ~/.zshrc
如果您不使用zsh作为您的shell,请参阅您首选的shell配置文件,而不是~/.zshrc