📚 Project restructuring and CI/CD setup
✨ Major reorganization: - Move all documentation to docs/ directory - Clean up root directory from temporary files - Add comprehensive project documentation - Implement Drone CI/CD pipeline 📁 Structure changes: - docs/SCRIPTS_README.md - Complete scripts guide - docs/DEPLOYMENT.md - Production deployment guide - docs/API.md - Comprehensive API documentation - patch/ - Temporary and test files - Clean .gitignore with proper exclusions 🚀 CI/CD Pipeline (.drone.yml): - Code quality checks (flake8, black, bandit) - Unit and integration testing - Docker image building and security scanning - Staging deployment automation - Production deployment on tags - Telegram notifications - Scheduled maintenance tasks 📖 Enhanced README.md: - Technology stack badges with icons - Drone CI build status badge - Comprehensive quick start guide - Clear project architecture - Links to all documentation 🔧 Additional improvements: - MIT License added - .gitkeep files for important directories - Improved .gitignore patterns - Professional project presentation 🎯 Result: Clean, professional project structure ready for production
This commit is contained in:
377
.drone.yml
Normal file
377
.drone.yml
Normal file
@@ -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
|
||||
128
.gitignore
vendored
128
.gitignore
vendored
@@ -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
|
||||
*.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
|
||||
@@ -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
|
||||
|
||||
Все готово к работе! 🚀
|
||||
@@ -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 ботом и использует все настроенные компоненты.
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -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.
|
||||
213
README.md
Normal file
213
README.md
Normal file
@@ -0,0 +1,213 @@
|
||||
# 🚀 SmartSolTech
|
||||
|
||||
[](https://drone.smartsoltech.kr/smartsoltech/smartsoltech.kr)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://www.python.org/downloads/release/python-3100/)
|
||||
[](https://docs.djangoproject.com/en/4.2/)
|
||||
|
||||
Современная веб-платформа для предоставления IT-услуг с интегрированной системой управления заказами и Telegram-ботом.
|
||||
|
||||
## 🛠️ Технологический стек
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white" alt="Python" />
|
||||
<img src="https://img.shields.io/badge/Django-092E20?style=for-the-badge&logo=django&logoColor=white" alt="Django" />
|
||||
<img src="https://img.shields.io/badge/PostgreSQL-316192?style=for-the-badge&logo=postgresql&logoColor=white" alt="PostgreSQL" />
|
||||
<img src="https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white" alt="Docker" />
|
||||
<img src="https://img.shields.io/badge/Bootstrap-563D7C?style=for-the-badge&logo=bootstrap&logoColor=white" alt="Bootstrap" />
|
||||
<img src="https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black" alt="JavaScript" />
|
||||
<img src="https://img.shields.io/badge/Telegram-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white" alt="Telegram" />
|
||||
<img src="https://img.shields.io/badge/Drone%20CI-212121?style=for-the-badge&logo=drone&logoColor=white" alt="Drone CI" />
|
||||
<img src="https://img.shields.io/badge/HTML5-E34F26?style=for-the-badge&logo=html5&logoColor=white" alt="HTML5" />
|
||||
<img src="https://img.shields.io/badge/CSS3-1572B6?style=for-the-badge&logo=css3&logoColor=white" alt="CSS3" />
|
||||
</p>
|
||||
|
||||
## ✨ Основные возможности
|
||||
|
||||
### 📱 **Веб-платформа**
|
||||
- Современный адаптивный интерфейс на 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)
|
||||
|
||||
---
|
||||
|
||||
<p align="center">
|
||||
Сделано с ❤️ командой <strong>SmartSolTech</strong>
|
||||
</p>
|
||||
@@ -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 <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 контейнеров
|
||||
- Проверка статуса сервисов
|
||||
- Отображение доступных ресурсов
|
||||
|
||||
**Использование:**
|
||||
```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 <URL> # Добавить backup репозиторий
|
||||
./bin/setup-backup.sh <URL> <name> # Добавить с именем
|
||||
./bin/setup-backup.sh --remove <name> # Удалить 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
|
||||
```
|
||||
542
docs/API.md
Normal file
542
docs/API.md
Normal file
@@ -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 <username>
|
||||
|
||||
# Через 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)
|
||||
352
docs/DEPLOYMENT.md
Normal file
352
docs/DEPLOYMENT.md
Normal file
@@ -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 <YOUR_BOT_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)
|
||||
@@ -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 "✅ Тест завершён."
|
||||
@@ -1,62 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Тест исправленного сайта SmartSolTech</title>
|
||||
<style>
|
||||
body { font-family: Arial, sans-serif; padding: 20px; line-height: 1.6; }
|
||||
.success { background: #d4edda; padding: 15px; border-radius: 5px; margin: 10px 0; }
|
||||
.info { background: #d1ecf1; padding: 15px; border-radius: 5px; margin: 10px 0; }
|
||||
.test-link { display: inline-block; margin: 10px; padding: 10px 15px; background: #007bff; color: white; text-decoration: none; border-radius: 5px; }
|
||||
.test-link:hover { background: #0056b3; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>🎉 Проблема с загрузочным экраном исправлена!</h1>
|
||||
|
||||
<div class="success">
|
||||
<h2>✅ Что было исправлено:</h2>
|
||||
<ul>
|
||||
<li><strong>Синтаксические ошибки JavaScript:</strong> Исправлены проблемы с закрывающими скобками</li>
|
||||
<li><strong>Загрузочный экран:</strong> Теперь корректно скрывается через 0.5 секунды</li>
|
||||
<li><strong>Основная функциональность:</strong> Восстановлена работа тем, навигации и анимаций</li>
|
||||
<li><strong>Отладочный код:</strong> Удален лишний код, который вызывал проблемы</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<h2>🧪 Тестирование:</h2>
|
||||
<p>Теперь сайт должен нормально загружаться. Проверьте следующие страницы:</p>
|
||||
|
||||
<a href="http://localhost:8000/" target="_blank" class="test-link">🏠 Главная страница</a>
|
||||
<a href="http://localhost:8000/services/" target="_blank" class="test-link">🛠️ Страница услуг</a>
|
||||
<a href="http://localhost:8000/about/" target="_blank" class="test-link">ℹ️ О нас</a>
|
||||
|
||||
<h3>Что проверить:</h3>
|
||||
<ul>
|
||||
<li>✅ Загрузочный экран исчезает через полсекунды</li>
|
||||
<li>✅ Навигационные ссылки работают</li>
|
||||
<li>✅ Кнопки и интерактивные элементы кликабельны</li>
|
||||
<li>✅ Переключатель темы работает (если есть)</li>
|
||||
<li>✅ Модальное окно услуг открывается</li>
|
||||
<li>✅ QR-код генерация работает в модальном окне</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<h2>🛠️ Техническая информация:</h2>
|
||||
<ul>
|
||||
<li><strong>Проблема:</strong> Синтаксические ошибки в modern-scripts.js блокировали загрузку</li>
|
||||
<li><strong>Решение:</strong> Пересоздан упрощенный и стабильный JavaScript файл</li>
|
||||
<li><strong>Сохранена функциональность:</strong> Скрытие загрузочного экрана, переключение тем, плавная прокрутка, анимации</li>
|
||||
<li><strong>Удалено:</strong> Отладочный код, который вызывал конфликты</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="success">
|
||||
<h2>🚀 Сайт готов к использованию!</h2>
|
||||
<p>Все основные функции восстановлены, включая механизм QR-кода для заявок через Telegram бота.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,110 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>✨ Новая анимация успеха для заявок</title>
|
||||
<style>
|
||||
body { font-family: Arial, sans-serif; padding: 20px; line-height: 1.6; }
|
||||
.improvement { background: #e8f5e8; padding: 20px; border-radius: 10px; margin: 15px 0; border-left: 5px solid #28a745; }
|
||||
.feature { background: #e7f3ff; padding: 15px; border-radius: 8px; margin: 10px 0; }
|
||||
.workflow { background: #fff9e6; padding: 15px; border-radius: 8px; margin: 10px 0; }
|
||||
.test-btn { display: inline-block; padding: 12px 20px; background: #007bff; color: white; text-decoration: none; border-radius: 5px; margin: 10px 5px; }
|
||||
.test-btn:hover { background: #0056b3; text-decoration: none; color: white; }
|
||||
h2 { color: #333; border-bottom: 2px solid #28a745; padding-bottom: 5px; }
|
||||
.emoji { font-size: 1.2em; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1><span class="emoji">✨</span> Улучшенная анимация подачи заявок</h1>
|
||||
|
||||
<div class="improvement">
|
||||
<h2><span class="emoji">🎯</span> Что улучшено:</h2>
|
||||
|
||||
<div class="feature">
|
||||
<h3><span class="emoji">📐</span> QR-код отцентрирован</h3>
|
||||
<ul>
|
||||
<li>QR-код теперь идеально выровнен по центру поля</li>
|
||||
<li>Фиксированный размер 200x200px для консистентности</li>
|
||||
<li>Красивая рамка и отступы</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="feature">
|
||||
<h3><span class="emoji">🎬</span> Анимированная галочка успеха</h3>
|
||||
<ul>
|
||||
<li>После создания заявки появляется анимированная галочка ✓</li>
|
||||
<li>Плавная анимация рисования круга и галочки</li>
|
||||
<li>Профессиональный зеленый дизайн</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="feature">
|
||||
<h3><span class="emoji">⏱️</span> Автоматическое закрытие</h3>
|
||||
<ul>
|
||||
<li>Модальное окно автоматически закрывается через 6 секунд</li>
|
||||
<li>3 сек на QR-код → 3 сек на анимацию успеха → закрытие</li>
|
||||
<li>Уведомление о успешной подаче заявки</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="workflow">
|
||||
<h2><span class="emoji">🔄</span> Новый процесс подачи заявки:</h2>
|
||||
|
||||
<ol>
|
||||
<li><strong>Пользователь заполняет форму</strong> и нажимает "Отправить заявку"</li>
|
||||
<li><strong>Показывается индикатор загрузки</strong> "Отправляем..."</li>
|
||||
<li><strong>Появляется центрированный QR-код</strong> с кнопкой "Открыть в Telegram"</li>
|
||||
<li><strong>Через 3 секунды</strong> QR-код скрывается</li>
|
||||
<li><strong>Появляется анимированная галочка</strong> с сообщением "Заявка подана успешно!"</li>
|
||||
<li><strong>Через 3 секунды</strong> модальное окно автоматически закрывается</li>
|
||||
<li><strong>Показывается уведомление</strong> "Ожидайте подтверждения в Telegram"</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="improvement">
|
||||
<h2><span class="emoji">🧪</span> Тестирование:</h2>
|
||||
|
||||
<p>Перейдите на страницу услуг и попробуйте подать заявку:</p>
|
||||
|
||||
<a href="http://localhost:8000/services/" target="_blank" class="test-btn">
|
||||
<span class="emoji">🛠️</span> Тестировать на странице услуг
|
||||
</a>
|
||||
|
||||
<h3>Что тестировать:</h3>
|
||||
<ul>
|
||||
<li>✅ Заполните форму и отправьте заявку</li>
|
||||
<li>✅ Убедитесь, что QR-код отцентрирован</li>
|
||||
<li>✅ Подождите 3 секунды - должна появиться анимированная галочка</li>
|
||||
<li>✅ Подождите еще 3 секунды - окно должно закрыться автоматически</li>
|
||||
<li>✅ Должно появиться уведомление о успешной подаче</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="feature">
|
||||
<h2><span class="emoji">💻</span> Технические детали:</h2>
|
||||
|
||||
<h3>Добавленные компоненты:</h3>
|
||||
<ul>
|
||||
<li><strong>CSS анимации:</strong> Keyframes для рисования галочки и круга</li>
|
||||
<li><strong>JavaScript таймеры:</strong> Координация показа QR → анимации → закрытия</li>
|
||||
<li><strong>Центрирование:</strong> Flexbox для идеального выравнивания</li>
|
||||
<li><strong>Сброс состояния:</strong> Очистка всех секций при закрытии модального окна</li>
|
||||
</ul>
|
||||
|
||||
<h3>Файлы изменены:</h3>
|
||||
<ul>
|
||||
<li><code>services_modern.html</code> - обновлена структура модального окна</li>
|
||||
<li><code>modern-styles.css</code> - добавлены анимации галочки</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="improvement">
|
||||
<h2><span class="emoji">🎉</span> Результат:</h2>
|
||||
<p><strong>Теперь процесс подачи заявки стал более интуитивным, визуально привлекательным и автоматизированным!</strong></p>
|
||||
|
||||
<p>Пользователи получают четкую обратную связь на каждом этапе, а модальное окно автоматически закрывается, предотвращая накопление открытых окон.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
0
smartsoltech/static/qr_codes/.gitkeep
Normal file
0
smartsoltech/static/qr_codes/.gitkeep
Normal file
@@ -1,35 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Тест ссылок SmartSolTech</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Тестирование ссылок SmartSolTech</h1>
|
||||
<div>
|
||||
<h3>Основные страницы:</h3>
|
||||
<ul>
|
||||
<li><a href="http://localhost:8000/" target="_blank">Главная</a></li>
|
||||
<li><a href="http://localhost:8000/services/" target="_blank">Услуги</a></li>
|
||||
<li><a href="http://localhost:8000/about/" target="_blank">О нас</a></li>
|
||||
</ul>
|
||||
|
||||
<p><strong>Инструкция:</strong></p>
|
||||
<ol>
|
||||
<li>Откройте каждую ссылку в новой вкладке</li>
|
||||
<li>Проверьте, загружается ли страница</li>
|
||||
<li>Попробуйте нажать на ссылки в навигации на каждой странице</li>
|
||||
<li>Проверьте кнопки и интерактивные элементы</li>
|
||||
</ol>
|
||||
|
||||
<p><strong>Что проверить на каждой странице:</strong></p>
|
||||
<ul>
|
||||
<li>Работают ли ссылки в навигационном меню</li>
|
||||
<li>Работают ли кнопки (например, "Оставить заявку")</li>
|
||||
<li>Исчезает ли загрузочный экран через несколько секунд</li>
|
||||
<li>Работает ли переключатель темы</li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,127 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Тестирование QR-кода для заявок</title>
|
||||
<style>
|
||||
body { font-family: Arial, sans-serif; padding: 20px; line-height: 1.6; }
|
||||
.section { margin-bottom: 30px; padding: 20px; border: 1px solid #ddd; border-radius: 8px; }
|
||||
.instructions { background: #f8f9fa; }
|
||||
.test-case { background: #e7f3ff; }
|
||||
.success { background: #d4edda; }
|
||||
.warning { background: #fff3cd; }
|
||||
h2 { color: #333; border-bottom: 2px solid #007bff; padding-bottom: 5px; }
|
||||
h3 { color: #666; }
|
||||
.step { margin: 10px 0; padding: 10px; background: white; border-radius: 4px; }
|
||||
.link { color: #007bff; text-decoration: none; font-weight: bold; }
|
||||
.link:hover { text-decoration: underline; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>🤖 Тестирование QR-кода и Telegram бота SmartSolTech</h1>
|
||||
|
||||
<div class="section instructions">
|
||||
<h2>📋 Инструкции для тестирования</h2>
|
||||
<p><strong>Что мы добавили:</strong></p>
|
||||
<ul>
|
||||
<li>✅ QR-код генерацию в модальном окне заявок</li>
|
||||
<li>✅ Интеграция с Telegram ботом</li>
|
||||
<li>✅ Автоматическое создание заявки через форму</li>
|
||||
<li>✅ Подтверждение регистрации через Telegram</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section test-case">
|
||||
<h2>🔍 Тест-кейс 1: Создание заявки через модальное окно</h2>
|
||||
<div class="step">
|
||||
<h3>Шаг 1:</h3>
|
||||
<p>Перейдите на страницу услуг: <a href="http://localhost:8000/services/" class="link" target="_blank">http://localhost:8000/services/</a></p>
|
||||
</div>
|
||||
<div class="step">
|
||||
<h3>Шаг 2:</h3>
|
||||
<p>Нажмите кнопку <strong>"Заказать услугу"</strong> под любой услугой</p>
|
||||
</div>
|
||||
<div class="step">
|
||||
<h3>Шаг 3:</h3>
|
||||
<p>Заполните форму в модальном окне:</p>
|
||||
<ul>
|
||||
<li>Имя: Тест</li>
|
||||
<li>Фамилия: Пользователь</li>
|
||||
<li>Email: test@example.com</li>
|
||||
<li>Телефон: +7-123-456-7890</li>
|
||||
<li>Описание: Тестовая заявка на услугу</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="step">
|
||||
<h3>Шаг 4:</h3>
|
||||
<p>Поставьте галочку согласия и нажмите <strong>"Отправить заявку"</strong></p>
|
||||
</div>
|
||||
<div class="step">
|
||||
<h3>Ожидаемый результат:</h3>
|
||||
<p>✅ Должен появиться QR-код для Telegram</p>
|
||||
<p>✅ Кнопка "Открыть в Telegram" должна работать</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section test-case">
|
||||
<h2>🤖 Тест-кейс 2: Подтверждение через Telegram бота</h2>
|
||||
<div class="step">
|
||||
<h3>Шаг 1:</h3>
|
||||
<p>Отсканируйте QR-код телефоном или нажмите кнопку "Открыть в Telegram"</p>
|
||||
</div>
|
||||
<div class="step">
|
||||
<h3>Шаг 2:</h3>
|
||||
<p>Бот должен отправить команду /start с параметрами заявки</p>
|
||||
</div>
|
||||
<div class="step">
|
||||
<h3>Шаг 3:</h3>
|
||||
<p>Нажмите "Start" в Telegram</p>
|
||||
</div>
|
||||
<div class="step">
|
||||
<h3>Ожидаемый результат:</h3>
|
||||
<p>✅ Бот приветствует и подтверждает регистрацию</p>
|
||||
<p>✅ Заявка получает статус "подтверждена"</p>
|
||||
<p>✅ Клиент связывается с chat_id пользователя</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section warning">
|
||||
<h2>⚠️ Возможные проблемы</h2>
|
||||
<ul>
|
||||
<li><strong>QR-код не генерируется:</strong> Проверьте настройки Telegram бота в админке</li>
|
||||
<li><strong>Telegram бот не отвечает:</strong> Проверьте токен бота и что сервис telegram_bot запущен</li>
|
||||
<li><strong>Ошибка 500:</strong> Проверьте логи Django в консоли Docker</li>
|
||||
<li><strong>Ссылки не работают:</strong> Убедитесь, что JavaScript загружается корректно</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section success">
|
||||
<h2>📱 Быстрые ссылки для тестирования</h2>
|
||||
<p><a href="http://localhost:8000/" class="link" target="_blank">🏠 Главная страница</a></p>
|
||||
<p><a href="http://localhost:8000/services/" class="link" target="_blank">🛠️ Страница услуг (тестируем здесь)</a></p>
|
||||
<p><a href="http://localhost:8000/about/" class="link" target="_blank">ℹ️ О нас</a></p>
|
||||
<p><a href="http://localhost:8080" class="link" target="_blank">🗄️ PgAdmin (admin:admin)</a></p>
|
||||
</div>
|
||||
|
||||
<div class="section instructions">
|
||||
<h2>🔧 Техническая информация</h2>
|
||||
<h3>Новые компоненты:</h3>
|
||||
<ul>
|
||||
<li><strong>QR-код секция:</strong> Добавлена в модальное окно services_modern.html</li>
|
||||
<li><strong>JavaScript:</strong> Обновлен для работы с generate_qr_code API</li>
|
||||
<li><strong>Backend:</strong> generate_qr_code view создает QR-код и заявку</li>
|
||||
<li><strong>Telegram интеграция:</strong> Обрабатывает /start команды с параметрами</li>
|
||||
</ul>
|
||||
|
||||
<h3>Workflow:</h3>
|
||||
<ol>
|
||||
<li>Пользователь заполняет форму → JavaScript отправляет POST на /service/generate_qr_code/</li>
|
||||
<li>Django создает Client, ServiceRequest и генерирует QR-код</li>
|
||||
<li>Возвращается ссылка на Telegram бота с токеном</li>
|
||||
<li>Пользователь сканирует QR или переходит по ссылке</li>
|
||||
<li>Telegram бот обрабатывает /start команду и подтверждает заявку</li>
|
||||
</ol>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user