Skip to content

Datanar - сервис по сокращению ссылок на базе Django и Bootstrap

License

Notifications You must be signed in to change notification settings

Gray-Advantage/Datanar-Django

Repository files navigation

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 - для помощи в генерации сокращённых ссылок

База данных

Функциональная структура базы данных следующая: scheme

Основных моделей три - Redirect, Click и BlockedDomain

  • Redirect - хранит в себе связь между длинным URL-адресом и короткой ссылкой
  • Click - хранит информацию о переходе по Redirect (для введения статистики)
  • BlockedDomain - регулярное выражение, описывающие URL-адреса, которые запрещены для сокращения

Контейнеры docker

Проект развёрнут с помощью технологии контейнеризации docker compose и имеет следующие контейнеры:

  • Postgres - мощная и современная СУБД, используется как основная БД проекта
  • Django - собственный контейнер на базе python 3.12 c исходным кодом проекта
  • Nginx-prod - модифицированная версия классического nginx контейнера, добавлен certbot для автоматического создания и продления SSL сертификатов для https соединения
  • Nginx-dev - обратный прокси-сервер, нужен для обслуживания статических запросов, применяется только во время разработки
  • Redis - быстрый сервер баз данных типа ключ-значение. Требуется для celery
  • Celery - контейнер, созданный на базе Django, но с изменённой командой запуска, является очередью задач для массового сокращения ссылок и динамического отслеживания за сроком годности перенаправлений

Развёртывание

Данная документация предлагает два основных способа запуска (развёртывания) приложения:

  • подразумевает загрузку всего необходимого ПО непосредственно на локальную машину, с последующей ручной установкой и настройкой каждого компонента. Долгий и трудный путь, зато вы имеете полный контроль над всем происходящим
  • подразумевает загрузку одной единственной программы Docker и её настройку, а дальше запуск всего приложения в полной комплектации с помощью одной команды. Быстрый и простой путь, большая часть вопросов уже решена, остальное дело техники

Авторы - эти прекрасные люди:

sergey Андреев Сергей (Github | Telegram)

vladimir Клименко Владимир (Github | Telegram)

artem Третьяков Артем (Github | Telegram)