Image

Обзор Firebase 10.11.0: создание web-приложения за 2 часа

Обзор Firebase 10.11.0: создание web-приложения за 2 часа

Привет, Хабр! Сегодня поговорим о сервисе, который превращает 100 строк бэкенд-кода в 10 строк фронтенда. Для лучшего понимания работы Firebase мы напишем небольшое приложение: список покупок, который обновляется на всех устройствах мгновенно, данные сохраняются даже оффлайн. Это значит, что вам не нужно будет писать ни строчки серверного кода.

Прежде чем мы углубимся в технические детали, отмечу инструмент для тех, кто хочет выйти за рамки обычных веб-приложений — BotHub. Это агрегатор нейросетей, который добавляет AI-функциональность в ваши проекты. А при регистрации по этой ссылке вы получите 100 000 капсов для создания первых проектов!

Что такое Firebase 

Firebase – это облачный сервис для создания web и мобильных приложений. Предполагается, что он может послужить полноценным отделом бекэнд-разработки в облаке.

Концепция BaaS (Backend as a Service)

Firebase представляет собой полностью управляемую платформу Backend-as-a-Service (BaaS), построенную на бессерверной архитектуре (serverless computing).

Обзор Firebase 10.11.0: создание web-приложения за 2 часа

Принцип работы основан на декомпозиции традиционного бэкенда на независимые микро-сервисы, каждый из которых решает конкретную задачу через специализированные API. Аутентификация реализована как отдельный сервис идентификации, использующий протоколы OAuth 2.0 и OpenID Connect с поддержкой федеративных провайдеров.

Система мгновенных обновлений работает по паттерну наблюдения через постоянные подключения. Изменения передаются через облачную систему рассылки сообщений. Хостинговая инфраструктура построена на глобальной CDN-сети с автоматическим шифрованием соединений и кэшированием на ближайших к пользователю серверах, что обеспечивает минимальные задержки соединения.

Правила доступа обеспечивают проверку данных до выполнения запросов, поэтому необходимость в дополнительной проверке на стороне сервера отпадает. Вся платформа скрывает сложность инфраструктурных задач: автоматическое расширение мощностей, распределение нагрузки, обновление защиты и восстановление работы управляются автоматически через центральную систему управления на базе Google Cloud Platform.

Это позволяет разработчикам сосредоточиться на клиентской части, а платформа координирует работу распределенной системы мелких сервисов с гарантированной надежностью. Все технические аспекты от выделения ресурсов до наблюдения за работой и технического обслуживания. Всеми этими процессами разработчик может управлять через простые настройки на сайте сервиса.

Архитектура приложения

Давайте не будем затягивать и перейдём к созданию нашего приложения. Оно простое, но именно такой пример и требуется лучшего понимания настройки сервиса.

Настройка проекта в Firebase Console

Заходим на официальный сайт и проходим регистрацию через Google аккаунт.

          После аутентификации, вы должны увидеть перед собой следующую страницу.

Обзор Firebase 10.11.0: создание web-приложения за 2 часа

Нажимаем на кнопку Go to console.

Обзор Firebase 10.11.0: создание web-приложения за 2 часа

Выбираем Get started.

Далее вам нужно придумать имя для проекта. Приложение для списка можно назвать «shopping», или, например, «shopping-list».

Для лучшей скорости на территории СНГ рекомендую выбрать регион europe-west1. При настройке аналитики соглашаемся со всеми пунктами. Ждем 1-2 минуты пока проект создается

     После создания проекта вы увидите следующую страницу:

Обзор Firebase 10.11.0: создание web-приложения за 2 часа

По желанию можете закрыть или оставить блок с Gemini.

Что происходит за кулисами создания проекта:

  • Google выделяет вам виртуальный сервер

  • Настраивает глобальный CDN (Content Delivery Network)

  • Подготавливает базы данных

 Регистрация приложения

