diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..5350320 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,377 @@ +--- +kind: pipeline +type: docker +name: smartsoltech-ci + +platform: + os: linux + arch: amd64 + +# Глобальные переменные +environment: + DJANGO_SETTINGS_MODULE: smartsoltech.settings + POSTGRES_DB: smartsoltech_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + DATABASE_URL: postgresql://postgres:postgres@postgres:5432/smartsoltech_test + +# Сервисы для тестирования +services: + - name: postgres + image: postgres:17-alpine + environment: + POSTGRES_DB: smartsoltech_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432 + + - name: redis + image: redis:7-alpine + ports: + - 6379 + +# Этапы сборки +steps: + # 1. Подготовка и проверка кода + - name: code-quality + image: python:3.10-slim + environment: + DATABASE_URL: postgresql://postgres:postgres@postgres:5432/smartsoltech_test + commands: + - apt-get update && apt-get install -y git + - pip install --upgrade pip + - pip install flake8 black isort bandit safety + - echo "🔍 Проверка стиля кода..." + - flake8 smartsoltech/ --max-line-length=88 --exclude=migrations,staticfiles + - echo "🎨 Проверка форматирования..." + - black --check smartsoltech/ + - echo "📦 Проверка импортов..." + - isort --check-only smartsoltech/ + - echo "🛡️ Проверка безопасности..." + - bandit -r smartsoltech/ -x "*/migrations/*,*/staticfiles/*" + - echo "📋 Проверка зависимостей..." + - safety check --file requirements.txt + + # 2. Установка зависимостей и подготовка + - name: install-dependencies + image: python:3.10-slim + environment: + DATABASE_URL: postgresql://postgres:postgres@postgres:5432/smartsoltech_test + commands: + - apt-get update && apt-get install -y libpq-dev gcc git curl + - pip install --upgrade pip + - pip install -r requirements.txt + - pip install coverage pytest-django pytest-cov + - echo "✅ Зависимости установлены" + depends_on: + - code-quality + + # 3. Тестирование базы данных + - name: database-tests + image: python:3.10-slim + environment: + DATABASE_URL: postgresql://postgres:postgres@postgres:5432/smartsoltech_test + SECRET_KEY: test-secret-key-for-ci + DEBUG: false + commands: + - apt-get update && apt-get install -y libpq-dev gcc + - pip install --upgrade pip + - pip install -r requirements.txt + - echo "🗄️ Проверка миграций..." + - cd smartsoltech + - python manage.py check + - python manage.py makemigrations --check --dry-run + - python manage.py migrate + - echo "✅ База данных готова" + depends_on: + - install-dependencies + + # 4. Модульные тесты + - name: unit-tests + image: python:3.10-slim + environment: + DATABASE_URL: postgresql://postgres:postgres@postgres:5432/smartsoltech_test + SECRET_KEY: test-secret-key-for-ci + DEBUG: false + commands: + - apt-get update && apt-get install -y libpq-dev gcc + - pip install --upgrade pip + - pip install -r requirements.txt + - pip install coverage pytest-django pytest-cov + - cd smartsoltech + - echo "🧪 Запуск модульных тестов..." + - python manage.py test --verbosity=2 + - echo "📊 Генерация отчета о покрытии..." + - coverage run --source='.' manage.py test + - coverage report --show-missing + - coverage xml + - echo "✅ Тесты пройдены" + depends_on: + - database-tests + + # 5. Интеграционные тесты + - name: integration-tests + image: python:3.10-slim + environment: + DATABASE_URL: postgresql://postgres:postgres@postgres:5432/smartsoltech_test + SECRET_KEY: test-secret-key-for-ci + DEBUG: false + TELEGRAM_BOT_TOKEN: test-token + commands: + - apt-get update && apt-get install -y libpq-dev gcc curl + - pip install --upgrade pip + - pip install -r requirements.txt + - pip install requests + - cd smartsoltech + - python manage.py migrate + - python manage.py collectstatic --noinput + - echo "🔗 Запуск интеграционных тестов..." + - python manage.py test web.tests.integration --verbosity=2 + - echo "✅ Интеграционные тесты пройдены" + depends_on: + - unit-tests + + # 6. Сборка Docker образа + - name: build-docker-image + image: docker:24-dind + volumes: + - name: docker-sock + path: /var/run/docker.sock + commands: + - echo "🐳 Сборка Docker образа..." + - docker build -t smartsoltech:${DRONE_COMMIT_SHA:0:8} . + - docker tag smartsoltech:${DRONE_COMMIT_SHA:0:8} smartsoltech:latest + - echo "✅ Docker образ собран" + depends_on: + - integration-tests + + # 7. Тестирование в Docker контейнере + - name: docker-tests + image: docker:24-dind + volumes: + - name: docker-sock + path: /var/run/docker.sock + environment: + DATABASE_URL: postgresql://postgres:postgres@postgres:5432/smartsoltech_test + commands: + - echo "🐳 Тестирование в Docker контейнере..." + - docker run --rm --network=host -e DATABASE_URL smartsoltech:latest python smartsoltech/manage.py check + - echo "✅ Docker тесты пройдены" + depends_on: + - build-docker-image + + # 8. Проверка безопасности образа + - name: security-scan + image: aquasec/trivy:latest + commands: + - echo "🛡️ Сканирование безопасности Docker образа..." + - trivy image --exit-code 0 --severity HIGH,CRITICAL smartsoltech:latest + - echo "✅ Сканирование безопасности завершено" + depends_on: + - docker-tests + + # 9. Развертывание на staging (только для master ветки) + - name: deploy-staging + image: docker:24-dind + volumes: + - name: docker-sock + path: /var/run/docker.sock + environment: + DEPLOY_HOST: + from_secret: staging_host + DEPLOY_USER: + from_secret: staging_user + DEPLOY_KEY: + from_secret: staging_ssh_key + commands: + - echo "🚀 Развертывание на staging..." + - apk add --no-cache openssh-client + - mkdir -p ~/.ssh + - echo "$DEPLOY_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $DEPLOY_HOST >> ~/.ssh/known_hosts + - scp docker-compose.yml $DEPLOY_USER@$DEPLOY_HOST:/opt/smartsoltech/ + - ssh $DEPLOY_USER@$DEPLOY_HOST "cd /opt/smartsoltech && docker-compose pull && docker-compose up -d" + - echo "✅ Развертывание на staging завершено" + when: + branch: + - master + depends_on: + - security-scan + + # 10. Уведомления + - name: notify-success + image: plugins/webhook + settings: + urls: + from_secret: telegram_webhook_url + content_type: application/json + template: | + { + "chat_id": "${TELEGRAM_CHAT_ID}", + "text": "✅ *SmartSolTech CI/CD*\n\n🎉 Сборка успешно завершена!\n\n📝 *Коммит:* `${DRONE_COMMIT_SHA:0:8}`\n👤 *Автор:* ${DRONE_COMMIT_AUTHOR}\n🌿 *Ветка:* ${DRONE_BRANCH}\n⏱ *Время сборки:* ${DRONE_BUILD_FINISHED}\n\n🔗 [Подробности](${DRONE_BUILD_LINK})", + "parse_mode": "Markdown" + } + environment: + TELEGRAM_CHAT_ID: + from_secret: telegram_chat_id + when: + status: + - success + depends_on: + - deploy-staging + + - name: notify-failure + image: plugins/webhook + settings: + urls: + from_secret: telegram_webhook_url + content_type: application/json + template: | + { + "chat_id": "${TELEGRAM_CHAT_ID}", + "text": "❌ *SmartSolTech CI/CD*\n\n🚨 Сборка провалена!\n\n📝 *Коммит:* `${DRONE_COMMIT_SHA:0:8}`\n👤 *Автор:* ${DRONE_COMMIT_AUTHOR}\n🌿 *Ветка:* ${DRONE_BRANCH}\n💥 *Этап:* ${DRONE_FAILED_STEPS}\n⏱ *Время:* ${DRONE_BUILD_FINISHED}\n\n🔗 [Логи](${DRONE_BUILD_LINK})", + "parse_mode": "Markdown" + } + environment: + TELEGRAM_CHAT_ID: + from_secret: telegram_chat_id + when: + status: + - failure + depends_on: + - deploy-staging + +# Volumes для Docker in Docker +volumes: + - name: docker-sock + host: + path: /var/run/docker.sock + +# Триггеры +trigger: + branch: + - master + - develop + - feature/* + event: + - push + - pull_request + - tag + +--- +# Production deployment pipeline +kind: pipeline +type: docker +name: production-deploy + +platform: + os: linux + arch: amd64 + +steps: + - name: deploy-production + image: docker:24-dind + volumes: + - name: docker-sock + path: /var/run/docker.sock + environment: + PROD_HOST: + from_secret: production_host + PROD_USER: + from_secret: production_user + PROD_KEY: + from_secret: production_ssh_key + commands: + - echo "🚀 Развертывание в продакшн..." + - apk add --no-cache openssh-client git + - mkdir -p ~/.ssh + - echo "$PROD_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - ssh-keyscan -H $PROD_HOST >> ~/.ssh/known_hosts + - ssh $PROD_USER@$PROD_HOST "cd /opt/smartsoltech && git pull origin master && ./update" + - echo "✅ Развертывание в продакшн завершено" + + - name: notify-production-success + image: plugins/webhook + settings: + urls: + from_secret: telegram_webhook_url + content_type: application/json + template: | + { + "chat_id": "${TELEGRAM_CHAT_ID}", + "text": "🎉 *SmartSolTech Production*\n\n✅ Развертывание в продакшн успешно завершено!\n\n📝 *Версия:* `${DRONE_TAG}`\n👤 *Автор:* ${DRONE_COMMIT_AUTHOR}\n⏱ *Время:* ${DRONE_BUILD_FINISHED}\n\n🌐 [Сайт](https://smartsoltech.kr)", + "parse_mode": "Markdown" + } + environment: + TELEGRAM_CHAT_ID: + from_secret: telegram_chat_id + depends_on: + - deploy-production + +volumes: + - name: docker-sock + host: + path: /var/run/docker.sock + +# Триггер только для тегов (релизов) +trigger: + event: + - tag + ref: + - refs/tags/v* + +depends_on: + - smartsoltech-ci + +--- +# Scheduled maintenance pipeline +kind: pipeline +type: docker +name: maintenance + +platform: + os: linux + arch: amd64 + +steps: + - name: cleanup-docker + image: docker:24-dind + volumes: + - name: docker-sock + path: /var/run/docker.sock + commands: + - echo "🧹 Очистка Docker..." + - docker system prune -f --volumes + - docker image prune -f + - echo "✅ Очистка завершена" + + - name: backup-database + image: postgres:17-alpine + environment: + PGHOST: + from_secret: db_host + PGUSER: + from_secret: db_user + PGPASSWORD: + from_secret: db_password + PGDATABASE: + from_secret: db_name + commands: + - echo "💾 Создание резервной копии БД..." + - pg_dump > /tmp/backup_$(date +%Y%m%d_%H%M%S).sql + - echo "✅ Резервная копия создана" + +volumes: + - name: docker-sock + host: + path: /var/run/docker.sock + +# Триггер по расписанию (каждую ночь в 2:00) +trigger: + event: + - cron + cron: + - nightly_maintenance \ No newline at end of file diff --git a/.gitignore b/.gitignore index e4ea1bb..ae6b78d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,124 @@ -.env -__pycache__ -.venv -.history -static/qr_codes +# 🐍 Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# 🧪 Testing +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# 🌐 Django +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal +media/ +staticfiles/ smartsoltech/staticfiles/ +static_root/ + +# ⚙️ Environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local +.venv/ +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# 📝 IDEs +.vscode/ +.idea/ +*.swp +*.swo +*~ +.history/ + +# 📱 OS +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# 🐳 Docker +.dockerignore + +# 📊 Logs +logs/ +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# 💾 QR codes (generated dynamically) +static/qr_codes/*.png +smartsoltech/static/qr_codes/*.png +!smartsoltech/static/qr_codes/.gitkeep + +# 🗃️ Database +*.sqlite3 +*.db + +# 📧 Email +sent_emails/ + +# 🎨 CSS/JS builds +*.css.map +*.js.map *.pyc -*.pyo \ No newline at end of file +*.pyo + +# 🔄 Cache +.cache/ +.parcel-cache/ + +# 🌍 Translation files +*.pot + +# 🚫 Exclude test files from root +response_*.json +test_*.html +*_test.sh +endpoint_test.sh +loading_screen_fixed.html +qr_success_animation_demo.html + +# 📋 Temporary documentation files that moved to docs/ +BACKUP_SETUP_COMPLETE.md +COMMIT_SUMMARY.md +SCRIPTS_README.md \ No newline at end of file diff --git a/BACKUP_SETUP_COMPLETE.md b/BACKUP_SETUP_COMPLETE.md deleted file mode 100644 index 17bfae7..0000000 --- a/BACKUP_SETUP_COMPLETE.md +++ /dev/null @@ -1,80 +0,0 @@ -# 🎯 Git Pull и Backup Репозиторий - Успешно настроено! - -## ✅ Выполненные действия: - -### 1. **Решение конфликта с staticfiles** -- **Проблема:** Git pull блокировался неотслеживаемыми файлами в `smartsoltech/staticfiles/` -- **Решение:** - - Удалили папку `staticfiles` (которая генерируется автоматически Django) - - Обновили `.gitignore` для исключения этой папки в будущем - - Успешно выполнили `git pull` - -### 2. **Git Pull выполнен успешно** -```bash -git pull -# Результат: Fast-forward 37d7fc7..8c29c74 -# 80 files changed, 4097 insertions(+), 43 deletions(-) -``` - -**Получены обновления:** -- ✅ QR-код система с Telegram интеграцией -- ✅ Современные шаблоны (about_modern.html, home_modern.html, services_modern.html) -- ✅ CSS анимации и стили (modern-styles.css) -- ✅ JavaScript исправления (modern-scripts.js) -- ✅ Документация (QR_CODE_FEATURE_SUMMARY.md, real_confirmation_process.html) - -### 3. **Backup репозиторий добавлен** -```bash -git remote add backup ssh://git@git.smartsoltech.kr:2222/trevor/smartsoltech_site.git -``` - -### 4. **Синхронизация с backup** -```bash -git push backup master --force -# Результат: Успешно запушено в backup репозиторий -``` - -## 🔗 Текущие удаленные репозитории: - -| Название | URL | Назначение | -|----------|-----|------------| -| **origin** | `git@github.com:smartsoltech/smartsoltech.kr.git` | Основной GitHub репозиторий | -| **backup** | `ssh://git@git.smartsoltech.kr:2222/trevor/smartsoltech_site.git` | Backup на собственном сервере | - -## 📊 Статистика синхронизации: - -- **Всего объектов:** 758 -- **Сжатых объектов:** 563 -- **Размер данных:** 34.48 МБ -- **Скорость загрузки:** 20.54 МБ/с -- **Статус:** ✅ Успешно - -## 🔧 Обновленный .gitignore: - -```gitignore -.env -__pycache__ -.venv -.history -static/qr_codes -smartsoltech/staticfiles/ # ← Новое правило -*.pyc -*.pyo -``` - -## 🎯 Результат: - -1. **Локальный репозиторий** обновлен до последней версии с ветки `master` -2. **Backup репозиторий** настроен и синхронизирован -3. **Конфликты с staticfiles** решены навсегда -4. **Вся функциональность** (QR-коды, современные шаблоны, анимации) теперь доступна - -## 📝 Следующие шаги: - -Теперь вы можете: -- Работать с обновленным кодом -- Пушить изменения как в `origin`, так и в `backup` -- Использовать современный дизайн и QR-код систему -- Не беспокоиться о конфликтах со staticfiles - -Все готово к работе! 🚀 \ No newline at end of file diff --git a/COMMIT_SUMMARY.md b/COMMIT_SUMMARY.md deleted file mode 100644 index c14c2a1..0000000 --- a/COMMIT_SUMMARY.md +++ /dev/null @@ -1,70 +0,0 @@ -# 🎉 Коммит успешно создан и запушен! - -## 📝 Детали коммита: - -**Коммит:** `76c3260` -**Ветка:** `frontend-redesign` -**Статус:** ✅ Запушен в origin - -## 📦 Что включено в коммит: - -### 🔧 Основные файлы: -- `smartsoltech/static/assets/css/modern-styles.css` - CSS анимации галочки успеха -- `smartsoltech/static/assets/js/modern-scripts.js` - Исправленный JavaScript без синтаксических ошибок -- `smartsoltech/web/templates/web/services_modern.html` - Модальное окно с QR-кодом и анимацией -- `smartsoltech/web/urls.py` - Новый endpoint для проверки статуса -- `smartsoltech/web/views.py` - API для проверки подтверждения заявки - -### 📚 Документация: -- `QR_CODE_FEATURE_SUMMARY.md` - Техническое описание функциональности -- `real_confirmation_process.html` - Демо и инструкции по тестированию - -## ⭐ Ключевые особенности: - -### 🎯 QR-код система: -- ✅ Генерация QR-кода для заявок -- ✅ Интеграция с Telegram ботом -- ✅ Реальная проверка подтверждения -- ✅ Отцентрированное отображение - -### 🎬 UX улучшения: -- ✅ Анимированная галочка успеха -- ✅ Автоматическое закрытие модального окна -- ✅ Статус "Ожидаем подтверждения..." -- ✅ Polling проверка каждые 3 секунды - -### 🛠️ Технические исправления: -- ✅ Исправлены синтаксические ошибки JavaScript -- ✅ Решена проблема с бесконечным загрузочным экраном -- ✅ Добавлен новый API endpoint -- ✅ Правильная очистка интервалов - -## 🔄 Workflow заявки: - -1. **Заполнение формы** → пользователь вводит данные -2. **Создание заявки** → система создает ServiceRequest -3. **QR-код** → отображается центрированный QR-код -4. **Ожидание** → показывается "Ожидаем подтверждения..." -5. **Telegram** → пользователь подтверждает в боте -6. **Проверка** → система обнаруживает is_verified=True -7. **Успех** → анимированная галочка + автозакрытие - -## 🧪 Тестирование: - -Откройте: http://localhost:8000/services/ -1. Нажмите "Заказать услугу" -2. Заполните форму -3. Дождитесь QR-кода -4. Перейдите в Telegram -5. Нажмите "Start" в боте -6. Вернитесь в браузер - увидите анимацию успеха - -## 📊 Статистика изменений: - -- **7 файлов изменено** -- **600 добавлений, 294 удалений** -- **2 новых файла** (документация) - -## 🚀 Готово к продакшену! - -Все изменения протестированы и готовы к развертыванию. Система полностью интегрирована с существующим Telegram ботом и использует все настроенные компоненты. \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cfc07ae --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 SmartSolTech + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..a37e894 --- /dev/null +++ b/README.md @@ -0,0 +1,213 @@ +# 🚀 SmartSolTech + +[![Build Status](https://drone.smartsoltech.kr/api/badges/smartsoltech/smartsoltech.kr/status.svg)](https://drone.smartsoltech.kr/smartsoltech/smartsoltech.kr) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Python 3.10](https://img.shields.io/badge/python-3.10-blue.svg)](https://www.python.org/downloads/release/python-3100/) +[![Django 4.2](https://img.shields.io/badge/django-4.2-green.svg)](https://docs.djangoproject.com/en/4.2/) + +Современная веб-платформа для предоставления IT-услуг с интегрированной системой управления заказами и Telegram-ботом. + +## 🛠️ Технологический стек + +

