🔧 Restructure scripts and add CLI tool
✨ New features: - Add CLI tool for container command execution - Reorganize all scripts into bin/ directory - Create convenient wrappers in project root - Add local changes auto-commit functionality - Enhanced backup repository management 📁 Structure changes: - Move all scripts to bin/ directory - Create wrapper scripts in root (cli, update, start, stop, logs) - Add setup-backup.sh for backup repository management - Update documentation with new CLI examples 🛠️ CLI capabilities: - Django commands (shell, migrate, collectstatic, etc.) - System commands (bash, logs, status) - Container management (restart, status) - Interactive and non-interactive modes 📚 Documentation: - Updated SCRIPTS_README.md with CLI examples - Added troubleshooting section - Comprehensive usage examples
This commit is contained in:
@@ -2,9 +2,28 @@
|
|||||||
|
|
||||||
Этот набор скриптов предназначен для автоматизации процессов разработки и развертывания проекта SmartSolTech.
|
Этот набор скриптов предназначен для автоматизации процессов разработки и развертывания проекта SmartSolTech.
|
||||||
|
|
||||||
|
## Структура проекта
|
||||||
|
|
||||||
|
```
|
||||||
|
smartsoltech.kr/
|
||||||
|
├── cli # CLI для работы с контейнером веб-приложения
|
||||||
|
├── update # Полное обновление проекта
|
||||||
|
├── start # Быстрый запуск сервисов
|
||||||
|
├── stop # Остановка сервисов
|
||||||
|
├── logs # Просмотр логов
|
||||||
|
└── bin/ # Папка со всеми служебными скриптами
|
||||||
|
├── cli.sh # CLI скрипт (основной)
|
||||||
|
├── update.sh # Скрипт обновления (основной)
|
||||||
|
├── start.sh # Скрипт запуска
|
||||||
|
├── stop.sh # Скрипт остановки
|
||||||
|
├── logs.sh # Скрипт логов
|
||||||
|
├── demo.sh # Демонстрация возможностей
|
||||||
|
└── setup-backup.sh # Настройка backup репозитория
|
||||||
|
```
|
||||||
|
|
||||||
## Доступные скрипты
|
## Доступные скрипты
|
||||||
|
|
||||||
### 🚀 `./update.sh` - Полное обновление проекта
|
### 🚀 `./update` - Полное обновление проекта
|
||||||
Выполняет полный цикл обновления:
|
Выполняет полный цикл обновления:
|
||||||
- Создание бэкапа в удаленном репозитории
|
- Создание бэкапа в удаленном репозитории
|
||||||
- Обновление кода из Git (origin или backup)
|
- Обновление кода из Git (origin или backup)
|
||||||
@@ -17,32 +36,72 @@
|
|||||||
|
|
||||||
**Использование:**
|
**Использование:**
|
||||||
```bash
|
```bash
|
||||||
./update.sh # Обновление из origin (по умолчанию)
|
./update # Обновление из origin (по умолчанию)
|
||||||
./update.sh origin # Обновление из origin репозитория
|
./update origin # Обновление из origin репозитория
|
||||||
./update.sh backup # Обновление из backup репозитория
|
./update backup # Обновление из backup репозитория
|
||||||
./update.sh origin backup # Обновление из origin с бэкапом в backup
|
./update origin backup # Обновление из origin с бэкапом в backup
|
||||||
./update.sh backup origin # Обновление из backup с бэкапом в origin
|
./update backup origin # Обновление из backup с бэкапом в origin
|
||||||
./update.sh --help # Показать справку
|
./update --help # Показать справку
|
||||||
./update.sh --logs # Показать логи без обновления
|
./update --logs # Показать логи без обновления
|
||||||
./update.sh --status # Показать статус сервисов
|
./update --status # Показать статус сервисов
|
||||||
```
|
```
|
||||||
|
|
||||||
**Примеры использования удаленных репозиториев:**
|
**Примеры использования удаленных репозиториев:**
|
||||||
```bash
|
```bash
|
||||||
# Стандартное обновление из основного репозитория
|
# Стандартное обновление из основного репозитория
|
||||||
./update.sh
|
./update
|
||||||
|
|
||||||
# Обновление из резервного репозитория (если основной недоступен)
|
# Обновление из резервного репозитория (если основной недоступен)
|
||||||
./update.sh backup
|
./update backup
|
||||||
|
|
||||||
# Обновление из основного репозитория с созданием бэкапа в резервном
|
# Обновление из основного репозитория с созданием бэкапа в резервном
|
||||||
./update.sh origin backup
|
./update origin backup
|
||||||
|
|
||||||
# Переключение на резервный сервер с бэкапом в основной
|
# Переключение на резервный сервер с бэкапом в основной
|
||||||
./update.sh backup origin
|
./update backup origin
|
||||||
```
|
```
|
||||||
|
|
||||||
### ▶️ `./start.sh` - Быстрый запуск
|
### 💻 `./cli` - CLI для работы с контейнером веб-приложения
|
||||||
|
Интерфейс командной строки для выполнения команд внутри контейнера Django:
|
||||||
|
- Django команды (shell, migrate, collectstatic и др.)
|
||||||
|
- Системные команды (bash, ps, logs)
|
||||||
|
- Управление контейнером (restart, status)
|
||||||
|
|
||||||
|
**Использование:**
|
||||||
|
```bash
|
||||||
|
./cli shell # Django shell
|
||||||
|
./cli bash # Bash в контейнере
|
||||||
|
./cli migrate # Выполнить миграции
|
||||||
|
./cli makemigrations # Создать миграции
|
||||||
|
./cli createsuperuser # Создать суперпользователя
|
||||||
|
./cli collectstatic # Собрать статические файлы
|
||||||
|
./cli manage <command> # Произвольная Django команда
|
||||||
|
./cli exec <command> # Произвольная системная команда
|
||||||
|
./cli logs [количество_строк] # Логи приложения
|
||||||
|
./cli status # Статус контейнеров
|
||||||
|
./cli restart # Перезапуск веб-контейнера
|
||||||
|
./cli --help # Показать справку
|
||||||
|
```
|
||||||
|
|
||||||
|
**Примеры использования CLI:**
|
||||||
|
```bash
|
||||||
|
# Django разработка
|
||||||
|
./cli shell # Интерактивная оболочка Django
|
||||||
|
./cli manage showmigrations # Показать статус миграций
|
||||||
|
./cli dbshell # Подключиться к базе данных
|
||||||
|
|
||||||
|
# Системное администрирование
|
||||||
|
./cli bash # Зайти в контейнер
|
||||||
|
./cli exec cat /app/requirements.txt # Посмотреть зависимости
|
||||||
|
./cli ps # Процессы в контейнере
|
||||||
|
./cli logs 100 # Последние 100 строк логов
|
||||||
|
|
||||||
|
# Управление
|
||||||
|
./cli status # Статус всех сервисов
|
||||||
|
./cli restart # Перезапуск веб-сервера
|
||||||
|
```
|
||||||
|
|
||||||
|
### ▶️ `./start` - Быстрый запуск
|
||||||
Быстро запускает все сервисы проекта:
|
Быстро запускает все сервисы проекта:
|
||||||
- Запуск Docker контейнеров
|
- Запуск Docker контейнеров
|
||||||
- Проверка статуса сервисов
|
- Проверка статуса сервисов
|
||||||
@@ -50,10 +109,10 @@
|
|||||||
|
|
||||||
**Использование:**
|
**Использование:**
|
||||||
```bash
|
```bash
|
||||||
./start.sh
|
./start
|
||||||
```
|
```
|
||||||
|
|
||||||
### ⏹️ `./stop.sh` - Остановка сервисов
|
### ⏹️ `./stop` - Остановка сервисов
|
||||||
Останавливает сервисы с различными опциями:
|
Останавливает сервисы с различными опциями:
|
||||||
- Простая остановка контейнеров
|
- Простая остановка контейнеров
|
||||||
- Остановка с удалением контейнеров и волюмов
|
- Остановка с удалением контейнеров и волюмов
|
||||||
@@ -61,13 +120,13 @@
|
|||||||
|
|
||||||
**Использование:**
|
**Использование:**
|
||||||
```bash
|
```bash
|
||||||
./stop.sh # Простая остановка
|
./stop # Простая остановка
|
||||||
./stop.sh --remove # Остановка + удаление контейнеров и волюмов
|
./stop --remove # Остановка + удаление контейнеров и волюмов
|
||||||
./stop.sh --clean # Полная очистка (контейнеры + образы + волюмы)
|
./stop --clean # Полная очистка (контейнеры + образы + волюмы)
|
||||||
./stop.sh --help # Показать справку
|
./stop --help # Показать справку
|
||||||
```
|
```
|
||||||
|
|
||||||
### 📋 `./logs.sh` - Просмотр логов
|
### 📋 `./logs` - Просмотр логов
|
||||||
Показывает логи сервисов в реальном времени:
|
Показывает логи сервисов в реальном времени:
|
||||||
- Все логи или конкретного сервиса
|
- Все логи или конкретного сервиса
|
||||||
- Последние N строк логов
|
- Последние N строк логов
|
||||||
@@ -75,14 +134,31 @@
|
|||||||
|
|
||||||
**Использование:**
|
**Использование:**
|
||||||
```bash
|
```bash
|
||||||
./logs.sh # Все логи в реальном времени
|
./logs # Все логи в реальном времени
|
||||||
./logs.sh web # Логи только веб-сервера
|
./logs web # Логи только веб-сервера
|
||||||
./logs.sh db # Логи базы данных
|
./logs db # Логи базы данных
|
||||||
./logs.sh pgadmin # Логи PgAdmin
|
./logs pgadmin # Логи PgAdmin
|
||||||
./logs.sh --tail 50 # Последние 50 строк
|
./logs --tail 50 # Последние 50 строк
|
||||||
./logs.sh --help # Показать справку
|
./logs --help # Показать справку
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Служебные скрипты в папке bin/
|
||||||
|
|
||||||
|
### 🛠️ `./bin/setup-backup.sh` - Настройка backup репозитория
|
||||||
|
Помогает настроить дополнительный удаленный репозиторий для резервного копирования.
|
||||||
|
|
||||||
|
**Использование:**
|
||||||
|
```bash
|
||||||
|
./bin/setup-backup.sh # Интерактивная настройка
|
||||||
|
./bin/setup-backup.sh <URL> # Добавить backup репозиторий
|
||||||
|
./bin/setup-backup.sh <URL> <name> # Добавить с именем
|
||||||
|
./bin/setup-backup.sh --remove <name> # Удалить backup репозиторий
|
||||||
|
./bin/setup-backup.sh --list # Показать все репозитории
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🎯 `./bin/demo.sh` - Демонстрация возможностей
|
||||||
|
Показывает примеры использования всех скриптов и текущий статус проекта.
|
||||||
|
|
||||||
## Доступные сервисы
|
## Доступные сервисы
|
||||||
|
|
||||||
После запуска будут доступны:
|
После запуска будут доступны:
|
||||||
@@ -110,29 +186,57 @@
|
|||||||
### Ежедневное обновление
|
### Ежедневное обновление
|
||||||
```bash
|
```bash
|
||||||
# Полное обновление с проверкой
|
# Полное обновление с проверкой
|
||||||
./update.sh
|
./update
|
||||||
|
|
||||||
# Если что-то пошло не так - смотрим логи
|
# Если что-то пошло не так - смотрим логи
|
||||||
./logs.sh --tail 100
|
./logs --tail 100
|
||||||
|
|
||||||
|
# Заходим в контейнер для диагностики
|
||||||
|
./cli bash
|
||||||
```
|
```
|
||||||
|
|
||||||
### Разработка
|
### Разработка
|
||||||
```bash
|
```bash
|
||||||
# Запуск для разработки
|
# Запуск для разработки
|
||||||
./start.sh
|
./start
|
||||||
|
|
||||||
|
# Работа с Django
|
||||||
|
./cli shell # Django shell для тестирования
|
||||||
|
./cli makemigrations # Создание миграций
|
||||||
|
./cli migrate # Применение миграций
|
||||||
|
|
||||||
# Просмотр логов во время разработки
|
# Просмотр логов во время разработки
|
||||||
./logs.sh web
|
./logs web
|
||||||
|
|
||||||
|
# Перезапуск после изменений
|
||||||
|
./cli restart
|
||||||
|
|
||||||
# Остановка после работы
|
# Остановка после работы
|
||||||
./stop.sh
|
./stop
|
||||||
|
```
|
||||||
|
|
||||||
|
### Администрирование
|
||||||
|
```bash
|
||||||
|
# Создание суперпользователя
|
||||||
|
./cli createsuperuser
|
||||||
|
|
||||||
|
# Сбор статических файлов
|
||||||
|
./cli collectstatic
|
||||||
|
|
||||||
|
# Проверка состояния
|
||||||
|
./cli status
|
||||||
|
./cli logs 50
|
||||||
|
|
||||||
|
# Управление контейнером
|
||||||
|
./cli exec ps aux # Процессы в контейнере
|
||||||
|
./cli exec df -h # Дисковое пространство
|
||||||
```
|
```
|
||||||
|
|
||||||
### Полная перезагрузка
|
### Полная перезагрузка
|
||||||
```bash
|
```bash
|
||||||
# Полная очистка и пересборка
|
# Полная очистка и пересборка
|
||||||
./stop.sh --clean
|
./stop --clean
|
||||||
./update.sh
|
./update
|
||||||
```
|
```
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
@@ -140,21 +244,36 @@
|
|||||||
### Проблемы с контейнерами
|
### Проблемы с контейнерами
|
||||||
```bash
|
```bash
|
||||||
# Проверить статус
|
# Проверить статус
|
||||||
./logs.sh --help
|
./cli status
|
||||||
docker-compose ps
|
./logs --help
|
||||||
|
|
||||||
# Перезапустить проблемный сервис
|
# Перезапустить проблемный сервис
|
||||||
docker-compose restart web
|
./cli restart
|
||||||
```
|
```
|
||||||
|
|
||||||
### Проблемы с базой данных
|
### Проблемы с базой данных
|
||||||
```bash
|
```bash
|
||||||
# Проверить логи БД
|
# Проверить логи БД
|
||||||
./logs.sh db
|
./logs db
|
||||||
|
|
||||||
|
# Зайти в базу данных
|
||||||
|
./cli dbshell
|
||||||
|
|
||||||
# Принудительная пересборка
|
# Принудительная пересборка
|
||||||
./stop.sh --remove
|
./stop --remove
|
||||||
./update.sh
|
./update
|
||||||
|
```
|
||||||
|
|
||||||
|
### Проблемы с Django
|
||||||
|
```bash
|
||||||
|
# Django shell для диагностики
|
||||||
|
./cli shell
|
||||||
|
|
||||||
|
# Проверка миграций
|
||||||
|
./cli manage showmigrations
|
||||||
|
|
||||||
|
# Проверка конфигурации
|
||||||
|
./cli check
|
||||||
```
|
```
|
||||||
|
|
||||||
### Проблемы с Git
|
### Проблемы с Git
|
||||||
|
|||||||
207
bin/cli.sh
Executable file
207
bin/cli.sh
Executable file
@@ -0,0 +1,207 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# SmartSolTech - CLI для выполнения команд в контейнере веб-приложения
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Цвета для вывода
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
log() {
|
||||||
|
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
success() {
|
||||||
|
echo -e "${GREEN}✅ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
warning() {
|
||||||
|
echo -e "${YELLOW}⚠️ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
echo -e "${RED}❌ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
info() {
|
||||||
|
echo -e "${CYAN}ℹ️ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Имя контейнера Django
|
||||||
|
CONTAINER_NAME="django_app"
|
||||||
|
|
||||||
|
# Проверка что контейнер запущен
|
||||||
|
check_container() {
|
||||||
|
if ! docker ps --format "table {{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then
|
||||||
|
error "Контейнер $CONTAINER_NAME не запущен"
|
||||||
|
warning "Запустите сервисы командой: ./bin/start.sh"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Выполнение команды в контейнере
|
||||||
|
run_in_container() {
|
||||||
|
local cmd="$*"
|
||||||
|
log "Выполнение в контейнере: $cmd"
|
||||||
|
docker exec -it $CONTAINER_NAME $cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
# Выполнение Django команды
|
||||||
|
run_django_command() {
|
||||||
|
local django_cmd="$*"
|
||||||
|
run_in_container python smartsoltech/manage.py $django_cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
# Выполнение команды без интерактивности
|
||||||
|
run_in_container_quiet() {
|
||||||
|
local cmd="$*"
|
||||||
|
docker exec $CONTAINER_NAME $cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
# Django команды без интерактивности
|
||||||
|
run_django_command_quiet() {
|
||||||
|
local django_cmd="$*"
|
||||||
|
run_in_container_quiet python smartsoltech/manage.py $django_cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
# Показать справку
|
||||||
|
show_help() {
|
||||||
|
echo "SmartSolTech CLI - Выполнение команд в контейнере веб-приложения"
|
||||||
|
echo ""
|
||||||
|
echo "Использование:"
|
||||||
|
echo " $0 <команда> [аргументы...]"
|
||||||
|
echo ""
|
||||||
|
echo "Django команды:"
|
||||||
|
echo " $0 shell # Django shell"
|
||||||
|
echo " $0 dbshell # Database shell"
|
||||||
|
echo " $0 migrate # Выполнить миграции"
|
||||||
|
echo " $0 makemigrations # Создать миграции"
|
||||||
|
echo " $0 collectstatic # Собрать статические файлы"
|
||||||
|
echo " $0 createsuperuser # Создать суперпользователя"
|
||||||
|
echo " $0 check # Проверка проекта"
|
||||||
|
echo " $0 runserver # Запуск dev сервера"
|
||||||
|
echo ""
|
||||||
|
echo "Системные команды:"
|
||||||
|
echo " $0 bash # Bash оболочка в контейнере"
|
||||||
|
echo " $0 sh # Sh оболочка в контейнере"
|
||||||
|
echo " $0 ps # Список процессов в контейнере"
|
||||||
|
echo " $0 logs [lines] # Логи приложения (по умолчанию 50 строк)"
|
||||||
|
echo ""
|
||||||
|
echo "Пользовательские команды:"
|
||||||
|
echo " $0 manage <django_command> # Произвольная Django команда"
|
||||||
|
echo " $0 exec <system_command> # Произвольная системная команда"
|
||||||
|
echo ""
|
||||||
|
echo "Специальные команды:"
|
||||||
|
echo " $0 status # Статус контейнеров"
|
||||||
|
echo " $0 restart # Перезапуск веб-контейнера"
|
||||||
|
echo " $0 --help # Показать эту справку"
|
||||||
|
echo ""
|
||||||
|
echo "Примеры:"
|
||||||
|
echo " $0 shell # Django shell"
|
||||||
|
echo " $0 manage showmigrations # Показать статус миграций"
|
||||||
|
echo " $0 exec cat /app/requirements.txt # Показать зависимости"
|
||||||
|
echo " $0 logs 100 # Последние 100 строк логов"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Проверка параметров и выполнение команд
|
||||||
|
case "${1:-}" in
|
||||||
|
--help|-h|help)
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Django команды
|
||||||
|
shell|dbshell|migrate|makemigrations|collectstatic|createsuperuser|check|runserver)
|
||||||
|
check_container
|
||||||
|
run_django_command "$@"
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Системные команды
|
||||||
|
bash|sh)
|
||||||
|
check_container
|
||||||
|
run_in_container "$@"
|
||||||
|
;;
|
||||||
|
|
||||||
|
ps)
|
||||||
|
check_container
|
||||||
|
run_in_container_quiet ps aux
|
||||||
|
;;
|
||||||
|
|
||||||
|
logs)
|
||||||
|
check_container
|
||||||
|
lines="${2:-50}"
|
||||||
|
info "Показываем последние $lines строк логов..."
|
||||||
|
docker logs --tail=$lines $CONTAINER_NAME
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Пользовательские команды
|
||||||
|
manage)
|
||||||
|
check_container
|
||||||
|
shift # убираем 'manage' из аргументов
|
||||||
|
run_django_command "$@"
|
||||||
|
;;
|
||||||
|
|
||||||
|
exec)
|
||||||
|
check_container
|
||||||
|
shift # убираем 'exec' из аргументов
|
||||||
|
run_in_container "$@"
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Специальные команды
|
||||||
|
status)
|
||||||
|
echo ""
|
||||||
|
info "Статус контейнеров:"
|
||||||
|
docker-compose ps
|
||||||
|
echo ""
|
||||||
|
if docker ps --format "table {{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then
|
||||||
|
success "Веб-контейнер $CONTAINER_NAME запущен"
|
||||||
|
info "Процессы в контейнере:"
|
||||||
|
docker exec $CONTAINER_NAME ps aux | head -10
|
||||||
|
else
|
||||||
|
warning "Веб-контейнер $CONTAINER_NAME не запущен"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
restart)
|
||||||
|
log "Перезапуск веб-контейнера..."
|
||||||
|
docker-compose restart web
|
||||||
|
success "Веб-контейнер перезапущен"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"")
|
||||||
|
error "Не указана команда"
|
||||||
|
echo ""
|
||||||
|
echo "Используйте '$0 --help' для справки"
|
||||||
|
echo ""
|
||||||
|
echo "Быстрые команды:"
|
||||||
|
echo " $0 shell # Django shell"
|
||||||
|
echo " $0 bash # Bash в контейнере"
|
||||||
|
echo " $0 status # Статус сервисов"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
# Пробуем выполнить как Django команду
|
||||||
|
check_container
|
||||||
|
log "Попытка выполнить как Django команду: $*"
|
||||||
|
if run_django_command_quiet help "$1" >/dev/null 2>&1; then
|
||||||
|
run_django_command "$@"
|
||||||
|
else
|
||||||
|
error "Неизвестная команда: $1"
|
||||||
|
echo ""
|
||||||
|
echo "Попробуйте:"
|
||||||
|
echo " $0 --help # Полная справка"
|
||||||
|
echo " $0 manage help # Список Django команд"
|
||||||
|
echo " $0 exec $* # Выполнить как системную команду"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
45
bin/demo.sh
Executable file
45
bin/demo.sh
Executable file
@@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# SmartSolTech - Пример использования скриптов обновления
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
echo "🚀 Демонстрация скриптов управления SmartSolTech"
|
||||||
|
echo "=============================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "📋 Доступные удаленные репозитории:"
|
||||||
|
git remote -v
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "📊 Текущий статус проекта:"
|
||||||
|
./update.sh --status
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "💡 Примеры команд обновления:"
|
||||||
|
echo ""
|
||||||
|
echo " # Стандартное обновление из основного репозитория"
|
||||||
|
echo " ./update.sh"
|
||||||
|
echo ""
|
||||||
|
echo " # Обновление из резервного репозитория"
|
||||||
|
echo " ./update.sh backup"
|
||||||
|
echo ""
|
||||||
|
echo " # Обновление из основного с созданием бэкапа в резервном"
|
||||||
|
echo " ./update.sh origin backup"
|
||||||
|
echo ""
|
||||||
|
echo " # Обновление из резервного с бэкапом в основной"
|
||||||
|
echo " ./update.sh backup origin"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "🛠️ Другие полезные команды:"
|
||||||
|
echo ""
|
||||||
|
echo " ./start.sh # Быстрый запуск сервисов"
|
||||||
|
echo " ./stop.sh # Остановка сервисов"
|
||||||
|
echo " ./stop.sh --clean # Полная очистка"
|
||||||
|
echo " ./logs.sh # Просмотр логов"
|
||||||
|
echo " ./logs.sh web # Логи веб-сервера"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "📚 Полная документация: cat SCRIPTS_README.md"
|
||||||
|
echo ""
|
||||||
|
echo "✅ Готово!"
|
||||||
157
bin/setup-backup.sh
Executable file
157
bin/setup-backup.sh
Executable file
@@ -0,0 +1,157 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# SmartSolTech - Настройка резервного репозитория
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Цвета для вывода
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
log() {
|
||||||
|
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
success() {
|
||||||
|
echo -e "${GREEN}✅ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
warning() {
|
||||||
|
echo -e "${YELLOW}⚠️ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
echo -e "${RED}❌ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🔧 SmartSolTech - Настройка backup репозитория"
|
||||||
|
echo "=============================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Проверка что мы в Git репозитории
|
||||||
|
if [ ! -d ".git" ]; then
|
||||||
|
error "Не найден Git репозиторий. Запустите скрипт из корня проекта."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Показать текущие репозитории
|
||||||
|
log "Текущие удаленные репозитории:"
|
||||||
|
git remote -v
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Функция добавления нового backup репозитория
|
||||||
|
add_backup_repo() {
|
||||||
|
local repo_url="$1"
|
||||||
|
local repo_name="${2:-backup}"
|
||||||
|
|
||||||
|
log "Добавление backup репозитория..."
|
||||||
|
|
||||||
|
# Проверяем не существует ли уже такой remote
|
||||||
|
if git remote | grep -q "^${repo_name}$"; then
|
||||||
|
warning "Репозиторий $repo_name уже существует"
|
||||||
|
git remote -v | grep "^${repo_name}"
|
||||||
|
read -p "Заменить? (y/N): " replace_choice
|
||||||
|
if [[ $replace_choice =~ ^[Yy]$ ]]; then
|
||||||
|
git remote remove $repo_name
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Добавляем новый remote
|
||||||
|
if git remote add $repo_name "$repo_url"; then
|
||||||
|
success "Backup репозиторий $repo_name добавлен"
|
||||||
|
|
||||||
|
# Проверяем подключение
|
||||||
|
log "Проверка подключения..."
|
||||||
|
if git ls-remote $repo_name > /dev/null 2>&1; then
|
||||||
|
success "Подключение к $repo_name работает"
|
||||||
|
|
||||||
|
# Предлагаем сделать первый push
|
||||||
|
read -p "Отправить текущее состояние в backup? (y/N): " push_choice
|
||||||
|
if [[ $push_choice =~ ^[Yy]$ ]]; then
|
||||||
|
git push $repo_name master
|
||||||
|
success "Backup создан в $repo_name"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
error "Не удалось подключиться к $repo_name"
|
||||||
|
git remote remove $repo_name
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
error "Не удалось добавить backup репозиторий"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Обработка параметров
|
||||||
|
case "${1:-}" in
|
||||||
|
--help|-h)
|
||||||
|
echo "Использование:"
|
||||||
|
echo " $0 # Интерактивная настройка"
|
||||||
|
echo " $0 <URL> # Добавить backup репозиторий"
|
||||||
|
echo " $0 <URL> <name> # Добавить с именем"
|
||||||
|
echo " $0 --remove <name> # Удалить backup репозиторий"
|
||||||
|
echo " $0 --list # Показать все репозитории"
|
||||||
|
echo ""
|
||||||
|
echo "Примеры:"
|
||||||
|
echo " $0 git@github.com:user/backup.git"
|
||||||
|
echo " $0 git@server.com:backup.git mybkp"
|
||||||
|
echo " $0 --remove backup"
|
||||||
|
echo ""
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--list)
|
||||||
|
log "Все удаленные репозитории:"
|
||||||
|
git remote -v
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--remove)
|
||||||
|
if [ -z "$2" ]; then
|
||||||
|
error "Укажите имя репозитория для удаления"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
log "Удаление репозитория $2..."
|
||||||
|
if git remote remove "$2"; then
|
||||||
|
success "Репозиторий $2 удален"
|
||||||
|
else
|
||||||
|
error "Не удалось удалить репозиторий $2"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
# Интерактивный режим
|
||||||
|
echo "💡 Примеры URL репозиториев:"
|
||||||
|
echo " git@github.com:username/repo-backup.git"
|
||||||
|
echo " ssh://git@server.com:2222/user/backup.git"
|
||||||
|
echo " https://github.com/username/repo-backup.git"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -p "Введите URL backup репозитория: " repo_url
|
||||||
|
if [ -z "$repo_url" ]; then
|
||||||
|
warning "URL не указан, выход"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -p "Введите имя (backup): " repo_name
|
||||||
|
repo_name="${repo_name:-backup}"
|
||||||
|
|
||||||
|
add_backup_repo "$repo_url" "$repo_name"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# URL передан как параметр
|
||||||
|
add_backup_repo "$1" "$2"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
log "Обновленный список репозиториев:"
|
||||||
|
git remote -v
|
||||||
|
echo ""
|
||||||
|
success "Готово!"
|
||||||
@@ -64,7 +64,29 @@ cleanup_staticfiles() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Функция обновления кода
|
# Функция сохранения локальных изменений
|
||||||
|
save_local_changes() {
|
||||||
|
log "Проверка локальных изменений..."
|
||||||
|
|
||||||
|
# Проверяем есть ли изменения в рабочей директории или индексе
|
||||||
|
if [ -n "$(git status --porcelain)" ]; then
|
||||||
|
warning "Обнаружены локальные изменения, сохраняем в коммит..."
|
||||||
|
|
||||||
|
# Добавляем все изменения
|
||||||
|
git add .
|
||||||
|
|
||||||
|
# Создаем коммит с временной меткой
|
||||||
|
local commit_msg="Auto commit before update $(date '+%Y-%m-%d %H:%M:%S')"
|
||||||
|
if git commit -m "$commit_msg"; then
|
||||||
|
success "Локальные изменения сохранены в коммит"
|
||||||
|
log "Коммит: $commit_msg"
|
||||||
|
else
|
||||||
|
warning "Не удалось создать коммит (возможно нет изменений для коммита)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log "Локальных изменений не обнаружено"
|
||||||
|
fi
|
||||||
|
}
|
||||||
update_code() {
|
update_code() {
|
||||||
local remote_name="${1:-origin}"
|
local remote_name="${1:-origin}"
|
||||||
log "Обновление кода из репозитория $remote_name..."
|
log "Обновление кода из репозитория $remote_name..."
|
||||||
@@ -83,13 +105,6 @@ update_code() {
|
|||||||
git config pull.rebase false
|
git config pull.rebase false
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Сохраняем неотслеживаемые изменения
|
|
||||||
if [ -n "$(git status --porcelain)" ]; then
|
|
||||||
warning "Обнаружены локальные изменения, сохраняем..."
|
|
||||||
git add .
|
|
||||||
git commit -m "Auto commit before update $(date '+%Y-%m-%d %H:%M:%S')" || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Получаем обновления
|
# Получаем обновления
|
||||||
log "Получение обновлений из $remote_name..."
|
log "Получение обновлений из $remote_name..."
|
||||||
git fetch $remote_name
|
git fetch $remote_name
|
||||||
@@ -219,23 +234,25 @@ show_logs() {
|
|||||||
# Функция бэкапа в удаленный репозиторий
|
# Функция бэкапа в удаленный репозиторий
|
||||||
backup_to_remote() {
|
backup_to_remote() {
|
||||||
local backup_remote="${1:-backup}"
|
local backup_remote="${1:-backup}"
|
||||||
|
|
||||||
|
# Пропускаем если это тот же репозиторий что используется для обновления
|
||||||
|
local update_remote="${2:-origin}"
|
||||||
|
if [ "$backup_remote" = "$update_remote" ]; then
|
||||||
|
log "Пропускаем бэкап - используется тот же репозиторий для обновления"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
log "Создание бэкапа в удаленном репозитории $backup_remote..."
|
log "Создание бэкапа в удаленном репозитории $backup_remote..."
|
||||||
|
|
||||||
if git remote | grep -q "^${backup_remote}$"; then
|
if git remote | grep -q "^${backup_remote}$"; then
|
||||||
# Проверяем есть ли изменения для коммита
|
# Пушим текущее состояние в backup (изменения уже сохранены в коммит)
|
||||||
if ! git diff --quiet || ! git diff --cached --quiet; then
|
|
||||||
git add .
|
|
||||||
git commit -m "Auto backup before update $(date '+%Y-%m-%d %H:%M:%S')"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Пушим в backup
|
|
||||||
if git push $backup_remote master; then
|
if git push $backup_remote master; then
|
||||||
success "Бэкап создан в удаленном репозитории $backup_remote"
|
success "Бэкап создан в удаленном репозитории $backup_remote"
|
||||||
else
|
else
|
||||||
warning "Не удалось создать бэкап в $backup_remote"
|
warning "Не удалось создать бэкап в $backup_remote"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
warning "$backup_remote репозиторий не настроен, пропускаем"
|
warning "$backup_remote репозиторий не настроен, пропускаем бэкап"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,7 +281,8 @@ main() {
|
|||||||
|
|
||||||
# Выполняем все этапы
|
# Выполняем все этапы
|
||||||
check_dependencies
|
check_dependencies
|
||||||
backup_to_remote "$backup_remote"
|
save_local_changes
|
||||||
|
backup_to_remote "$backup_remote" "$remote_source"
|
||||||
cleanup_staticfiles
|
cleanup_staticfiles
|
||||||
update_code "$remote_source"
|
update_code "$remote_source"
|
||||||
stop_containers
|
stop_containers
|
||||||
3
cli
Executable file
3
cli
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# SmartSolTech CLI wrapper
|
||||||
|
exec ./bin/cli.sh "$@"
|
||||||
3
logs
Executable file
3
logs
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# SmartSolTech logs wrapper
|
||||||
|
exec ./bin/logs.sh "$@"
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"detail":"User 4 deleted"}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0Iiwicm9sZSI6InVzZXIiLCJleHAiOjE3NTI0OTc2NDV9.S_tquLFIPnyG6XlfwIw97hJv0l9oKpTcYw_XG0mDd6w","token_type":"bearer"}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"id":4,"email":"testuser@example.com","role":"user"}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"id":4,"email":"testuser@example.com","role":"user"}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"id":4,"email":"updated_testuser@example.com","role":"admin"}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"id":4,"email":"testuser@example.com","role":"user"}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
[{"id":1,"email":"user1@example.com","role":"user"},{"id":4,"email":"testuser@example.com","role":"user"}]
|
|
||||||
3
start
Executable file
3
start
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# SmartSolTech start wrapper
|
||||||
|
exec ./bin/start.sh "$@"
|
||||||
3
stop
Executable file
3
stop
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# SmartSolTech stop wrapper
|
||||||
|
exec ./bin/stop.sh "$@"
|
||||||
Reference in New Issue
Block a user