yii2_links_shorterer
Описание
Языки
- PHP88,9%
- JavaScript7,2%
- Dockerfile2,1%
- Shell1,6%
- CSS0,2%
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
README.md
Сервис коротких ссылок с QR-кодами
Веб-приложение для создания коротких ссылок с генерацией QR-кодов на базе Yii2 Framework.
Технологический стек
- Yii2 — PHP-фреймворк
- MySQL/MariaDB — база данных
- jQuery — JavaScript для Ajax-запросов
- Tailwind CSS — стилизация (CDN)
- Docker — контейнеризация
- Nginx — веб-сервер
- PHP 8.1 — язык программирования
Функциональность
- Валидация URL (http/https и атрибуты)
- Проверка доступности ресурса
- Генерация коротких ссылок
- Генерация QR-кодов (без внешних API, библиотека endroid/qr-code)
- Обработка через Ajax без перезагрузки страницы
- Редирект по коротким ссылкам
- Логирование переходов: внешний IP, User-Agent, Referer
- Счётчик переходов по каждой ссылке
- Мини админ-панель: список ссылок, счётчик переходов, просмотр логов по IP
Структура базы данных
Таблица links
links
| Поле | Описание |
|---|---|
| id | Первичный ключ |
| original_url | Оригинальный URL |
| short_code | Короткий код (8 символов) |
| created_at | Дата создания |
| click_count | Количество переходов |
Таблица link_logs
link_logs
| Поле | Описание |
|---|---|
| id | Первичный ключ |
| link_id | Внешний ключ на links |
| ip_address | Внешний IP пользователя |
| user_agent | User-Agent браузера |
| referer | Referer заголовок |
| created_at | Дата и время перехода |
Требования
- Docker и Docker Compose
- Git (для клонирования)
Установка и запуск
0. Предварительные требования
Убедитесь, что Docker Desktop запущен:
При ошибке подключения запустите Docker Desktop и дождитесь полной загрузки.
1. Клонирование и переход в проект
2. Запуск контейнеров
Проверьте, что запущены оба контейнера: (должны быть docker ps и yii2_shortener_web). Если веб-контейнер отсутствует — см. Решение проблем.yii2_shortener_db
3. Установка зависимостей Composer
4. Миграции
При запросе подтверждения введите .yes
5. Права доступа (при необходимости)
6. Доступ
- Главная: http://localhost:8080
- Админ-панель: http://localhost:8080/admin
Использование
- На главной введите URL и нажмите «OK».
- После проверки валидности и доступности отображаются QR-код и короткая ссылка.
- Переход по короткой ссылке выполняет редирект на исходный URL, в БД пишется лог (IP, User-Agent, referer) и увеличивается счётчик.
Админ-панель
- Ссылка на главной: кнопка «Админ-панель» в правом верхнем углу.
- Прямой адрес: http://localhost:8080/admin
Возможности:
- Список всех ссылок: короткий код, оригинальный URL, счётчик переходов, дата создания.
- Для каждой ссылки — переход в логи по IP: внешний IP, дата/время, User-Agent, Referer.
Примеры URL для тестирования
- https://www.google.com
- https://github.com
- http://example.com
Структура проекта
yii2_shorterer_links/
├── assets/ # PHP-классы ассетов (AppAsset)
├── config/ # Конфигурация
│ ├── db.php
│ ├── web.php
│ ├── console.php
│ └── params.php
├── controllers/
│ ├── SiteController.php # Главная, создание коротких ссылок
│ ├── RedirectController.php # Редирект по коду, логирование
│ └── AdminController.php # Админ-панель: ссылки и логи по IP
├── models/
│ ├── Link.php
│ └── LinkLog.php
├── migrations/
├── views/
│ ├── site/
│ │ └── index.php # Главная страница
│ └── admin/
│ ├── index.php # Список ссылок
│ └── logs.php # Логи переходов по одной ссылке
├── web/
│ ├── css/
│ ├── js/
│ └── index.php
├── docker/
│ ├── nginx.conf
│ └── entrypoint.sh
├── docker-compose.yml
├── Dockerfile
└── composer.json
Маршруты и API
| Маршрут | Описание |
|---|---|
| GET / | Главная страница |
| POST /site/create-short-link | Создание короткой ссылки и QR (Ajax) |
| GET /admin | Админ-панель — список ссылок |
| GET /admin/logs/{id} | Логи переходов по ссылке (IP, счётчик) |
| GET /{code} | Редирект по короткой ссылке (логирование + счётчик) |
POST /site/create-short-link
Параметры: (string), url_csrf
Успех:
Ошибка:
Остановка и удаление
Разработка
Логи
Настройка БД
Файл :config/db.php
Соответствует переменным окружения в .docker-compose.yml
Решение проблем
Подробнее в TROUBLESHOOTING.md.
- Веб-контейнер не запущен — пересборка и запуск, при необходимости просмотр логов и установка зависимостей вручную.
- Ошибка прав доступа —
внутри контейнера.chmod -R 777 runtime web/assets - Ошибка «parent snapshot does not exist» —
, затемdocker builder prune -f.docker-compose build --no-cache
Лицензия
Проект создан в рамках тестового задания.