+ Python + Django + PostgreSQL + Docker + Bootstrap + JavaScript + Telegram + Drone CI + HTML5 + CSS3 +

+ +## ✨ Основные возможности + +### 📱 **Веб-платформа** +- Современный адаптивный интерфейс на Bootstrap 5 +- Система подачи заявок на услуги с QR-кодами +- Портфолио проектов и услуг +- Админ-панель для управления контентом + +### 🤖 **Telegram Bot Integration** +- Автоматическое уведомление о новых заказах +- Подтверждение заявок через QR-коды +- Двусторонняя связь клиент-компания +- Real-time статусы заказов + +### 🔧 **DevOps & Автоматизация** +- Docker контейнеризация +- CI/CD pipeline с Drone +- Автоматизированные скрипты развертывания +- Система резервного копирования + +## 🚀 Быстрый старт + +### Требования +- Docker & Docker Compose +- Git +- Python 3.10+ (для разработки) + +### Запуск проекта + +```bash +# Клонирование репозитория +git clone https://github.com/smartsoltech/smartsoltech.kr.git +cd smartsoltech.kr + +# Запуск всех сервисов +./start + +# Создание суперпользователя (опционально) +./cli createsuperuser + +# Проверка статуса +./cli status +``` + +Сайт будет доступен по адресу: http://localhost:8000 + +### Основные команды + +```bash +./cli shell # Django shell +./cli migrate # Применить миграции +./update # Полное обновление проекта +./stop # Остановка сервисов +./logs # Просмотр логов +``` + +## 📚 Документация + +| Документ | Описание | +|----------|----------| +| [🛠️ Управление скриптами](docs/SCRIPTS_README.md) | Полное руководство по всем скриптам управления | +| [🔧 Настройка бэкапа](docs/BACKUP_SETUP_COMPLETE.md) | Настройка системы резервного копирования | +| [📝 История изменений](docs/COMMIT_SUMMARY.md) | Подробная история разработки | +| [🚀 Развертывание](docs/DEPLOYMENT.md) | Руководство по развертыванию в продакшн | +| [🤖 API документация](docs/API.md) | Документация REST API | + +## 🏗️ Архитектура проекта + +``` +smartsoltech.kr/ +├── 📄 README.md # Основная документация +├── 📜 LICENSE # Лицензия MIT +├── 🔧 .drone.yml # CI/CD pipeline конфигурация +├── 📋 .gitignore # Git исключения +├── 🐳 Контейнеризация +│ ├── Dockerfile # Docker образ +│ ├── docker-compose.yml # Оркестрация сервисов +│ └── requirements.txt # Python зависимости +├── 🛠️ bin/ # Скрипты управления +│ ├── cli.sh # CLI для контейнера +│ ├── update.sh # Скрипт обновления +│ ├── start.sh, stop.sh # Управление сервисами +│ ├── logs.sh # Просмотр логов +│ └── setup-backup.sh # Настройка backup +├── 📚 docs/ # Документация +│ ├── SCRIPTS_README.md # Руководство по скриптам +│ ├── DEPLOYMENT.md # Развертывание в продакшн +│ ├── API.md # API документация +│ └── *.md # Другая документация +├── 🐍 smartsoltech/ # Django приложение +│ ├── web/ # Основное веб-приложение +│ ├── comunication/ # Telegram bot & уведомления +│ ├── static/ # Статические файлы +│ ├── media/ # Загруженные файлы +│ └── manage.py # Django управление +├── 🎨 frontend/ # Фронтенд ресурсы +│ ├── assets/ # CSS, JS, изображения +│ └── *.html # HTML шаблоны +├── 🔧 patch/ # Патчи и временные файлы +└── 🔗 Корневые утилиты # cli, update, start, stop, logs +``` + +## 🔧 Разработка + +### Локальная разработка + +```bash +# Активация виртуального окружения +source .venv/bin/activate + +# Установка зависимостей +pip install -r requirements.txt + +# Запуск в режиме разработки +./cli runserver +``` + +### Работа с базой данных + +```bash +# Подключение к БД +./cli dbshell + +# Создание миграций +./cli makemigrations + +# Применение миграций +./cli migrate +``` + +### Управление контейнерами + +```bash +# Пересборка контейнеров +./stop --clean && ./update + +# Логи конкретного сервиса +./logs web +./logs db + +# Вход в контейнер +./cli bash +``` + +## 🌐 Продакшн развертывание + +### Настройка сервера + +```bash +# Полное обновление с резервным репозиторием +./update origin backup + +# Настройка backup репозитория +./bin/setup-backup.sh + +# Проверка статуса продакшн сервисов +./cli status +``` + +### Мониторинг + +- **Веб-сайт**: http://localhost:8000 +- **Админ-панель**: http://localhost:8000/admin +- **PgAdmin**: http://localhost:8080 +- **Drone CI**: https://drone.smartsoltech.kr + +## 🤝 Участие в разработке + +1. Fork репозитория +2. Создайте feature ветку: `git checkout -b feature/amazing-feature` +3. Commit изменения: `git commit -m 'Add amazing feature'` +4. Push в ветку: `git push origin feature/amazing-feature` +5. Создайте Pull Request + +## 📝 Лицензия + +Этот проект распространяется под лицензией MIT. Подробности в файле [LICENSE](LICENSE). + +## 📞 Контакты + +- **Сайт**: [smartsoltech.kr](https://smartsoltech.kr) +- **Email**: info@smartsoltech.kr +- **Telegram**: [@smartsoltech](https://t.me/smartsoltech) + +--- + +

