mirror of
https://github.com/EDeev/deev.space.git
synced 2026-06-15 19:11:09 +03:00
393 lines
20 KiB
Markdown
393 lines
20 KiB
Markdown
# 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>
|