deev.space/README.md
2025-12-06 13:31:27 +03:00

393 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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

# deev.space
<div align="center">
<img src="https://img.shields.io/badge/Python-3.8+-blue.svg" alt="Python Version">
<img src="https://img.shields.io/badge/Django-4.2+-green.svg" alt="Django Version">
<img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License">
<img src="https://img.shields.io/badge/Status-Production-brightgreen.svg" alt="Status">
</div>
Профессиональный персональный веб-сайт портфолио 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/ # Логи приложения
├── 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 параметры для отправки уведомлений через контактную форму.
## 🌐 Развертывание
Можете прочитать о развёртывании проекта на сервере в <a href="https://deev.space/blog/razvertyvanie-django-proekta-na-servere-s-nulya-do-https/">статье на моём сайте</a>.
## 📈 Аналитика и мониторинг
Проект интегрирован с системами аналитики для отслеживания поведения пользователей:
**Яндекс.Метрика:**
Автоматически загружается при наличии `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.
---
<div align="center">
<sub>⭐ Если проект оказался полезным, поставьте звездочку на GitHub!</sub>
<p><sub>Создано с ❤️ от вашего дорогого - <a href="https://deev.space">deev.space</a> ©</sub></p>
</div>