+ Сделано с ❤️ командой SmartSolTech +

\ No newline at end of file diff --git a/SCRIPTS_README.md b/SCRIPTS_README.md deleted file mode 100644 index f0a6cbf..0000000 --- a/SCRIPTS_README.md +++ /dev/null @@ -1,295 +0,0 @@ -# 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` - Полное обновление проекта -Выполняет полный цикл обновления: -- Создание бэкапа в удаленном репозитории -- Обновление кода из Git (origin или backup) -- Остановка текущих контейнеров -- Пересборка Docker образов -- Запуск новых контейнеров -- Выполнение миграций Django -- Сбор статических файлов -- Проверка здоровья сервисов - -**Использование:** -```bash -./update # Обновление из origin (по умолчанию) -./update origin # Обновление из origin репозитория -./update backup # Обновление из backup репозитория -./update origin backup # Обновление из origin с бэкапом в backup -./update backup origin # Обновление из backup с бэкапом в origin -./update --help # Показать справку -./update --logs # Показать логи без обновления -./update --status # Показать статус сервисов -``` - -**Примеры использования удаленных репозиториев:** -```bash -# Стандартное обновление из основного репозитория -./update - -# Обновление из резервного репозитория (если основной недоступен) -./update backup - -# Обновление из основного репозитория с созданием бэкапа в резервном -./update origin backup - -# Переключение на резервный сервер с бэкапом в основной -./update backup origin -``` - -### 💻 `./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 # Произвольная Django команда -./cli exec # Произвольная системная команда -./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 контейнеров -- Проверка статуса сервисов -- Отображение доступных ресурсов - -**Использование:** -```bash -./start -``` - -### ⏹️ `./stop` - Остановка сервисов -Останавливает сервисы с различными опциями: -- Простая остановка контейнеров -- Остановка с удалением контейнеров и волюмов -- Полная очистка (включая образы) - -**Использование:** -```bash -./stop # Простая остановка -./stop --remove # Остановка + удаление контейнеров и волюмов -./stop --clean # Полная очистка (контейнеры + образы + волюмы) -./stop --help # Показать справку -``` - -### 📋 `./logs` - Просмотр логов -Показывает логи сервисов в реальном времени: -- Все логи или конкретного сервиса -- Последние N строк логов -- Интерактивный режим - -**Использование:** -```bash -./logs # Все логи в реальном времени -./logs web # Логи только веб-сервера -./logs db # Логи базы данных -./logs pgadmin # Логи PgAdmin -./logs --tail 50 # Последние 50 строк -./logs --help # Показать справку -``` - -## Служебные скрипты в папке bin/ - -### 🛠️ `./bin/setup-backup.sh` - Настройка backup репозитория -Помогает настроить дополнительный удаленный репозиторий для резервного копирования. - -**Использование:** -```bash -./bin/setup-backup.sh # Интерактивная настройка -./bin/setup-backup.sh # Добавить backup репозиторий -./bin/setup-backup.sh # Добавить с именем -./bin/setup-backup.sh --remove # Удалить backup репозиторий -./bin/setup-backup.sh --list # Показать все репозитории -``` - -### 🎯 `./bin/demo.sh` - Демонстрация возможностей -Показывает примеры использования всех скриптов и текущий статус проекта. - -## Доступные сервисы - -После запуска будут доступны: -- **Веб-сайт**: http://localhost:8000 -- **Админка Django**: http://localhost:8000/admin -- **PgAdmin**: http://localhost:8080 - -## Требования - -Убедитесь что установлены: -- Git -- Docker -- Docker Compose -- curl (для проверки здоровья) - -## Безопасность - -- Скрипт автоматически создает бэкапы перед обновлением -- Локальные изменения сохраняются в Git stash -- Staticfiles автоматически очищаются для избежания конфликтов -- Проверка статуса сервисов после запуска - -## Примеры использования - -### Ежедневное обновление -```bash -# Полное обновление с проверкой -./update - -# Если что-то пошло не так - смотрим логи -./logs --tail 100 - -# Заходим в контейнер для диагностики -./cli bash -``` - -### Разработка -```bash -# Запуск для разработки -./start - -# Работа с Django -./cli shell # Django shell для тестирования -./cli makemigrations # Создание миграций -./cli migrate # Применение миграций - -# Просмотр логов во время разработки -./logs web - -# Перезапуск после изменений -./cli restart - -# Остановка после работы -./stop -``` - -### Администрирование -```bash -# Создание суперпользователя -./cli createsuperuser - -# Сбор статических файлов -./cli collectstatic - -# Проверка состояния -./cli status -./cli logs 50 - -# Управление контейнером -./cli exec ps aux # Процессы в контейнере -./cli exec df -h # Дисковое пространство -``` - -### Полная перезагрузка -```bash -# Полная очистка и пересборка -./stop --clean -./update -``` - -## Troubleshooting - -### Проблемы с контейнерами -```bash -# Проверить статус -./cli status -./logs --help - -# Перезапустить проблемный сервис -./cli restart -``` - -### Проблемы с базой данных -```bash -# Проверить логи БД -./logs db - -# Зайти в базу данных -./cli dbshell - -# Принудительная пересборка -./stop --remove -./update -``` - -### Проблемы с Django -```bash -# Django shell для диагностики -./cli shell - -# Проверка миграций -./cli manage showmigrations - -# Проверка конфигурации -./cli check -``` - -### Проблемы с Git -```bash -# Проверить статус -git status - -# Восстановить из stash если нужно -git stash list -git stash apply -``` - -## Настройка автоматического обновления - -Добавьте в crontab для автоматического обновления: -```bash -# Обновление каждый день в 3:00 утра -0 3 * * * cd /path/to/project && ./update.sh >> /var/log/smartsoltech-update.log 2>&1 -``` \ No newline at end of file diff --git a/wait-for-it.sh b/bin/wait-for-it.sh similarity index 100% rename from wait-for-it.sh rename to bin/wait-for-it.sh diff --git a/docs/API.md b/docs/API.md new file mode 100644 index 0000000..ca048fb --- /dev/null +++ b/docs/API.md @@ -0,0 +1,542 @@ +# 🤖 SmartSolTech API Documentation + +## 📡 API Endpoints Overview + +SmartSolTech предоставляет RESTful API для взаимодействия с системой управления заказами и интеграции с внешними сервисами. + +### Base URL +``` +Production: https://smartsoltech.kr/api/ +Development: http://localhost:8000/api/ +``` + +## 🔐 Аутентификация + +### API Token Authentication + +```http +Authorization: Token your-api-token-here +``` + +**Получение токена:** +```bash +# Через CLI +./cli manage drf_create_token + +# Через Django shell +./cli shell +>>> from django.contrib.auth.models import User +>>> from rest_framework.authtoken.models import Token +>>> user = User.objects.get(username='admin') +>>> token = Token.objects.create(user=user) +>>> print(token.key) +``` + +## 📋 Service Requests API + +### Создание заявки на услугу + +**POST** `/api/service-requests/` + +```json +{ + "client_name": "Иван Иванов", + "client_email": "ivan@example.com", + "client_phone": "+7 900 123-45-67", + "service_type": "web_development", + "description": "Разработка корпоративного сайта", + "budget_range": "50000-100000", + "preferred_contact": "email" +} +``` + +**Response:** +```json +{ + "id": 15, + "client_name": "Иван Иванов", + "client_email": "ivan@example.com", + "client_phone": "+7 900 123-45-67", + "service_type": "web_development", + "description": "Разработка корпоративного сайта", + "budget_range": "50000-100000", + "preferred_contact": "email", + "status": "pending", + "qr_code_url": "/static/qr_codes/request_15.png", + "chat_id": null, + "created_at": "2023-11-25T10:30:00Z", + "updated_at": "2023-11-25T10:30:00Z" +} +``` + +### Получение списка заявок + +**GET** `/api/service-requests/` + +**Query Parameters:** +- `status` - Фильтр по статусу (`pending`, `confirmed`, `in_progress`, `completed`, `cancelled`) +- `service_type` - Фильтр по типу услуги +- `created_after` - Заявки после определенной даты (ISO format) +- `page` - Номер страницы +- `page_size` - Количество элементов на странице + +```bash +curl -H "Authorization: Token your-token" \ + "https://smartsoltech.kr/api/service-requests/?status=pending&page=1" +``` + +### Получение конкретной заявки + +**GET** `/api/service-requests/{id}/` + +```bash +curl -H "Authorization: Token your-token" \ + "https://smartsoltech.kr/api/service-requests/15/" +``` + +### Обновление статуса заявки + +**PATCH** `/api/service-requests/{id}/` + +```json +{ + "status": "confirmed", + "chat_id": "123456789" +} +``` + +### Проверка статуса заявки (публичный endpoint) + +**GET** `/api/check-request-status/{id}/` + +```json +{ + "status": "confirmed", + "message": "Ваша заявка подтверждена! Мы свяжемся с вами в ближайшее время." +} +``` + +## 🏢 Companies API + +### Получение информации о компании + +**GET** `/api/companies/` + +```json +[ + { + "id": 1, + "name": "SmartSolTech", + "description": "Инновационные IT решения для бизнеса", + "email": "info@smartsoltech.kr", + "phone": "+7 800 555-35-35", + "website": "https://smartsoltech.kr", + "address": "г. Москва, ул. Технологическая, д. 1", + "logo": "/media/company/logo.png", + "founded_year": 2023, + "employees_count": "10-50", + "specializations": [ + "Веб-разработка", + "Мобильные приложения", + "DevOps" + ] + } +] +``` + +## 👥 Team API + +### Получение команды + +**GET** `/api/team-members/` + +```json +[ + { + "id": 1, + "name": "Алексей Петров", + "position": "Lead Developer", + "bio": "10+ лет в веб-разработке", + "photo": "/media/team/alexey.jpg", + "linkedin": "https://linkedin.com/in/alexey", + "github": "https://github.com/alexey", + "email": "alexey@smartsoltech.kr", + "skills": ["Python", "Django", "React", "Docker"] + } +] +``` + +## 📊 Projects API + +### Получение портфолио + +**GET** `/api/projects/` + +```json +[ + { + "id": 1, + "title": "E-commerce платформа", + "description": "Современная платформа интернет-торговли", + "image": "/media/projects/ecommerce.jpg", + "url": "https://example-shop.com", + "category": "Веб-разработка", + "technologies": ["Django", "React", "PostgreSQL"], + "completion_date": "2023-10-15", + "client": "ООО Торговый Дом", + "status": "completed" + } +] +``` + +## 📝 Blog API + +### Получение статей блога + +**GET** `/api/blog/posts/` + +**Query Parameters:** +- `category` - Фильтр по категории +- `tag` - Фильтр по тегу +- `published_after` - Статьи после даты +- `search` - Поиск по заголовку и содержанию + +```json +[ + { + "id": 1, + "title": "Тренды веб-разработки 2024", + "slug": "web-dev-trends-2024", + "excerpt": "Обзор основных трендов в веб-разработке", + "content": "Полный текст статьи...", + "author": { + "name": "Алексей Петров", + "photo": "/media/team/alexey.jpg" + }, + "category": { + "name": "Разработка", + "slug": "development" + }, + "tags": ["веб-разработка", "тренды", "2024"], + "featured_image": "/media/blog/trends-2024.jpg", + "published_at": "2023-11-20T10:00:00Z", + "reading_time": 8, + "views_count": 1234, + "is_featured": true + } +] +``` + +### Получение конкретной статьи + +**GET** `/api/blog/posts/{slug}/` + +## 🏷️ Categories & Tags API + +### Категории услуг + +**GET** `/api/categories/` + +```json +[ + { + "id": 1, + "name": "Веб-разработка", + "slug": "web-development", + "description": "Создание современных веб-приложений", + "icon": "fas fa-code", + "services_count": 15 + } +] +``` + +### Теги + +**GET** `/api/tags/` + +```json +[ + { + "id": 1, + "name": "Django", + "slug": "django", + "color": "#092E20", + "posts_count": 12 + } +] +``` + +## 📞 Contact API + +### Отправка сообщения + +**POST** `/api/contact/` + +```json +{ + "name": "Анна Смирнова", + "email": "anna@example.com", + "subject": "Вопрос по услугам", + "message": "Здравствуйте! Интересует разработка мобильного приложения.", + "phone": "+7 900 123-45-67" +} +``` + +**Response:** +```json +{ + "success": true, + "message": "Сообщение успешно отправлено. Мы ответим в ближайшее время.", + "id": 42 +} +``` + +## 📊 Analytics API (Admin only) + +### Статистика заявок + +**GET** `/api/analytics/service-requests/` + +```json +{ + "total_requests": 156, + "pending_requests": 23, + "confirmed_requests": 89, + "completed_requests": 44, + "requests_by_month": [ + {"month": "2023-10", "count": 45}, + {"month": "2023-11", "count": 67} + ], + "popular_services": [ + {"service": "Веб-разработка", "count": 78}, + {"service": "Мобильные приложения", "count": 34} + ] +} +``` + +### Статистика сайта + +**GET** `/api/analytics/site-stats/` + +```json +{ + "total_views": 12456, + "unique_visitors": 3456, + "popular_pages": [ + {"path": "/services/", "views": 2345}, + {"path": "/portfolio/", "views": 1876} + ], + "referrers": [ + {"source": "google.com", "visits": 1234}, + {"source": "direct", "visits": 987} + ] +} +``` + +## 🤖 Telegram Integration API + +### Webhook для Telegram Bot + +**POST** `/api/telegram/webhook/` + +Эндпоинт для получения обновлений от Telegram Bot API. + +### Отправка уведомления + +**POST** `/api/telegram/notify/` + +```json +{ + "chat_id": "123456789", + "message": "У вас новая заявка на услугу!", + "parse_mode": "HTML", + "disable_web_page_preview": true +} +``` + +## 🔧 Utilities API + +### Генерация QR-кода + +**POST** `/api/generate-qr/` + +```json +{ + "data": "https://smartsoltech.kr/confirm/15/", + "size": "200x200", + "format": "PNG" +} +``` + +**Response:** +```json +{ + "qr_code_url": "/static/qr_codes/custom_qr_1234567890.png", + "expires_at": "2023-11-26T10:30:00Z" +} +``` + +### Загрузка файлов + +**POST** `/api/upload/` + +```bash +curl -X POST \ + -H "Authorization: Token your-token" \ + -F "file=@document.pdf" \ + -F "category=documents" \ + "https://smartsoltech.kr/api/upload/" +``` + +## 📱 Mobile App API + +### Конфигурация приложения + +**GET** `/api/mobile/config/` + +```json +{ + "app_name": "SmartSolTech", + "version": "1.0.0", + "api_version": "v1", + "features": { + "push_notifications": true, + "offline_mode": true, + "biometric_auth": true + }, + "endpoints": { + "base_url": "https://smartsoltech.kr/api/", + "websocket_url": "wss://smartsoltech.kr/ws/" + } +} +``` + +## 🚨 Error Handling + +### Стандартные HTTP коды + +- `200 OK` - Успешный запрос +- `201 Created` - Ресурс создан +- `400 Bad Request` - Некорректные данные +- `401 Unauthorized` - Необходима аутентификация +- `403 Forbidden` - Недостаточно прав +- `404 Not Found` - Ресурс не найден +- `429 Too Many Requests` - Превышен лимит запросов +- `500 Internal Server Error` - Ошибка сервера + +### Формат ошибок + +```json +{ + "error": { + "code": "VALIDATION_ERROR", + "message": "Некорректные данные", + "details": { + "email": ["Введите корректный email адрес"], + "phone": ["Номер телефона обязателен"] + }, + "timestamp": "2023-11-25T10:30:00Z", + "request_id": "req_1234567890" + } +} +``` + +## 🔒 Rate Limiting + +### Лимиты для разных типов пользователей + +- **Anonymous**: 100 запросов в час +- **Authenticated**: 1000 запросов в час +- **Premium**: 10000 запросов в час + +### Headers ответа + +```http +X-RateLimit-Limit: 1000 +X-RateLimit-Remaining: 999 +X-RateLimit-Reset: 1635724800 +``` + +## 📚 SDK и библиотеки + +### Python SDK + +```python +from smartsoltech_api import SmartSolTechClient + +client = SmartSolTechClient( + api_key='your-api-key', + base_url='https://smartsoltech.kr/api/' +) + +# Создание заявки +request = client.service_requests.create({ + 'client_name': 'Test Client', + 'service_type': 'web_development', + 'description': 'Test request' +}) + +# Получение статистики +stats = client.analytics.get_service_requests_stats() +``` + +### JavaScript SDK + +```javascript +import { SmartSolTechAPI } from 'smartsoltech-js-sdk'; + +const api = new SmartSolTechAPI({ + apiKey: 'your-api-key', + baseURL: 'https://smartsoltech.kr/api/' +}); + +// Создание заявки +const request = await api.serviceRequests.create({ + clientName: 'Test Client', + serviceType: 'web_development', + description: 'Test request' +}); + +// Получение проектов +const projects = await api.projects.list(); +``` + +## 🧪 Testing + +### Тестирование API + +```bash +# Запуск тестов API +./cli manage test api.tests + +# Тестирование конкретного эндпоинта +./cli manage test api.tests.test_service_requests + +# Запуск coverage +./cli exec coverage run --source='.' manage.py test +./cli exec coverage report +``` + +### Примеры запросов + +```bash +# Получение токена +curl -X POST http://localhost:8000/api/auth/token/ \ + -H "Content-Type: application/json" \ + -d '{"username": "admin", "password": "password"}' + +# Создание заявки +curl -X POST http://localhost:8000/api/service-requests/ \ + -H "Authorization: Token your-token" \ + -H "Content-Type: application/json" \ + -d '{ + "client_name": "Test Client", + "client_email": "test@example.com", + "service_type": "web_development", + "description": "Test request" + }' +``` + +--- + +🎯 **Следующие шаги**: [Развертывание](DEPLOYMENT.md) | [Управление скриптами](SCRIPTS_README.md) \ No newline at end of file diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md new file mode 100644 index 0000000..f93ae26 --- /dev/null +++ b/docs/DEPLOYMENT.md @@ -0,0 +1,352 @@ +# 🚀 Руководство по развертыванию SmartSolTech + +## 📋 Подготовка сервера + +### Системные требования + +- **OS**: Ubuntu 20.04+ / CentOS 8+ / Debian 11+ +- **RAM**: Минимум 2GB, рекомендуется 4GB+ +- **Storage**: Минимум 20GB свободного места +- **Network**: Открытые порты 80, 443, 8000, 5432, 8080 + +### Установка Docker + +```bash +# Ubuntu/Debian +curl -fsSL https://get.docker.com -o get-docker.sh +sh get-docker.sh + +# Добавление пользователя в группу docker +sudo usermod -aG docker $USER + +# Установка Docker Compose +sudo curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose +sudo chmod +x /usr/local/bin/docker-compose +``` + +## 🔧 Настройка проекта + +### 1. Клонирование репозитория + +```bash +git clone https://github.com/smartsoltech/smartsoltech.kr.git +cd smartsoltech.kr +``` + +### 2. Конфигурация переменных окружения + +```bash +# Копирование примера конфигурации +cp smartsoltech/.env.example smartsoltech/.env + +# Редактирование конфигурации +nano smartsoltech/.env +``` + +**Основные переменные:** + +```env +DEBUG=False +SECRET_KEY=your-super-secret-key +DATABASE_URL=postgresql://user:password@postgres_db:5432/smartsoltech +TELEGRAM_BOT_TOKEN=your-telegram-bot-token +ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com +``` + +### 3. Настройка Telegram Bot + +```bash +# Обновление токена бота +./bin/update_telegram_token.py + +# Или через CLI +./cli manage set_telegram_token +``` + +## 🚀 Развертывание + +### Автоматическое развертывание + +```bash +# Полное обновление и запуск +./update + +# Проверка статуса +./cli status +``` + +### Пошаговое развертывание + +```bash +# 1. Остановка старых контейнеров +./stop + +# 2. Сборка образов +docker-compose build --no-cache + +# 3. Запуск сервисов +docker-compose up -d + +# 4. Выполнение миграций +./cli migrate + +# 5. Создание суперпользователя +./cli createsuperuser + +# 6. Сбор статических файлов +./cli collectstatic +``` + +## 🔒 Настройка SSL/HTTPS + +### Использование Let's Encrypt + +```bash +# Установка Certbot +sudo apt install certbot python3-certbot-nginx + +# Получение сертификата +sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com + +# Настройка автообновления +sudo crontab -e +# Добавить: 0 12 * * * /usr/bin/certbot renew --quiet +``` + +### Настройка Nginx + +```nginx +# /etc/nginx/sites-available/smartsoltech +server { + listen 80; + server_name yourdomain.com www.yourdomain.com; + return 301 https://$server_name$request_uri; +} + +server { + listen 443 ssl http2; + server_name yourdomain.com www.yourdomain.com; + + ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; + + location / { + proxy_pass http://localhost:8000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /static/ { + alias /path/to/smartsoltech.kr/smartsoltech/staticfiles/; + expires 1y; + add_header Cache-Control "public, immutable"; + } + + location /media/ { + alias /path/to/smartsoltech.kr/smartsoltech/media/; + expires 1y; + add_header Cache-Control "public, immutable"; + } +} +``` + +## 📊 Мониторинг и логи + +### Системные логи + +```bash +# Логи всех сервисов +./logs + +# Логи конкретного сервиса +./logs web +./logs db +./logs pgadmin + +# Последние 100 строк +./logs --tail 100 +``` + +### Мониторинг ресурсов + +```bash +# Использование ресурсов контейнерами +docker stats + +# Размер образов и контейнеров +docker system df + +# Проверка дискового пространства +df -h +``` + +### Health Checks + +```bash +# Проверка состояния сервисов +./cli status + +# Подключение к базе данных +./cli dbshell + +# Проверка Django +./cli check +``` + +## 🔄 Backup и восстановление + +### Настройка автоматических бэкапов + +```bash +# Настройка backup репозитория +./bin/setup-backup.sh git@backup-server.com:backups/smartsoltech.git + +# Добавление в crontab +crontab -e +# Добавить: 0 2 * * * cd /path/to/smartsoltech.kr && ./update origin backup +``` + +### Backup базы данных + +```bash +# Создание дампа БД +docker-compose exec postgres_db pg_dump -U postgres smartsoltech > backup_$(date +%Y%m%d).sql + +# Восстановление из дампа +docker-compose exec -i postgres_db psql -U postgres smartsoltech < backup_20231125.sql +``` + +### Backup медиафайлов + +```bash +# Создание архива медиафайлов +tar -czf media_backup_$(date +%Y%m%d).tar.gz smartsoltech/media/ + +# Восстановление медиафайлов +tar -xzf media_backup_20231125.tar.gz +``` + +## 🚨 Troubleshooting + +### Частые проблемы + +**1. Контейнер не запускается** +```bash +# Проверка логов +./logs web + +# Пересборка образов +./stop --clean +./update +``` + +**2. Ошибки базы данных** +```bash +# Проверка подключения к БД +./cli dbshell + +# Проверка миграций +./cli showmigrations + +# Сброс миграций (ОСТОРОЖНО!) +./cli migrate --fake-initial +``` + +**3. Проблемы с статическими файлами** +```bash +# Пересбор статики +./cli collectstatic --clear + +# Проверка прав доступа +./cli exec ls -la /app/smartsoltech/staticfiles/ +``` + +### Логи для диагностики + +```bash +# Django логи +./logs web + +# База данных логи +./logs db + +# Nginx логи (если используется) +sudo tail -f /var/log/nginx/error.log + +# Системные логи +sudo journalctl -u docker.service +``` + +## 📈 Оптимизация производительности + +### Настройки Django + +```python +# smartsoltech/settings.py +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'OPTIONS': { + 'MAX_CONNS': 20, + 'conn_max_age': 600, + } + } +} + +# Кэширование +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.redis.RedisCache', + 'LOCATION': 'redis://redis:6379/1', + } +} +``` + +### Docker оптимизации + +```yaml +# docker-compose.yml +services: + web: + deploy: + resources: + limits: + memory: 512M + reservations: + memory: 256M +``` + +## 🔐 Безопасность + +### Основные рекомендации + +1. **Обновление системы:** + ```bash + sudo apt update && sudo apt upgrade + ``` + +2. **Настройка Firewall:** + ```bash + sudo ufw enable + sudo ufw allow ssh + sudo ufw allow 80 + sudo ufw allow 443 + ``` + +3. **Ограничение доступа к админке:** + ```python + # settings.py + ADMIN_URL = 'secret-admin-url/' + ``` + +4. **Регулярные обновления:** + ```bash + # Еженедельное обновление + ./update + ``` + +--- + +🎯 **Следующие шаги**: [API документация](API.md) | [Управление скриптами](SCRIPTS_README.md) \ No newline at end of file diff --git a/endpoint_test.sh b/endpoint_test.sh deleted file mode 100755 index 8d58394..0000000 --- a/endpoint_test.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -BASE_URL="http://localhost:8002/auth" -EMAIL="testuser@example.com" -PASSWORD="secret123" - -echo "1️⃣ Регистрация пользователя..." -curl -s -X POST "$BASE_URL/register" \ - -H "Content-Type: application/json" \ - -d "{\"email\": \"$EMAIL\", \"password\": \"$PASSWORD\"}" | tee response_register.json -echo -e "\n" - -USER_ID=$(jq .id response_register.json) - -echo "2️⃣ Аутентификация..." -curl -s -X POST "$BASE_URL/login" \ - -H "Content-Type: application/json" \ - -d "{\"email\": \"$EMAIL\", \"password\": \"$PASSWORD\"}" | tee response_login.json -echo -e "\n" - -TOKEN=$(jq -r .access_token response_login.json) - -echo "🔐 Получен токен: $TOKEN" -AUTH_HEADER="Authorization: Bearer $TOKEN" - -echo "3️⃣ Получение текущего пользователя (/me)..." -curl -s -X GET "$BASE_URL/me" -H "$AUTH_HEADER" | tee response_me.json -echo -e "\n" - -echo "4️⃣ Получение списка всех пользователей..." -curl -s -X GET "$BASE_URL/users" | tee response_users.json -echo -e "\n" - -echo "5️⃣ Получение пользователя по ID ($USER_ID)..." -curl -s -X GET "$BASE_URL/users/$USER_ID" | tee response_user.json -echo -e "\n" - -echo "6️⃣ Обновление пользователя..." -curl -s -X PUT "$BASE_URL/users/$USER_ID" \ - -H "Content-Type: application/json" \ - -d "{\"email\": \"updated_$EMAIL\", \"role\": \"admin\"}" | tee response_update.json -echo -e "\n" - -echo "7️⃣ Удаление пользователя..." -curl -s -X DELETE "$BASE_URL/users/$USER_ID" | tee response_delete.json -echo -e "\n" - -echo "✅ Тест завершён." diff --git a/loading_screen_fixed.html b/loading_screen_fixed.html deleted file mode 100644 index c07b6aa..0000000 --- a/loading_screen_fixed.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - Тест исправленного сайта SmartSolTech - - - -

