diff --git a/README.md b/README.md new file mode 100644 index 0000000..6f4261a --- /dev/null +++ b/README.md @@ -0,0 +1,394 @@ +# deev.space + +
+ Python Version + Django Version + License + Status +
+ +Профессиональный персональный веб-сайт портфолио backend-разработчика, созданный на Django. Проект представляет собой полнофункциональную платформу с системой управления контентом, блог-системой с комментариями, интерактивным портфолио проектов и современным адаптивным дизайном. + +## 🌟 Основные возможности + +- **Система управления контентом** через расширенную Django Admin панель с кастомными инлайнами и фильтрами +- **Блог-платформа** с поддержкой категорий, комментариев, лайков/дизлайков, галерей изображений и прикрепленных файлов +- **Портфолио проектов** с гибкой системой фильтрации по языкам программирования, технологиям и статусам +- **Страница достижений** для демонстрации наград и сертификатов +- **Многоуровневая система комментариев** с возможностью оценки и вложенности до 3 уровней +- **Интеграция с социальными сетями** для автоматической публикации новых статей в Telegram и VKontakte +- **Адаптивный дизайн** с поддержкой всех современных устройств и разрешений +- **SEO-оптимизация** включая динамический sitemap, schema.org разметку и Open Graph метатеги +- **Продвинутая аналитика** с интеграцией Яндекс.Метрики и Google Analytics +- **Безопасность** с использованием Yandex SmartCaptcha и защитой от CSRF/XSS атак + +## 🛠 Технологический стек + +**Backend:** +- Python 3.8+ +- Django 4.2+ +- SQLite (разработка) / PostgreSQL (продакшн) +- Pillow для обработки изображений +- Bleach для санитизации HTML +- BeautifulSoup4 для парсинга метаданных ссылок +- Requests для HTTP запросов + +**Frontend:** +- HTML5, CSS3 с использованием CSS Custom Properties +- Vanilla JavaScript (ES6+) +- Font Awesome 6.5 для иконок +- Devicon для технологических иконок +- AOS (Animate On Scroll) для анимаций +- Prism.js для подсветки синтаксиса кода +- Google Fonts (Raleway, Inter) + +**Интеграции:** +- Yandex SmartCaptcha для защиты форм +- Telegram Bot API для автопостинга +- VK API для публикации в группы +- Schema.org для структурированных данных + +**Инфраструктура:** +- Nginx как веб-сервер и reverse proxy +- Gunicorn для WSGI сервера +- Supervisor для управления процессами +- Let's Encrypt для SSL сертификатов + +## 📁 Структура проекта +``` +deev.space/ +├── main/ # Основное Django приложение +│ ├── migrations/ # Миграции базы данных +│ ├── templatetags/ # Кастомные теги и фильтры +│ │ └── custom_filters.py # Фильтры для технологий, времени чтения +│ ├── models.py # Модели данных +│ ├── views.py # Представления и бизнес-логика +│ ├── forms.py # Формы с валидацией +│ ├── admin.py # Административная панель +│ ├── signals.py # Сигналы для автопостинга +│ ├── sitemaps.py # Генерация sitemap +│ ├── context_processors.py # Глобальные контекстные данные +│ └── urls.py # URL маршруты +├── dspace/ # Конфигурация Django проекта +│ ├── settings.py # Настройки приложения +│ ├── urls.py # Корневые URL паттерны +│ ├── wsgi.py # WSGI точка входа +│ └── asgi.py # ASGI точка входа +├── templates/ # HTML шаблоны +│ ├── wrapper.html # Базовый шаблон с SEO +│ ├── index.html # Главная страница +│ ├── about.html # Страница "Обо мне" +│ ├── projects.html # Портфолио проектов +│ ├── achievements.html # Достижения +│ ├── contacts.html # Контакты и форма обратной связи +│ ├── blog/ # Шаблоны блога +│ │ ├── blog.html # Список статей +│ │ └── article.html # Детальная страница статьи +│ ├── auth/ # Шаблоны аутентификации +│ │ ├── login.html # Вход +│ │ └── register.html # Регистрация +│ ├── errors/ # Страницы ошибок +│ │ ├── 404.html # Страница не найдена +│ │ └── 500.html # Ошибка сервера +│ ├── includes/ # Переиспользуемые компоненты +│ │ ├── project_card.html # Карточка проекта +│ │ ├── comments.html # Рекурсивные комментарии +│ │ └── pagination.html # Пагинация +│ └── widgets/ # Кастомные виджеты +│ └── smartcaptcha.html # Yandex SmartCaptcha +├── static/ # Статические файлы +│ ├── css/ # Стили +│ │ ├── variables.css # CSS переменные и дизайн-токены +│ │ ├── base.css # Базовые стили и типографика +│ │ ├── components.css # Переиспользуемые компоненты +│ │ ├── layout.css # Раскладка и сетки +│ │ ├── projects.css # Стили проектов +│ │ ├── blog.css # Стили блога +│ │ ├── pages.css # Страничные стили +│ │ └── media.css # Медиа-запросы +│ ├── js/ # JavaScript +│ │ └── main.js # Основная логика фронтенда +│ └── img/ # Изображения +│ ├── logo.png # Логотип +│ └── favicon.ico # Фавикон +├── media/ # Загружаемые файлы +│ ├── articles/ # Изображения статей +│ │ ├── gallery/ # Галереи статей +│ │ └── files/ # Прикрепленные файлы +│ ├── projects/ # Изображения проектов +│ ├── avatars/ # Аватары пользователей +│ └── site/ # Настройки сайта +├── logs/ # Логи приложения +├── .env # Переменные окружения +├── requirements.txt # Python зависимости +├── manage.py # Django CLI утилита +└── README.md # Документация +``` + +## 🚀 Быстрый старт + +### Предварительные требования + +Перед началом работы убедитесь, что установлены следующие компоненты: + +- Python 3.8 или выше +- pip (менеджер пакетов Python) +- virtualenv или venv (рекомендуется) +- Git для клонирования репозитория + +### Установка и запуск + +**Шаг 1. Клонирование репозитория** +```bash +git clone https://github.com/EDeev/deev.space.git +cd deev.space +``` + +**Шаг 2. Создание виртуального окружения** +```bash +python -m venv venv + +# Для Linux/macOS: +source venv/bin/activate + +# Для Windows: +venv\Scripts\activate +``` + +**Шаг 3. Установка зависимостей** +```bash +pip install -r requirements.txt +``` + +**Шаг 4. Настройка переменных окружения** + +Создайте файл `.env` в корне проекта со следующим содержимым: +```env +# Django +DJANGO_SECRET_KEY=your-secret-key-here +DJANGO_DEBUG=True + +# Email +EMAIL_HOST=smtp.yandex.ru +EMAIL_PORT=465 +EMAIL_HOST_USER=your-email@example.com +EMAIL_HOST_PASSWORD=your-password +DEFAULT_FROM_EMAIL=your-email@example.com +CONTACT_EMAIL=your-email@example.com + +# Yandex SmartCaptcha +SMARTCAPTCHA_CLIENT_KEY=your-client-key +SMARTCAPTCHA_SERVER_KEY=your-server-key + +# Telegram (опционально) +TELEGRAM_BOT_TOKEN=your-bot-token +TELEGRAM_CHANNEL_ID=your-channel-id + +# VK (опционально) +VK_ACCESS_TOKEN=your-access-token +VK_GROUP_ID=your-group-id +``` + +**Шаг 5. Применение миграций базы данных** +```bash +python manage.py migrate +``` + +**Шаг 6. Создание суперпользователя** +```bash +python manage.py createsuperuser +``` + +Следуйте инструкциям для создания учетной записи администратора. + +**Шаг 7. Сбор статических файлов** +```bash +python manage.py collectstatic --noinput +``` + +**Шаг 8. Запуск сервера разработки** +```bash +python manage.py runserver +``` + +Сайт будет доступен по адресу: `http://127.0.0.1:8000` + +Административная панель: `http://127.0.0.1:8000/admin` + +## 📊 Модели данных + +### SiteSettings (Настройки сайта) +Singleton модель для управления глобальными настройками сайта через административную панель. Включает информацию о владельце, контакты, социальные сети и файлы. + +**Основные поля:** +- `site_name`, `site_description` - название и описание сайта +- `owner_name`, `owner_title`, `owner_bio` - информация о владельце +- `owner_photo` - фотография +- `owner_email`, `owner_phone`, `owner_city` - контактные данные +- `telegram_url`, `github_url`, `vk_url`, `linkedin_url` - социальные сети +- `resume_file` - файл резюме + +### Article (Статьи блога и достижения) +Универсальная модель для статей блога и достижений с поддержкой мультимедиа контента. + +**Основные поля:** +- `title`, `slug`, `sub_title` - заголовки и URL +- `excerpt`, `post` - описание и содержание +- `img` - превью изображение +- `category` - категория статьи +- `is_published` - статус публикации +- `comments_enabled` - включение комментариев +- `is_achievement` - флаг достижения +- `views`, `date`, `updated_at` - метаданные + +**Связанные модели:** +- `ArticleImage` - галерея изображений +- `ArticleFile` - прикрепленные файлы +- `ArticleLink` - прикрепленные ссылки с автоматическим парсингом метаданных + +### Project (Портфолио проектов) +Модель для управления проектами с гибкой системой статусов и отображения. + +**Основные поля:** +- `title`, `slug` - название и URL +- `short_description`, `description` - описания +- `features` - список особенностей +- `programming_languages` - языки программирования +- `technologies` - используемые технологии +- `status` - связь с ProjectStatus +- `card_size` - размер карточки (featured/regular/small) +- `show_on_homepage`, `homepage_order` - отображение на главной +- `github_url`, `demo_url` - ссылки + +### Experience (Опыт работы) +Детальная информация о профессиональном опыте. + +**Основные поля:** +- `title`, `company`, `company_url` - должность и компания +- `description`, `responsibilities` - описание и обязанности +- `technologies` - используемые технологии +- `start_date`, `end_date`, `is_current` - период работы +- Автоматический расчет продолжительности через свойство `duration` + +### Education (Образование) +Информация об образовании с поддержкой различных типов. + +**Основные поля:** +- `institution`, `degree` - учебное заведение и специальность +- `education_type` - тип (университет/курс/школа) +- `achievements` - список достижений +- `start_year`, `end_year`, `is_current` - период обучения +- `certificate_number`, `certificate_url` - сертификаты + +### Comment (Комментарии) +Многоуровневая система комментариев с поддержкой вложенности. + +**Основные поля:** +- `article`, `user`, `parent` - связи +- `content` - содержание комментария +- `is_approved` - модерация +- Автоматический расчет уровня вложенности через `nesting_level` +- Подсчет лайков/дизлайков через `CommentLike` + +### CustomUser (Пользователи) +Расширенная модель пользователя Django. + +**Дополнительные поля:** +- `email` - опциональный email +- `is_verified` - статус верификации +- `avatar` - аватар пользователя + +## ⚙️ Конфигурация + +### Основные настройки производства + +Для развертывания в продакшн среде необходимо изменить следующие параметры в `dspace/settings.py`: +```python +# Безопасность +DEBUG = False +SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY') +ALLOWED_HOSTS = ['deev.space', 'www.deev.space'] + +# База данных (рекомендуется PostgreSQL) +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'deevspace_db', + 'USER': 'deevspace_user', + 'PASSWORD': os.environ.get('DB_PASSWORD'), + 'HOST': 'localhost', + 'PORT': '5432', + } +} + +# Безопасность +SECURE_SSL_REDIRECT = True +SECURE_HSTS_SECONDS = 31536000 +SECURE_HSTS_INCLUDE_SUBDOMAINS = True +SECURE_HSTS_PRELOAD = True +SESSION_COOKIE_SECURE = True +CSRF_COOKIE_SECURE = True +``` + +### Настройка интеграций + +**Автопостинг в Telegram:** +Настройте переменные окружения `TELEGRAM_BOT_TOKEN` и `TELEGRAM_CHANNEL_ID`. При публикации новой статьи автоматически отправляется пост в канал. + +**Автопостинг в VKontakte:** +Настройте `VK_ACCESS_TOKEN` и `VK_GROUP_ID` для автоматической публикации в группу VK. + +**Email уведомления:** +Настройте SMTP параметры для отправки уведомлений через контактную форму. + +## 🌐 Развертывание + +Можете прочитать о развёртывании проекта на сервере в статье на моём сайте. + +## 📈 Аналитика и мониторинг + +Проект интегрирован с системами аналитики для отслеживания поведения пользователей: + +**Яндекс.Метрика:** +Автоматически загружается при наличии `YANDEX_METRIKA_ID` в настройках. Отслеживает посещаемость, карты кликов, вебвизор и другие метрики. + +**Google Analytics:** +Подключается при указании `GOOGLE_ANALYTICS_ID`. Предоставляет детальную аналитику трафика и поведения пользователей. + +**Логирование:** +Настроено детальное логирование с записью ошибок в файлы и вывод информационных сообщений в консоль. + +## 🛡️ Безопасность + +Проект реализует следующие меры безопасности: + +- **CSRF Protection** - защита от межсайтовых запросов через Django middleware +- **XSS Protection** - санитизация пользовательского ввода с помощью Bleach +- **SQL Injection Protection** - использование Django ORM +- **Yandex SmartCaptcha** - защита форм от ботов +- **HTTPS Redirect** - принудительное перенаправление на защищенное соединение +- **HSTS Headers** - заголовки безопасности для браузеров +- **Secure Cookies** - защищенные cookies для сессий +- **Content Security Policy** - настроенные заголовки безопасности +- **Rate Limiting** - защита от перегрузки (рекомендуется настроить на уровне Nginx) + +## 👨‍💻 Автор и контакты + +**Деев Егор Викторович** +Backend Developer | Python Specialist + +- **Веб-сайт:** [deev.space](https://deev.space) +- **GitHub:** [@EDeev](https://github.com/EDeev) +- **Email:** egor@deev.space +- **Telegram:** [@Egor_Deev](https://t.me/Egor_Deev) + +## 📄 Лицензия + +Этот проект является некоммерческим и распространяется под лицензией MIT. + +--- + +
+ ⭐ Если проект оказался полезным, поставьте звездочку на GitHub! +

Создано с ❤️ от вашего дорогого - deev.space ©

+