Теперь, нажмите на значок настройки рядом с Project Overview -> Project Settings, мотаем вниз и нажимаем значок </> (Web).

Обзор Firebase 10.11.0: создание web-приложения за 2 часа

Регистрируем название приложения, например, «shopping-list-web».

Не ставим галочку «Хостинг» (подключим позже). На этапе Add Firebase SDK

Выбираем Use a <script> tag.

Скопируйте конфигурационный объект, который появился в результате регистрации приложения.

Теперь снова заходим в Project Settings и в поле SDK Setup and Configuration переключаем на Config. Копируем конфигурационный объект.

Он должен выглядеть примерно так:

// For Firebase JS SDK v7.20.0 and later, measurementId is optional const firebaseConfig = { apiKey: «AIzaSyBki4B-0uhAnmX5ZPYmiboULwogJfhIRpA», authDomain: «mymymy-26516.firebaseapp.com», projectId: «mymymy-26516», storageBucket: «mymymy-26516.firebasestorage.app», messagingSenderId: «816267756949», appId: «1:816267756949:web:f1d4858f7a8106b3c4a29c», measurementId: «G-V56F60X4XS» };

Смысл в том, что каждое приложение (iOS, Android, Web) получает уникальный ID для обеспечения безопасности.

Активируем сервис Authentication с методом входа по email/пароль

В левом меню консоли выбираем: Build → Authentication. Щёлкаем по вкладке Sign-in method. Включаем Email/Password и сохраняем. Теперь в меню Project shortcuts появится вкладка Authentication.

Обзор Firebase 10.11.0: создание web-приложения за 2 часа

Real-time база данных: Как список синхронизируется сам

Cloud Firestore работает по принципу постоянного подключения между клиентом и облаком. Когда пользователь открывает приложение, устанавливается WebSocket-соединение, которое остается активным все время работы.

Что будет происходить при добавлении товара:

Пользователь вводит «Молоко» → данные отправляются в Firestore → облако рассылает обновление всем устройствам пользователя → список автоматически обновляется на телефоне, планшете и компьютере без перезагрузки.

  • Особенности реализации и преимущества данного метода состоят в том, что Соединение автоматически восстанавливается при обрыве

  • Локальный кэш обеспечивает работу без интернета

  • Автоматическое разрешение конфликтов при одновременном редактировании

Это отличается от традиционных REST API, где нужно постоянно опрашивать сервер на наличие изменений. Firestore сам «толкает» изменения клиентам, обеспечивая истинную синхронизацию в реальном времени. Фильтрация данных в базе данных будет производиться по id текущего пользователя.

Итак, по уже знакомому нам алгоритму, создаём базу данных для наших пользователей.

Build → Firestore Database -> Create database

Нажимаем Start in test mode (для разработки).

Обзор Firebase 10.11.0: создание web-приложения за 2 часа

Выбираем регион europe-west1 и ждем создания (1-2 минуты).

Быстрая проверка

Теперь мы можем проверить работу нашего web-приложения.

Создайте файл HTML на компьютере. Например test.html. Если вы владеете HTML то можете самостоятельно расписать его, для остальных я предлагаю вот такой шаблон, просто вставьте свой конфигурационный объект, который мы копировали ранее в настройках:

