elijahcruz / ecdeployer
使用简单的 CLI 部署项目
Requires
- php: ^8.1
- ext-openssl: *
- ext-yaml: *
- guzzlehttp/guzzle: ^7.5
- illuminate/http: ^10.0
- nunomaduro/termwind: ^1.15.1
- spatie/ssh: ^1.9
- symfony/yaml: ^6.3
Requires (Dev)
- laravel-zero/framework: ^10.0.2
- laravel/pint: ^1.10
- mockery/mockery: ^1.5.1
- pestphp/pest: ^2.5
README
轻松将您的项目部署到多个服务器。
要求
- PHP 8.1 或更高版本
- Composer
- 对您的服务器的 SSH 访问权限
- OpenSSL PHP 扩展
- YAML PHP 扩展
- 我们假设您在
~/.ssh/id_rsa
有一个 SSH 密钥。
安装
要安装,只需执行简单的 composer require 命令。
composer global require elijahcruz/ecdeployer
使用方法
命令
初始化
您可以使用 init 命令在项目中创建一个新的 deploy.json 文件。
ecdeploy init
请注意,如果已经存在 deploy.json 文件,它将像您想要覆盖它一样。
如果您添加 --laravel
,它将创建一个具有默认 Laravel 配置的 deploy.json 文件。
如果您添加 --gitignore
,它将把 deploy.json 文件添加到您的 .gitignore 文件中。
如果您添加 --format=
,您可以选择 json、php 或 yaml 文件。
部署
您可以使用部署命令将项目部署到您的服务器。
ecdeploy deploy
使用 --all
将部署到所有服务器。
使用 --tags
将部署到具有指定标签的所有服务器。
如果您不选择任何选项,它将提示您选择要部署到的服务器。您可以通过逗号分隔选择多个服务器。
加密
您可以使用 encrypt 和 decrypt 命令对部署文件进行加密和解密。
这些将在部署文件的同一目录中创建一个扩展名为 .enc
的新文件。
如果您添加 --remove
,则在使用 encrypt 时将删除原始文件,而在使用 decrypt 时将删除加密文件。
配置
deploy.json
deploy.json 文件是您配置服务器和项目的位置。
{ "name": "myproject", "repo": "git@github.com:myproject/myproject.git", "servers": [ { "name": "prod-server", "host": "192.168.1.1", "user": "root", "port": 22, "tags": [ "prod" ], "path": "~/myproject", "commands": [ "before", "during", "after", "node" ] } ], "commands": { "before": [ "php artisan down", "php artisan optimize:clear", "git pull origin master", "composer install --no-interaction --prefer-dist --no-dev --optimize-autoloader" ], "queue-pause": [ "php artisan horizon:pause" ], "during": [ "php artisan migrate --force", "php artisan config:cache", "php artisan route:cache", "php artisan view:cache" ], "node": [ "npm install", "npm run build" ], "after": [ "php artisan up" ], "queue-resume": [ "php artisan horizon:continue" ] } }
服务器
所有服务器都定义在 servers 数组中。每个服务器都有以下属性
- 名称:服务器的名称
- 主机:服务器的 IP 地址或域名
- 用户:连接到服务器的用户
- 端口:连接到服务器的端口
- 标签:用于识别服务器的标签数组。
- 路径:服务器上项目的路径
- 命令:要在服务器上运行的命令阶段数组
命令
所有命令都在阶段中定义。阶段按在命令数组中定义的顺序运行。所以在上面的示例中,node
将在 after
之前运行,即使 after
在服务器的命令数组中定义在 node
之前。
阶段名称可以是您想要的任何名称,并且您可以拥有任意数量的阶段。唯一的例外是 node
阶段。
您也不需要创建服务器上的路径,如果它不存在,它将自动创建。
贡献
有关详细信息,请参阅 CONTRIBUTING。
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。