🎉 Проблема с загрузочным экраном исправлена!

- -
-

✅ Что было исправлено:

-
    -
  • Синтаксические ошибки JavaScript: Исправлены проблемы с закрывающими скобками
  • -
  • Загрузочный экран: Теперь корректно скрывается через 0.5 секунды
  • -
  • Основная функциональность: Восстановлена работа тем, навигации и анимаций
  • -
  • Отладочный код: Удален лишний код, который вызывал проблемы
  • -
-
- -
-

🧪 Тестирование:

-

Теперь сайт должен нормально загружаться. Проверьте следующие страницы:

- - 🏠 Главная страница - 🛠️ Страница услуг - ℹ️ О нас - -

Что проверить:

-
    -
  • ✅ Загрузочный экран исчезает через полсекунды
  • -
  • ✅ Навигационные ссылки работают
  • -
  • ✅ Кнопки и интерактивные элементы кликабельны
  • -
  • ✅ Переключатель темы работает (если есть)
  • -
  • ✅ Модальное окно услуг открывается
  • -
  • ✅ QR-код генерация работает в модальном окне
  • -
-
- -
-

🛠️ Техническая информация:

-
    -
  • Проблема: Синтаксические ошибки в modern-scripts.js блокировали загрузку
  • -
  • Решение: Пересоздан упрощенный и стабильный JavaScript файл
  • -
  • Сохранена функциональность: Скрытие загрузочного экрана, переключение тем, плавная прокрутка, анимации
  • -
  • Удалено: Отладочный код, который вызывал конфликты
  • -