Скрытый текст<!DOCTYPE html> <html> <head> <title>Умный список покупок</title> <script type=»module»> // Импортируем нужные модули Firebase import { initializeApp } from «https://www.gstatic.com/firebasejs/10.12.0/firebase-app.js»; import { getAuth, createUserWithEmailAndPassword, signInWithEmailAndPassword, signOut, onAuthStateChanged } from «https://www.gstatic.com/firebasejs/10.12.0/firebase-auth.js»; import { getFirestore, collection, addDoc, query, where, orderBy, onSnapshot } from «https://www.gstatic.com/firebasejs/10.12.0/firebase-firestore.js»; // ВАШ firebaseConfig const firebaseConfig = { apiKey: «AIzaSyC5YF0PVuFaADucXXkpuMJexABXgf8v0AU», authDomain: «shoping-de115.firebaseapp.com», projectId: «shoping-de115», storageBucket: «shoping-de115.firebasestorage.app», messagingSenderId: «861754687557», appId: «1:861754687557:web:c0608c8b43bda654d3632c», measurementId: «G-J9BFS0PM58» }; // Инициализация Firebase const app = initializeApp(firebaseConfig); const auth = getAuth(app); const db = getFirestore(app); // Делаем глобальными для использования в функциях window.fbauth = auth; window.fbdb = db; window.fbauthFunctions = { createUserWithEmailAndPassword, signInWithEmailAndPassword, signOut, onAuthStateChanged }; window.fbfirestoreFunctions = { collection, addDoc, query, where, orderBy, onSnapshot }; console.log(«✅ Firebase готов к работе!»); </script> <style> body { font-family: Arial, sans-serif; max-width: 600px; margin: 40px auto; padding: 20px; background: #f5f5f5; } .container { background: white; padding: 30px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); } h1 { color: #4285f4; text-align: center; } input { width: 100%; padding: 12px; margin: 8px 0; border: 1px solid #ddd; border-radius: 5px; box-sizing: border-box; } button { background: #4285f4; color: white; border: none; padding: 12px 20px; margin: 5px; border-radius: 5px; cursor: pointer; } button:hover { background: #3367d6; } .section { margin: 25px 0; padding: 20px; border: 2px solid #e0e0e0; border-radius: 8px; } #items-list { list-style: none; padding: 0; } #items-list li { background: #f8f9fa; padding: 10px; margin: 5px 0; border-radius: 5px; border-left: 4px solid #4285f4; } .hidden { display: none; } </style> </head> <body> <div class=»container»> <h1>🛒 Умный список покупок</h1> <div class=»section» id=»auth-section»> <h3>Вход / Регистрация</h3> <input type=»email» id=»email» placeholder=»Ваш email»> <input type=»password» id=»password» placeholder=»Пароль»> <button onclick=»signUp()»>Создать аккаунт</button> <button onclick=»signIn()»>Войти</button> </div> <div class=»section hidden» id=»app-section»> <h3>Добро пожаловать, <span id=»user-email»></span>! </h3> <div style=»display: flex; gap: 10px;»> <input type=»text» id=»item-input» placeholder=»Что нужно купить?» style=»flex: 1;»> <button onclick=»addItem()»>Добавить</button> </div> <h4>Мой список:</h4> <ul id=»items-list»></ul> <button onclick=»signOut()» style=»background: #ea4335;»>Выйти</button> </div> </div> <script> // Функции для работы с приложением async function signUp() { const email = document.getElementById(’email’).value; const password = document.getElementById(‘password’).value; try { await window.fbauthFunctions.createUserWithEmailAndPassword(window.fbauth, email, password); alert(‘ Аккаунт создан! Теперь вы можете войти.’); } catch (error) { alert(‘❌ Ошибка: ‘ + error.message); } } async function signIn() { const email = document.getElementById(’email’).value; const password = document.getElementById(‘password’).value; try { await window.fbauthFunctions.signInWithEmailAndPassword(window.fbauth, email, password); } catch (error) { alert(‘❌ Ошибка входа: ‘ + error.message); } } async function signOut() { try { await window.fbauthFunctions.signOut(window.fbauth); } catch (error) { console.error(‘Ошибка выхода:’, error); } } async function addItem() { const itemInput = document.getElementById(‘item-input’); const item = itemInput.value.trim(); const user = window.fbauth.currentUser; if (item && user) { try { await window.fbfirestoreFunctions.addDoc( window.fbfirestoreFunctions.collection(window.fbdb, ‘shoppingItems’), { text: item, userId: user.uid, createdAt: new Date(), completed: false } ); itemInput.value = »; itemInput.focus(); } catch (error) { alert(‘❌ Ошибка добавления: ‘ + error.message); } } else if (!item) { alert(‘ Введите название товара!’); } } // Отслеживание состояния аутентификации window.fbauthFunctions.onAuthStateChanged(window.fbauth, (user) => { const authSection = document.getElementById(‘auth-section’); const appSection = document.getElementById(‘app-section’); if (user) { authSection.classList.add(‘hidden’); appSection.classList.remove(‘hidden’); document.getElementById(‘user-email’).textContent = user.email; loadItems(user); } else { authSection.classList.remove(‘hidden’); appSection.classList.add(‘hidden’); document.getElementById(’email’).value = »; document.getElementById(‘password’).value = »; } }); // Загрузка items из базы данных function loadItems(user) { const itemsList = document.getElementById(‘items-list’); const q = window.fbfirestoreFunctions.query( window.fbfirestoreFunctions.collection(window.fbdb, ‘shoppingItems’), window.fbfirestoreFunctions.where(‘userId’, ‘==’, user.uid), window.fbfirestoreFunctions.orderBy(‘createdAt’, ‘desc’) ); window.fbfirestoreFunctions.onSnapshot(q, (snapshot) => { itemsList.innerHTML = »; snapshot.forEach((doc) => { const item = doc.data(); const li = document.createElement(‘li’); li.textContent = item.text; itemsList.appendChild(li); }); if (snapshot.empty) { const li = document.createElement(‘li’); li.textContent = ‘Список покупок пуст. Добавьте первый товар!’; li.style.color = ‘#666’; li.style.fontStyle = ‘italic’; itemsList.appendChild(li); } }); } // Быстрый ввод по Enter document.getElementById(‘password’).addEventListener(‘keypress’, function(e) { if (e.key === ‘Enter’) signIn(); }); document.getElementById(‘item-input’).addEventListener(‘keypress’, function(e) { if (e.key === ‘Enter’) addItem(); }); </script> </body> </html> Сохраняем файл. Готово. Теперь тестируйте. Если всё работает, мы можем переходить к следующему этапу.

