🔧 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:
2025-11-25 06:51:52 +09:00
parent bd028d09e6
commit 8f1e0459fc
22 changed files with 618 additions and 64 deletions

207
bin/cli.sh Executable file
View 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