letoceiling-coder / deploy
Automated deployment package for Laravel projects with Git and HTTP API integration
Installs: 2
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/letoceiling-coder/deploy
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.0
- illuminate/console: ^10.0|^11.0|^12.0
- illuminate/http: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- phpunit/phpunit: ^10.0
README
Автоматический деплой Laravel-проектов на сервер через Git и HTTP API.
✨ Особенности
- 🚀 Простая установка - один команда через Composer
- 🔄 Автоматический деплой - Git commit, push и HTTP запрос на сервер
- 🛠️ Гибкая настройка - множество флагов для различных сценариев
- 📝 Подробное логирование - все операции записываются в лог
- 🔒 Безопасность - токены маскируются, SSL проверка
- 🧪 Dry-run режим - тестирование без выполнения
- 📦 Автоматическая регистрация - Laravel Package Auto-Discovery
📦 Установка
composer require letoceiling-coder/deploy
Пакет автоматически регистрируется. Никаких дополнительных действий не требуется!
⚙️ Настройка
1. Переменные окружения (.env)
Добавьте следующие переменные в ваш .env файл:
# Git репозиторий GIT_REPOSITORY_URL=https://github.com/username/repository.git # URL сервера для деплоя DEPLOY_SERVER_URL=https://your-server.com/api/deploy # Токен авторизации DEPLOY_TOKEN=your-secret-token-here
2. Автоматическая установка роутов
Роуты устанавливаются автоматически! Endpoint /api/deploy будет доступен сразу после установки пакета.
Если нужно кастомизировать роуты, опубликуйте файл:
php artisan vendor:publish --tag=deploy-routes
Это создаст файл routes/deploy.php, который вы можете редактировать.
3. Публикация конфигурации (опционально)
php artisan vendor:publish --tag=deploy-config
🚀 Использование
Базовое использование
php artisan deploy
Команда выполнит:
- ✅ Проверку окружения (git, composer, npm)
- ✅ Проверку конфигурации (.env)
- ✅
git add . - ✅
git commit(с автоматическим сообщением) - ✅
git pushвGIT_REPOSITORY_URL - ✅
npm run build(если не пропущено) - ✅ HTTP POST запрос на сервер для деплоя
Флаги команды
--message="Custom message"
Кастомное сообщение коммита:
php artisan deploy --message="Fix user authentication bug"
--skip-build
Пропустить сборку фронтенда:
php artisan deploy --skip-build
--dry-run
Показать все шаги без выполнения:
php artisan deploy --dry-run
--insecure
Отключить проверку SSL сертификата:
php artisan deploy --insecure
--with-seed
Выполнить seeders на сервере:
php artisan deploy --with-seed
--branch=main
Указать ветку для деплоя:
php artisan deploy --branch=develop
--version=v1.2.3
Указать конкретную версию/тег:
php artisan deploy --version=v1.2.3
Комбинирование флагов
php artisan deploy \
--message="Production release" \
--branch=main \
--version=v1.0.0 \
--with-seed \
--skip-build
📋 Логирование
Все операции логируются в файл:
storage/logs/deploy.log
Каждый шаг содержит:
- Временную метку
- Уровень логирования (INFO, ERROR, WARNING, DEBUG)
- Сообщение
- Контекст (дополнительные данные)
Пример лога:
[2024-12-24 12:30:45] [INFO] [STEP: DEPLOY] Deployment started
[2024-12-24 12:30:45] [INFO] [STEP: VALIDATE] Validating environment
[2024-12-24 12:30:46] [INFO] [STEP: GIT] Staging all changes
[2024-12-24 12:30:47] [INFO] [STEP: GIT] Committing changes: Deploy: 2024-12-24 12:30:47
[2024-12-24 12:30:48] [INFO] [STEP: GIT] Pushing to origin/main
[2024-12-24 12:30:50] [INFO] [STEP: BUILD] Running npm run build
[2024-12-24 12:31:15] [INFO] [STEP: HTTP] Sending deploy request to: https://server.com/api/deploy
[2024-12-24 12:31:16] [INFO] [STEP: DEPLOY] Deployment completed successfully
🖥️ Настройка сервера
Сервер должен принимать POST запросы на DEPLOY_SERVER_URL со следующими параметрами:
Запрос
Headers:
Authorization: Bearer {DEPLOY_TOKEN}
Content-Type: application/json
Accept: application/json
Body:
{
"branch": "main",
"version": "abc1234",
"with_seed": false
}
Ожидаемое поведение сервера
Сервер должен выполнить следующие шаги:
- ✅ Проверить токен авторизации
- ✅
git pull origin {branch} - ✅
composer install --no-dev - ✅
npm install - ✅
npm run build - ✅
php artisan migrate --force - ✅
php artisan db:seed(еслиwith_seed: true) - ✅
php artisan optimize:clear
Пример ответа сервера
Успешный ответ:
{
"success": true,
"message": "Deployment completed",
"steps": {
"git_pull": "success",
"composer_install": "success",
"npm_install": "success",
"npm_build": "success",
"migrate": "success",
"optimize": "success"
}
}
Ошибка:
{
"success": false,
"message": "Deployment failed",
"error": "Migration failed: ...",
"step": "migrate"
}
🔒 Безопасность
- ✅ Токен не логируется полностью (маскируется в логах)
- ✅ SSL проверка включена по умолчанию (отключается только с
--insecure) - ✅ Таймауты для HTTP запросов (300 секунд)
- ✅ Проверка exit-кодов всех shell-команд
🧪 Dry-Run режим
При использовании --dry-run команда покажет все шаги без выполнения:
🔍 DRY-RUN mode: No changes will be made
📦 Processing Git operations...
[DRY-RUN] Would stage and commit changes
[DRY-RUN] Would push to origin/main
🔨 Building assets...
[DRY-RUN] Would run: npm run build
🌐 Sending deploy request to server...
[DRY-RUN] Would send POST request to: https://server.com/api/deploy
📁 Структура пакета
src/
├── Commands/
│ └── DeployCommand.php # Главная команда
├── Services/
│ ├── GitService.php # Работа с Git
│ ├── BuildService.php # Сборка фронтенда
│ ├── HttpDeployService.php # HTTP запросы
│ └── LoggerService.php # Логирование
├── DTO/
│ ├── DeployOptionsDTO.php # Опции команды
│ ├── DeployRequestDTO.php # HTTP запрос
│ └── GitCommitDTO.php # Git коммит
├── Exceptions/
│ ├── DeployException.php # Базовое исключение
│ ├── GitException.php # Ошибки Git
│ ├── BuildException.php # Ошибки сборки
│ ├── HttpDeployException.php # Ошибки HTTP
│ └── ConfigurationException.php # Ошибки конфигурации
├── Contracts/
│ ├── GitServiceInterface.php
│ ├── BuildServiceInterface.php
│ ├── HttpDeployServiceInterface.php
│ └── LoggerServiceInterface.php
└── DeployServiceProvider.php # Service Provider
🛠️ Разработка
Требования
- PHP 8.1+
- Laravel 10.0+ или 11.0+
- Git
- Node.js и npm (для сборки фронтенда)
Установка для разработки
git clone https://github.com/letoceiling-coder/deploy.git
cd deploy
composer install
Тестирование
php artisan deploy --dry-run
📝 Примеры использования
Ежедневный деплой
php artisan deploy --message="Daily update"
Деплой с миграциями и сидерами
php artisan deploy --with-seed --message="Database update"
Деплой конкретной ветки
php artisan deploy --branch=staging --message="Staging deployment"
Деплой с версией
php artisan deploy --version=v2.0.0 --message="Release v2.0.0"
Деплой без сборки фронтенда
php artisan deploy --skip-build --message="Backend only update"
🐛 Решение проблем
Ошибка: "Git is not available"
Установите Git:
# Ubuntu/Debian sudo apt-get install git # macOS brew install git
Ошибка: "npm is not available"
Установите Node.js и npm. См. документацию в SERVER_SETUP.md.
Ошибка: "DEPLOY_TOKEN is not set"
Добавьте переменную в .env:
DEPLOY_TOKEN=your-token-here
Ошибка: "SSL verification failed"
Используйте флаг --insecure (только для тестирования):
php artisan deploy --insecure
📚 Документация
- INSTALLATION.md - Подробная инструкция по установке
- USAGE.md - Примеры использования и best practices
- TROUBLESHOOTING.md - Решение типичных проблем
- DEPLOY_SERVER_EXAMPLE.md - Пример серверного endpoint
- SERVER_SETUP.md - Настройка сервера Beget
- CHANGELOG.md - История изменений
🤝 Поддержка
Если у вас возникли проблемы:
- Проверьте TROUBLESHOOTING.md
- Создайте Issue
📄 Лицензия
MIT License. См. LICENSE файл для деталей.
👤 Автор
Letoceiling Coder
- GitHub: @letoceiling-coder
- Email: dev@letocewh.beget.tech
🙏 Благодарности
Спасибо всем, кто использует и улучшает этот пакет!
📈 Статистика
- Версия: 1.0.0
- PHP: 8.1+
- Laravel: 10.0+ / 11.0+