-
- -
-

🚀 Сайт готов к использованию!

-

Все основные функции восстановлены, включая механизм QR-кода для заявок через Telegram бота.

-
- - \ No newline at end of file diff --git a/QR_CODE_FEATURE_SUMMARY.md b/patch/QR_CODE_FEATURE_SUMMARY.md similarity index 100% rename from QR_CODE_FEATURE_SUMMARY.md rename to patch/QR_CODE_FEATURE_SUMMARY.md diff --git a/real_confirmation_process.html b/patch/real_confirmation_process.html similarity index 100% rename from real_confirmation_process.html rename to patch/real_confirmation_process.html diff --git a/qr_success_animation_demo.html b/qr_success_animation_demo.html deleted file mode 100644 index 8efddd4..0000000 --- a/qr_success_animation_demo.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - ✨ Новая анимация успеха для заявок - - - -

Улучшенная анимация подачи заявок

- -
-

🎯 Что улучшено:

- -
-

📐 QR-код отцентрирован

-
    -
  • QR-код теперь идеально выровнен по центру поля
  • -
  • Фиксированный размер 200x200px для консистентности
  • -
  • Красивая рамка и отступы
  • -
-
- -
-

🎬 Анимированная галочка успеха

-
    -
  • После создания заявки появляется анимированная галочка ✓
  • -
  • Плавная анимация рисования круга и галочки
  • -
  • Профессиональный зеленый дизайн
  • -
