Datanar - сайт по сокращению ссылок
Datanar представляет собой сервис для сокращения ссылок, который позволяет пользователям преобразовывать длинные URL-адреса в короткие и удобные для использования ссылки.
- Для визуальной привлекательности
- Для удобства передачи ссылки не по сети (в разговоре или в выводе на экран)
- Для отслеживания статистики переходов
- Для защиты конечного ресурса с помощью пароля
Это не новая идея и уже существуют множество сервисов с похожим функционалом, вот их небольшой срез:
Сервис | Регистрация | Кастомизация ссылки | QR-code | Статистика | Русский язык | Пароль | API |
---|---|---|---|---|---|---|---|
clck.ru | Нет (+) | Нет (-) | Да (+) | Нет (-) | Да (+) | Нет (-) | Да (+) |
goo.su | Нет (+) | Нет (-) | Да (+) | Да (+) | Да (+) | Нет (-) | Да (+) |
bitly.com | Да (-) | Да (+) | Да (+) | Да ($) | Нет (-) | Нет (-) | Да ($) |
Innkin.com | Да (-) | Да ($) | Нет (-) | Да ($) | Нет (-) | Да ($) | Да ($) |
rebrandly.com | Нет (+) | Да (+) | Да (+) | Да (+) | Нет (-) | Нет (-) | Да (+) |
tinyurl.com | Нет (+) | Да (+) | Да (+) | Да ($) | Нет (-) | Нет (-) | Да ($) |
urlog.ru | Нет (+) | Нет (-) | Нет (-) | Да (+) | Да (+) | Да (+) | Нет (-) |
(+) - функция есть; (-) - функции нет; ($) - функция платна
Но все они реализуют только часть функционала, цель же Datanar предоставить пользователю его весь и сразу!
С Datanar вы можете:
- Сократить ссылку
- Получить сразу сгенерированный QR-code
- Указать свой собственный короткий url-адрес
- Отслеживать статистику переходов по ссылке
- Выгружать статистику в удобном формате
- Установить пароль для сокращённой ссылки
- Указывать до какой даты будет работать ссылка
- Указывать сколько переходов можно совершить по ссылке
- Связать свой сервис с нашим по API
- Bootstrap - популярная (html / css / js) библиотека для фронтенда
- Celery - очередь задач (в качестве брокера сообщений выступает Redis)
- Chart.js - отрисовка диаграмм в статистике
- DB-IP - определение страны и города переходящего по IP
- Django - основной фреймворк web сервиса
- Docker - развёртывание сайта на удалённом сервере
- Segno - генерация QR-кодов
- Sqids - для помощи в генерации сокращённых ссылок
Функциональная структура базы данных следующая:
Основных моделей три - Redirect
, Click
и BlockedDomain
Redirect
- хранит в себе связь между длинным URL-адресом и короткой ссылкойClick
- хранит информацию о переходе поRedirect
(для введения статистики)BlockedDomain
- регулярное выражение, описывающие URL-адреса, которые запрещены для сокращения
Проект развёрнут с помощью технологии контейнеризации docker compose и имеет следующие контейнеры:
- Postgres - мощная и современная СУБД, используется как основная БД проекта
- Django - собственный контейнер на базе python 3.12 c исходным кодом проекта
- Nginx-prod - модифицированная версия классического nginx контейнера, добавлен certbot для автоматического создания и продления SSL сертификатов для https соединения
- Nginx-dev - обратный прокси-сервер, нужен для обслуживания статических запросов, применяется только во время разработки
- Redis - быстрый сервер баз данных типа ключ-значение. Требуется для celery
- Celery - контейнер, созданный на базе
Django
, но с изменённой командой запуска, является очередью задач для массового сокращения ссылок и динамического отслеживания за сроком годности перенаправлений
Данная документация предлагает два основных способа запуска (развёртывания) приложения:
- подразумевает загрузку всего необходимого ПО непосредственно на локальную машину, с последующей ручной установкой и настройкой каждого компонента. Долгий и трудный путь, зато вы имеете полный контроль над всем происходящим
- подразумевает загрузку одной единственной программы Docker и её настройку, а дальше запуск всего приложения в полной комплектации с помощью одной команды. Быстрый и простой путь, большая часть вопросов уже решена, остальное дело техники