Сохраняем файл. Готово. Теперь тестируйте. Если всё работает, мы можем переходить к следующему этапу.

Хостинг и производительность

Firebase Hosting решает ключевую задачу: как превратить код на вашем компьютере в приложение, доступное пользователям по всему миру. Это не просто классический веб-хостинг, а интегрированная платформа развертывания со встроенным CDN.

Для начала нам потребуется установить Node.js. Заходим на официальный сайт. Скачайте LTS версию (левая зеленая кнопка). Файл будет называться: node-v20.x.x-x64.msi

Запустите скачанный файл и установите, нажимайте «Next» везде. Галочку «Automatically install tools» — НЕ СТАВИТЬ!

Обязательно перезагрузите компьютер

Проверим установку:

Откройте командную строку (Win + R)

Введите: node –version, вы увидите — v20.x.x

Введите: npm –version, должно быть — 10.x.x

Развёртывание приложения

Теперь, после подготовке файлов, наконец, приступим к процессу развёртывания.

Установка Firebase CLI на компьютер

Итак, после установки Node.js введите в терминале команды по очереди:

npm install -g firebase-tools

Подождите пока всё установится — увидите много текста и в конце: added XX packages.

Логин в Firebase

# В той же командной строке: firebase login

Откроется браузер:

  1. Выберите ваш Google аккаунт

  2. Разрешите доступ Firebase CLI

  3. Вернитесь в командную строку

  4. Увидите ✔ Success! Logged in as your-email@gmail.com

Создание папки проекта

# Перейдите в папку проектов (например, Рабочий стол) cd Desktop # Создайте папку для проекта mkdir shopping-app cd shopping-app