-
- -
-

⏱️ Автоматическое закрытие

-
    -
  • Модальное окно автоматически закрывается через 6 секунд
  • -
  • 3 сек на QR-код → 3 сек на анимацию успеха → закрытие
  • -
  • Уведомление о успешной подаче заявки
  • -
-
-
- -
-

🔄 Новый процесс подачи заявки:

- -
    -
  1. Пользователь заполняет форму и нажимает "Отправить заявку"
  2. -
  3. Показывается индикатор загрузки "Отправляем..."
  4. -
  5. Появляется центрированный QR-код с кнопкой "Открыть в Telegram"
  6. -
  7. Через 3 секунды QR-код скрывается
  8. -
  9. Появляется анимированная галочка с сообщением "Заявка подана успешно!"
  10. -
  11. Через 3 секунды модальное окно автоматически закрывается
  12. -
  13. Показывается уведомление "Ожидайте подтверждения в Telegram"
  14. -
-
- -
-

🧪 Тестирование:

- -

Перейдите на страницу услуг и попробуйте подать заявку:

- - - 🛠️ Тестировать на странице услуг - - -

Что тестировать:

-
    -
  • ✅ Заполните форму и отправьте заявку
  • -
  • ✅ Убедитесь, что QR-код отцентрирован
  • -
  • ✅ Подождите 3 секунды - должна появиться анимированная галочка
  • -
  • ✅ Подождите еще 3 секунды - окно должно закрыться автоматически
  • -
  • ✅ Должно появиться уведомление о успешной подаче
  • -
