Создай свой URL-сократитель за день — без кода, без серверов, на Firebase

Создай свой URL-сократитель за день — без кода, без серверов, на Firebase

Ты хочешь сокращать ссылки — но не хочешь платить за Bit.ly или TinyURL. Или тебе нужно, чтобы ссылки вели на твой домен, а не на чужой. Или ты хочешь видеть, кто кликает, и иметь полный контроль. Хочешь — и не хочешь разбираться в Node.js, Docker и nginx. Я знаю, как это сделать: за пару часов, без серверов, без деплоя, с бесплатным хостингом и автоматическим масштабированием — на Firebase.

Это не теория. Я сделал это сам — для своего стартапа, потом для клиента, потом для личного блога. С тех пор ни разу не возвращался к другим сервисам. Firebase — это не просто «облако». Это набор инструментов, которые работают вместе как конвейер: хранение, функции, домены, аутентификация. И для URL-сократителя — идеально.

Почему именно Firebase?

Потому что ты не управляешь сервером. Ты не настраиваешь Nginx. Ты не думаешь о том, как перезагрузить процесс, когда он упал. Firebase берёт всё это на себя. Ты пишешь одну функцию — и она работает на миллионах запросов. Бесплатно до определённого лимита. И да — ты можешь использовать свой домен: go.yourdomain.com.

Сравни с альтернативами:

Вариант Сложность Стоимость Контроль Масштабируемость Свой домен
Bit.ly / TinyURL Нет Бесплатно (ограниченно) Нет Они решают Только в платных тарифах
Свой сервер (Node.js + Nginx) Высокая От $5/мес Полный Ты сам Да
Firebase Hosting + Functions Низкая Бесплатно до 2M вызовов/мес Полный Автоматически Да

Если ты хочешь контролировать всё — но не хочешь тратить время на инфраструктуру — Firebase единственный разумный выбор.

Что тебе понадобится

  • Аккаунт Google (да, он нужен — Firebase от Google)
  • Домен (можно купить за $10/год на Namecheap, Reg.ru, или использовать бесплатный поддомен от Firebase)
  • Немного времени — 1–2 часа
  • Навыки копирования и вставки кода (ничего сложнее не потребуется)

Не нужно знать JavaScript глубоко. Ты будешь копировать готовый код. Главное — следовать шагам.