Сохраните ваш HTML файл

  1. Создайте файл index.html в папке shopping-app

  2. Скопируйте весь ваш рабочий код в этот файл

  3. Сохраните

Инициализация Firebase Hosting

# В командной строке (вы должны быть в папке shopping-app):

firebase init hosting

Отвечайте на вопросы:

? What do you want to use as your public directory? public

? Configure as a single-page app (rewrite all urls to /index.html)? Yes

? Set up automatic builds and deploys with GitHub? No

Переместите файл

# Переместите ваш index.html в папку public

move index.html public/# для Windows

# или

mv index.html public/    # для Mac/Linux

Деплой!

Вводим

firebase deploy

Вы увидите что-то вроде: ✔ Deploy complete!

Внизу вывода будут две ссылки, одна – на сайт приложения, другая – на Firebase Console.

Обзор Firebase 10.11.0: создание web-приложения за 2 часа

Проверка

Откройте в браузере: https://ваш-проект.web.app Ваше приложение должно работать!

Вы можете посмотреть работу моего списка в видео или перейти по ссылке и испробовать его самостоятельно.

Что происходит при развёртывании приложения

Ваши файлы автоматически копируются на edge-серверы в 190+ странах, бесплатные HTTPS сертификаты выпускаются и обновляются автоматически, статический контент кэшируется на периферийных серверах для уменьшения задержек, а каждое развертывание создает новую версию с возможностью отката.

Пользователи загружают приложение с ближайшего к ним сервера, автоматическое масштабирование под нагрузку, предоставляется защита от DDoS-атак, ну и единая консоль для управления хостингом не может не радовать.

Таким образом, любой пользователь из любой точки мира может открыть эту ссылку, зарегистрироваться и начать использовать приложение. При этом вы продолжаете работать с локальными файлами на своем компьютере, а процесс обновления сводится к повторному выполнению команды развертывания.

В традиционной разработке вам пришлось бы настраивать сервер, устанавливать веб-сервер (nginx/Apache), настраивать SSL, мониторить доступность. Firebase Hosting предоставляет все это как готовую услугу — вы просто загружаете файлы.

Заключение

Firebase — это фундаментальное изменение подхода к созданию приложений. Мы прошли путь от идеи до работающего production-приложения за несколько часов, а не месяцев. Наш простейший список покупок — работающее доказательство, что современная разработка может быть быстрой, экономичной и масштабируемой.

Мы разобрали принципиально новый подход — когда вместо построения инфраструктуры с нуля вы собираете готовые компоненты как конструктор. Но это лишь верхушка айсберга возможностей, которые открываются при использовании облачных BaaS-решений.

Делитесь своими мнениями и начинаниями в комментариях!

Источник: habr.com

Image Not Found
Трое людей используют смартфоны на складе, один в жилете, все с беспроводными наушниками.

Компания DeepL, известная своими функциями перевода текста, теперь хочет переводить и ваш голос.

Источник изображения: DeepL Компания DeepL, специализирующаяся на переводе и известная своими текстовыми инструментами, сегодня выпустила…

Апр 16, 2026
ideipro logotyp

Лучшая камера GoPro (2026): компактная, бюджетная, аксессуары

Вы — герой боевиков, и вам нужна соответствующая камера. Мы поможем вам разобраться во всех моделях, дадим рекомендации по аксессуарам и…

Апр 16, 2026
Родео: ковбой на скачущей лошади в загоне, стильная обработка изображения.

Почему мнения об ИИ так разделились

Стефани Арнетт/MIT Technology Review | Getty Images Эта статья первоначально появилась в The Algorithm, нашей еженедельной рассылке об…

Апр 16, 2026
ideipro logotyp

Вложенное древовидное пространство: геометрическая основа для кофилогении

arXiv:2604.05056v2 Тип объявления: replace-cross Аннотация: Вложенные (или согласованные) филогенетические деревья моделируют…

Апр 16, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых

ИдеиPRO