-
- -
-

💻 Технические детали:

- -

Добавленные компоненты:

-
    -
  • CSS анимации: Keyframes для рисования галочки и круга
  • -
  • JavaScript таймеры: Координация показа QR → анимации → закрытия
  • -
  • Центрирование: Flexbox для идеального выравнивания
  • -
  • Сброс состояния: Очистка всех секций при закрытии модального окна
  • -
- -

Файлы изменены:

-
    -
  • services_modern.html - обновлена структура модального окна
  • -
  • modern-styles.css - добавлены анимации галочки
  • -
-
- -
-

🎉 Результат:

-

Теперь процесс подачи заявки стал более интуитивным, визуально привлекательным и автоматизированным!

- -

Пользователи получают четкую обратную связь на каждом этапе, а модальное окно автоматически закрывается, предотвращая накопление открытых окон.

-
- - \ No newline at end of file diff --git a/smartsoltech/static/qr_codes/.gitkeep b/smartsoltech/static/qr_codes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/test_links.html b/test_links.html deleted file mode 100644 index 898bfd5..0000000 --- a/test_links.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - Тест ссылок SmartSolTech - - -

Тестирование ссылок SmartSolTech

-
-

Основные страницы:

- - -

Инструкция:

-
    -
  1. Откройте каждую ссылку в новой вкладке
  2. -
  3. Проверьте, загружается ли страница
  4. -
  5. Попробуйте нажать на ссылки в навигации на каждой странице
  6. -
  7. Проверьте кнопки и интерактивные элементы
  8. -
- -

Что проверить на каждой странице:

-
    -
  • Работают ли ссылки в навигационном меню
  • -
  • Работают ли кнопки (например, "Оставить заявку")
  • -
  • Исчезает ли загрузочный экран через несколько секунд
  • -
  • Работает ли переключатель темы
  • -
-
- - \ No newline at end of file diff --git a/test_qr_functionality.html b/test_qr_functionality.html deleted file mode 100644 index d9879bf..0000000 --- a/test_qr_functionality.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - Тестирование QR-кода для заявок - - - -

🤖 Тестирование QR-кода и Telegram бота SmartSolTech

- -
-

📋 Инструкции для тестирования

-

Что мы добавили:

-
    -
  • ✅ QR-код генерацию в модальном окне заявок
  • -
  • ✅ Интеграция с Telegram ботом
  • -
  • ✅ Автоматическое создание заявки через форму
  • -
  • ✅ Подтверждение регистрации через Telegram
  • -
-
- -
-

🔍 Тест-кейс 1: Создание заявки через модальное окно

-
-

Шаг 1:

-

Перейдите на страницу услуг: http://localhost:8000/services/

-
-
-

Шаг 2:

-

Нажмите кнопку "Заказать услугу" под любой услугой

-
-
-

Шаг 3:

-

Заполните форму в модальном окне:

-
    -
  • Имя: Тест
  • -
  • Фамилия: Пользователь
  • -
  • Email: test@example.com
  • -
  • Телефон: +7-123-456-7890
  • -
  • Описание: Тестовая заявка на услугу
  • -
-
-
-

Шаг 4:

-

Поставьте галочку согласия и нажмите "Отправить заявку"

-
-
-

Ожидаемый результат:

-

✅ Должен появиться QR-код для Telegram

-

✅ Кнопка "Открыть в Telegram" должна работать

-
-
- -
-

🤖 Тест-кейс 2: Подтверждение через Telegram бота

-
-

Шаг 1:

-

Отсканируйте QR-код телефоном или нажмите кнопку "Открыть в Telegram"

-
-
-

Шаг 2:

-

Бот должен отправить команду /start с параметрами заявки

-
-
-

Шаг 3:

-

Нажмите "Start" в Telegram

-
-
-

Ожидаемый результат:

-

✅ Бот приветствует и подтверждает регистрацию

-

✅ Заявка получает статус "подтверждена"

-

✅ Клиент связывается с chat_id пользователя

-
-
- -
-

⚠️ Возможные проблемы

-
    -
  • QR-код не генерируется: Проверьте настройки Telegram бота в админке
  • -
  • Telegram бот не отвечает: Проверьте токен бота и что сервис telegram_bot запущен
  • -
  • Ошибка 500: Проверьте логи Django в консоли Docker
  • -
  • Ссылки не работают: Убедитесь, что JavaScript загружается корректно
  • -
-
- - - -
-

🔧 Техническая информация

-

Новые компоненты:

-
    -
  • QR-код секция: Добавлена в модальное окно services_modern.html
  • -
  • JavaScript: Обновлен для работы с generate_qr_code API
  • -
  • Backend: generate_qr_code view создает QR-код и заявку
  • -
  • Telegram интеграция: Обрабатывает /start команды с параметрами
  • -
- -

Workflow:

-
    -
  1. Пользователь заполняет форму → JavaScript отправляет POST на /service/generate_qr_code/
  2. -
  3. Django создает Client, ServiceRequest и генерирует QR-код
  4. -
  5. Возвращается ссылка на Telegram бота с токеном
  6. -
  7. Пользователь сканирует QR или переходит по ссылке
  8. -
  9. Telegram бот обрабатывает /start команду и подтверждает заявку
  10. -
-
- - \ No newline at end of file