🔧 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:
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
|
||||
Reference in New Issue
Block a user