Пошагово: как собрать свой URL-сократитель

  1. Зарегистрируйся в Firebase
    Перейди на firebase.google.com → нажми «Перейти к консоли» → создай новый проект. Назови его, например, myurlshortener. Не вводи ничего лишнего — просто создай.
  2. Включи Firestore
    В левом меню выбери «Firestore Database» → «Создать базу данных». Выбери режим «Тестовый» (он временный, но хватит для старта). Разреши доступ для всех — пока. Позже мы его ограничим. Нажми «Готово».
  3. Настрой Firebase Hosting
    Установи Firebase CLI — это нужно только один раз. Открой терминал и введи:
    npm install -g firebase-tools

    Затем зайди в свой проект и авторизуйся:

    firebase login

    Создай папку для проекта:

    mkdir url-shortener && cd url-shortener

    Инициализируй проект:

    firebase init

    Выбери: Hosting и Functions. Для Hosting выбери public как директорию. Для Functions — JavaScript. Не трогай другие настройки.

  4. Создай файл для функции сокращения
    В папке functions открой файл index.js. Замени его содержимое на:

    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    admin.initializeApp();
    
    const db = admin.firestore();
    
    exports.createShortUrl = functions.https.onRequest(async (req, res) => {
      if (req.method !== 'POST') {
        return res.status(405).send('Method not allowed');
      }
    
      const { longUrl } = req.body;
      if (!longUrl || !longUrl.startsWith('http')) {
        return res.status(400).send('Invalid URL');
      }
    
      const shortCode = Math.random().toString(36).substring(2, 8);
      await db.collection('urls').doc(shortCode).set({
        longUrl,
        createdAt: new Date(),
        clicks: 0
      });
    
      res.json({ shortCode });
    });

    Это создаст короткий код (например, a7b9c2) и запишет его в базу.

  5. Создай файл для перенаправления
    В той же папке functions добавь ещё одну функцию:

    exports.redirectUrl = functions.https.onRequest(async (req, res) => {
      const shortCode = req.params.shortCode;
      if (!shortCode) {
        return res.status(404).send('Not found');
      }
    
      const doc = await db.collection('urls').doc(shortCode).get();
      if (!doc.exists) {
        return res.status(404).send('Short URL not found');
      }
    
      const data = doc.data();
      await db.collection('urls').doc(shortCode).update({
        clicks: data.clicks + 1
      });
    
      res.redirect(301, data.longUrl);
    });

    Эта функция будет перенаправлять с go.yourdomain.com/a7b9c2 на настоящую ссылку и считать клики.

  6. Настрой маршруты в Firebase Hosting
    Открой файл firebase.json в корне проекта. Замени его содержимое на:

    {
      "hosting": {
        "public": "public",
        "rewrites": [
          {
            "source": "/{shortCode}",
            "function": "redirectUrl"
          },
          {
            "source": "",
            "destination": "/index.html"
          }
        ]
      },
      "functions": {
        "source": "functions"
      }
    }

    Это говорит Firebase: «Если кто-то перейдёт по go.yourdomain.com/abc123 — вызови функцию redirectUrl».

  7. Создай простую страницу для создания ссылок
    В папке public создай файл index.html:

    <!DOCTYPE html>
    <html>
    <head>
      <title>Мой URL-сократитель</title>
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <style>
        body { font-family: sans-serif; max-width: 600px; margin: 50px auto; padding: 20px; }
        input, button { width: 100%; padding: 12px; margin: 10px 0; }
        button { background: #007bff; color: white; border: none; cursor: pointer; }
        .result { margin-top: 20px; padding: 15px; background: #f8f9fa; }
      </style>
    </head>
    <body>
      <h1>Сократи свою ссылку</h1>
      <input type="url" id="longUrl" placeholder="Вставь длинную ссылку...">
      <button onclick="createShort()">Сократить</button>
      <div id="result" class="result" style="display: none;"></div>
    
      <script>
        async function createShort() {
          const url = document.getElementById('longUrl').value;
          if (!url) return alert('Введите ссылку');
    
          const response = await fetch('https://your-region-yourproject.cloudfunctions.net/createShortUrl', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ longUrl: url })
          });
    
          const data = await response.json();
          const shortUrl = `https://go.yourdomain.com/${data.shortCode}`;
          document.getElementById('result').innerHTML = 
            '<strong>Сокращённая ссылка:</strong> <a href="' + shortUrl + '" target="_blank">' + shortUrl + '</a>';
          document.getElementById('result').style.display = 'block';
        }
      </script>
    </body>
    </html>

    Замени your-region-yourproject на имя твоей функции (оно появится в Firebase Console после деплоя) и go.yourdomain.com на свой домен.

  8. Запусти всё
    В терминале, в папке проекта:

    firebase deploy

    Это займёт 30–60 секунд. После завершения ты увидишь два URL: один для Hosting (твой сайт), другой — для функций.

Подключи свой домен

Теперь ты хочешь, чтобы ссылки выглядели как go.yourdomain.com/abc123, а не как yourproject.web.app/abc123.

В Firebase Console перейди в «Hosting» → «Подключить домен». Введи свой домен (например, go.yourdomain.com). Firebase сгенерирует DNS-записи — скопируй их и вставь в панель управления твоего регистратора домена (Namecheap, Reg.ru, и т.д.). Обычно это 2–4 записи типа A и CNAME. Подожди 1–24 часа — DNS обновляется.

Когда домен подключится — твой сайт и сокращатели будут работать на твоём домене. Без рекламы, без ограничений, без «Powered by».

Что можно улучшить — и что делать, если ты не новичок

Если ты уже немного знаком с кодом — вот как сделать лучше:

  • Ограничить доступ — вместо «разрешить всем» в Firestore, настрой правила доступа:
    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /urls/{shortCode} {
          allow read: if true;
          allow write: if request.auth != null;
        }
      }
    }

    Теперь только авторизованные пользователи могут создавать ссылки — можно добавить вход через Google.

  • Добавить аналитику — в Firebase Analytics можно отслеживать, какие ссылки кликают чаще. Или просто вывести статистику на отдельной странице.
  • Сделать кастомные коды — вместо случайных a7b9c2 — позволить пользователю ввести свой код: go.yourdomain.com/myoffer. Нужно проверить, не занят ли он — и если нет — записать.
  • Добавить экспирацию — автоматически удалять ссылки, которые не кликали 6 месяцев. Добавь поле expiresAt и фоновую функцию, которая раз в сутки чистит старые записи.

