Files
smartsoltech_site/bin/cli.sh
Andrey K. Choi 8f1e0459fc 🔧 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
2025-11-25 06:51:52 +09:00

207 lines
7.1 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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