Бессерверное выполнение кода бэкенда

Разработчики могут развертывать функции на JavaScript или TypeScript в ответ на события, инициированные функциями Firebase или HTTPS-запросами. Эта бессерверная модель устраняет необходимость в предоставлении или управлении серверами, обеспечивая более стройный процесс разработки.

Установка

Этот раздел поможет вам пройти процесс настройки. Если вам нужны более подробные объяснения каждого шага, обратитесь к официальной документации Firebase.

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

  1. Перейдите в консоль Firebase и нажмите Добавить проект.
  2. Если появится запрос, просмотрите и примите условия Firebase.
  3. Нажмите Продолжить.
  4. Решите, хотите ли вы делиться аналитикой или нет.
  5. Нажмите Создать проект.
  6. Включите Functions (необходим платный план)

Создание функции Firebase на локальной машине и загрузка на сервер Firebase

Для создания Functions используем терминал в macOC.

Чтобы написать функции и развернуть их в среде выполнения Firebase Functions, вам нужно настроить среду Node.js и установить Firebase CLI (Это инструмент командной строки, который позволяет взаимодействовать с Firebase из терминала).

Устанавливать Firebase CLI будем в локальную папку, поэтому первым делом создадим папку для проекта:

mkdir my-frb-project

Перейдем в созданную папку :

cd /Users/ХХХХХХХХ/my-frb-project

Инициализируем файл package.json :

npm init -y

Устанавливаем Firebase CLI. в папке проекта паявиться папка “node_modules”:

npm i firebase-tools -D

Проверяем версию Firebase CLI :

npx firebase-tools --version

Логинимся к своему аккаунту firebase : (может потребоватся разлогинится npx firebase-tools logout)

npx firebase-tools login  

Инициализируем Firebase CLI В процессе инициализации выбираем нужный проект firebase. При вопросе “Do you want to use ESLint to catch probable bugs and enforce style?” НУЖНО ответить “НЕТ” из-за “ESLint”  крашится загрузка функции на фарбейз

npx firebase init functions

Проект создан теперь переходим в VSCode для написания и тестирования функции

В vs-code открываем папку проекта (не файл а именно папку). Наш код будет располагаться в файле index.ts. (или index.js если выбрали js проект при создании).
Вместо системного терминала будем использовать терминал vs-code.

Переходим в папку “functions”

cd /Users/ХХХХХХХХ/my-frb-project/functions

В файле index.ts (или index.js если выбрали js ) пишем наш код.

в данном случае пишем функции Firebase (JavaScript), которая возвращает IP-адрес клиента (Unity-программы), отправляющего HTTP-запрос.

const functions = require("firebase-functions");

// Простая HTTP-функция
exports.getClientIp = functions.https.onRequest((req, res) => {
  // Получаем IP-адрес из заголовков или сокета
  const ip = req.headers['x-forwarded-for']?.split(',')[0] || req.connection.remoteAddress;

  console.log("Client IP:", ip);

  res.status(200).json({ ip });
});

Для теста, чтоб запустить Firebase Emulator Suite нужно выполнить команду из Firebase CLI

Только Eсли вы пишете на TS: чтоб упростить эту задачу нужно в файл functions/package.json добавить

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "lint": "eslint --ext .js,.ts .",                      // новое
    "build": "tsc",                                        // новое
    "build:watch": "tsc --watch",                          // новое 
    "serve": "firebase emulators:start --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "22"
  },
  "main": "index.js",
  "dependencies": {
    "firebase-admin": "^12.6.0",
    "firebase-functions": "^6.0.1"
  },
  "devDependencies": {
    "firebase-functions-test": "^3.1.0"
  },
  "private": true
}

Теперь можно перекомпилировать проект и запустить эмулятор командой:

npm run build:watch

Eсли вы пишете на JS: предыдущий пункт (перекомпилирование ) пропускаем

Открываем еще одно окно терминала:

npm run serve

Это запустит эмулятор и распечатает url адрес для  тестирования в терминале.

**********-macbook functions % npm run serve

> serve
> firebase emulators:start --only functions

i  emulators: Starting emulators: functions
⚠  functions: The following emulators are not running, calls to these services from the Functions emulator will affect production: apphosting, auth, firestore, database, hosting, pubsub, storage, dataconnect
i  functions: Watching "**********/functions" for Cloud Functions...
⚠  functions: Your requested "node" version "22" doesn't match your global version "20". Using node@20 from host.
Serving at port 8390

✔  functions: Loaded functions definitions from source: getClientIp.
✔  functions[us-central1-getClientIp]: http function initialized (http://127.0.0.1:5001/**********/us-central1/getClientIp).

┌─────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! It is now safe to connect your app. │
│ i  View Emulator UI at http://127.0.0.1:4000/               │
└─────────────────────────────────────────────────────────────┘

┌───────────┬────────────────┬─────────────────────────────────┐
│ Emulator  │ Host:Port      │ View in Emulator UI             │
├───────────┼────────────────┼─────────────────────────────────┤
│ Functions │ 127.0.0.1:5001 │ http://127.0.0.1:4000/functions │
└───────────┴────────────────┴─────────────────────────────────┘
  Emulator Hub host: 127.0.0.1 port: 4400
  Other reserved ports: 4500

Issues? Report them at https://github.com/firebase/firebase-tools/issues and attach the *-debug.log files.
 
i  functions: Beginning execution of "us-central1-getClientIp"
>  Client IP: undefined
i  functions: Finished "us-central1-getClientIp" in 8.162809ms

Запускаем полученный в браузере адрес  http://127.0.0.1:5001/**/us-central1/getClientIp  и видим выполнение функции.

Залить функцию на сарвер:

npm run deploy

Дополнительно:

https://grammy.dev/ru/hosting/firebase

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *