6.7 KiB
deev.space
Русский · English
Персональный сайт-портфолио Python-разработчика: проекты, блог, опыт и стек, оценки статей без регистрации. Исходный код сайта deev.space.
Статус: личный проект, активно развивается · работает на deev.space
Стек: Python 3.12 · Django 4.2 · SQLite · bleach · Yandex SmartCaptcha · gunicorn + nginx · Docker
Возможности
- Главная с карточкой-паспортом, стеком по категориям и блоком «В цифрах»
- Блог: категории, галереи, вложения, ссылки с автоматическим превью, комментарии с ответами
- Лайки и дизлайки без регистрации — по подписанной cookie, с лимитом оценок с одного IP
- Уникальные просмотры статей с фильтром ботов
- Проекты, достижения, опыт и образование — весь контент редактируется в админке
- Форма обратной связи с капчей и уведомлением владельцу в Telegram
sitemap.xml, человекопонятные адреса, свои страницы 404 и 500
Быстрый старт
git clone https://github.com/EDeev/deev.space.git && cd deev.space
cp .env.example .env # задайте DJANGO_SECRET_KEY
docker compose up -d
docker compose exec web python manage.py createsuperuser
Сайт откроется на http://localhost:8000, админка — на /admin/. Готовый образ:
docker pull ghcr.io/edeev/deev.space или docker pull git.deev.su/edeev/deev.space.
Установка без Docker
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # для разработки: DJANGO_DEBUG=True
python manage.py migrate
python manage.py populate_demo # демо-контент, по желанию
python manage.py createsuperuser
python manage.py runserver
Конфигурация
Все настройки — переменные окружения (полный список — .env.example):
| Переменная | Назначение |
|---|---|
DJANGO_SECRET_KEY |
секретный ключ Django, обязателен при DJANGO_DEBUG=False |
DJANGO_DEBUG |
режим отладки, по умолчанию False |
DJANGO_ALLOWED_HOSTS, DJANGO_CSRF_TRUSTED_ORIGINS |
домены сайта через запятую |
DJANGO_DB_PATH, DJANGO_MEDIA_ROOT |
где лежат база SQLite и загруженные файлы |
SMARTCAPTCHA_CLIENT_KEY, SMARTCAPTCHA_SERVER_KEY |
Yandex SmartCaptcha для формы обратной связи |
EMAIL_*, CONTACT_EMAIL |
отправка писем с формы обратной связи |
ALERTBOT_TOKEN, ALERTBOT_CHAT_ID |
уведомление владельцу в Telegram о новом сообщении |
SOCIAL_AUTOPOST, TELEGRAM_*, VK_* |
автопостинг новых статей, по умолчанию выключен |
Important
С
DJANGO_DEBUG=Falseсайт включает HSTS и редирект на HTTPS. Для запуска без TLS (локально или за прокси, который сам терминирует HTTPS) задайтеDJANGO_SECURE_SSL_REDIRECT=False.
Как выглядит
| О себе | Проекты |
|---|---|
![]() |
![]() |
| Блог | Мобильная версия |
![]() |
![]() |
Как устроено
flowchart LR
B[Браузер] --> N[nginx<br/>TLS, static, media]
N --> G[gunicorn]
G --> D[Django: main]
D --> S[(SQLite)]
D -.-> T[Telegram / AlertBot]
D -.-> C[Yandex SmartCaptcha]
Одно приложение main: модели контента, оценок и настроек сайта, классовые представления, JSON-API
для оценок и комментариев, middleware анонимного посетителя. Подробности:
- docs/architecture.md — модели, оценки без регистрации, антинакрутка, безопасность
- docs/deploy.md — запуск в Docker и как устроен боевой сервер
Развёртывание
deev.space работает на VPS: gunicorn под отдельным пользователем за nginx с
сертификатом Let's Encrypt, статика и загрузки отдаются nginx. Доступность и срок сертификата
отслеживает Prometheus. Docker-образ собирает GitHub Actions на каждый тег v* и публикует в GitHub
Packages и в реестр git.deev.su.
Разработка
pip install -r requirements-dev.txt
ruff check . && pytest
Тесты (pytest-django) запускаются в боевом режиме: голосование и антинакрутка, формы, экранирование, страницы и статика. CI выполняет то же самое на каждый push и pull request.
Лицензия
MIT — см. LICENSE.
Автор
Деев Егор Викторович — GitHub · Telegram · egor@deev.space
Сделано с ❤️ — deev.space