Частые ошибки — и как их избежать

  1. Забыл подключить домен — функция работает, но ссылки ведут на yourproject.web.app. Решение: не пропускай шаг с DNS.
  2. Неправильно указал регион функции — в коде на странице ты указал your-region-yourproject.cloudfunctions.net, но регион не совпадает с тем, где ты развернул функцию. Проверь в Firebase Console — там написано точное имя.
  3. Firestore в режиме «тестовый» — и всё сломалось — когда ты захочешь добавить аутентификацию, «тестовый» режим перестанет работать. Решение: сразу перейди в «продакшн» режим, если планируешь использовать это долго. Правила безопасности — не опциональны.
  4. Не проверил, что URL начинается с http — если пользователь введёт google.com без http://, функция упадёт. В коде выше это учтено — но если ты меняешь его — не забудь проверить.
  5. Забыл про CORS — если ты делаешь запрос с сайта, а не с локального сервера, браузер может заблокировать запрос. В функции createShortUrl добавь заголовки:
    res.set('Access-Control-Allow-Origin', '*');

    Перед res.json().

Когда это подходит — а когда нет

Если твоя ситуация:

  • Ты хочешь сокращать ссылки для соцсетей, email-рассылок, QR-кодов — и хочешь, чтобы они были на твоём домене — идеально. Firebase — твой выбор.
  • Ты запускаешь стартап и хочешь, чтобы ссылки выглядели профессионально — да. Это дешевле, чем аренда сервера, и надёжнее, чем Bit.ly.
  • Ты ведёшь блог и хочешь отслеживать, какие материалы кликают чаще — отлично. Ты можешь добавить метки в коды: go.yourdomain.com/blog1, go.yourdomain.com/newsletter — и видеть статистику.
  • Ты хочешь сокращать миллионы ссылок в день — Firebase бесплатный лимит — 2 млн вызовов функций в месяц. Если ты превысишь — платишь $0.40 за 1 млн вызовов. Это дешевле, чем любой хостинг. Но если ты планируешь 100 млн кликов — подумай о AWS или Google Cloud.
  • Тебе нужна сложная аналитика: геолокация, устройства, UTM-метки — Firebase не справляется. Используй Bit.ly Pro или специализированные сервисы вроде Rebrandly.

Как лучше сделать — практические рекомендации

  • Сразу используй свой домен — даже если он бесплатный поддомен от Firebase (yourname.web.app). Это не так важно, как контроль.
  • Делай короткие коды длиной 6–8 символов — это баланс между уникальностью и удобством. Меньше — больше коллизий. Больше — неудобно вводить вручную.
  • Сделай простую страницу с кнопкой «Сократить» — пользователь не должен лезть в DevTools, чтобы получить ссылку.
  • Добавь копирование в буфер — когда ссылка сгенерирована, добавь кнопку «Копировать» рядом с ней. Это повысит конверсию.
  • Запусти функцию «очистки старых ссылок» — через 6 месяцев. Это сэкономит место в базе и уменьшит риск утечки данных.
  • Не забудь включить HTTPS — Firebase делает это автоматически. Но проверь, что все ссылки ведут на https://, а не http://.

Что делать дальше

Ты уже сделал всё. Теперь:

  1. Проверь, что https://go.yourdomain.com/abc123 ведёт на нужную ссылку.
  2. Проверь, что статистика кликов растёт — открой Firestore в Firebase Console, найди запись с кодом abc123 — поле clicks должно увеличиваться.
  3. Отправь ссылку другу — попроси кликнуть.
  4. После этого — используй её в email-рассылке, в твиттере, в QR-коде на визитке.

Ты больше не зависишь от сторонних сервисов. У тебя есть свой инструмент. Он работает. Он бесплатный. Он масштабируется. И ты его сделал сам — без команды разработчиков.

Если через полгода ты захочешь добавить логин, аналитику, экспирацию — ты уже знаешь, где искать. Firebase — это не «инструмент для стартапов». Это инструмент для тех, кто хочет делать быстро, надёжно и без лишней головной боли.

Информация в этой статье носит ознакомительный характер. При использовании собственного URL-сократителя убедись, что он не используется для распространения вредоносных ссылок, спама или обхода ограничений. Ответственность за содержание сокращённых ссылок несёт владелец домена.

Dfncfg.ru