Настройка Remote Config для динамического управления параметрами сайта

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка Remote Config для динамического управления параметрами сайта
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Настройка Remote Config и динамических параметров

Remote Config позволяет изменять поведение приложения без деплоя: регулировать лимиты, тексты, пороговые значения, включать/выключать функции — через веб-интерфейс, в реальном времени.

Firebase Remote Config

npm install firebase
// lib/remoteConfig.ts
import { initializeApp } from 'firebase/app';
import { getRemoteConfig, fetchAndActivate, getValue } from 'firebase/remote-config';

const app = initializeApp({
  apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
  projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
  appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
});

const remoteConfig = getRemoteConfig(app);
remoteConfig.settings.minimumFetchIntervalMillis = 300_000; // 5 минут

// Дефолтные значения — работают до первого fetch
remoteConfig.defaultConfig = {
  maintenance_mode: false,
  max_upload_size_mb: 10,
  welcome_banner_text: 'Welcome!',
  new_dashboard_enabled: false,
  max_api_calls_per_minute: 60,
};

export async function initRemoteConfig() {
  await fetchAndActivate(remoteConfig);
}

export function getConfig<T>(key: string): T {
  const value = getValue(remoteConfig, key);
  // Автоматически определяем тип
  if (typeof remoteConfig.defaultConfig[key] === 'boolean') {
    return value.asBoolean() as T;
  }
  if (typeof remoteConfig.defaultConfig[key] === 'number') {
    return value.asNumber() as T;
  }
  return value.asString() as T;
}
// Использование в компонентах
'use client';
import { useEffect, useState } from 'react';
import { getConfig, initRemoteConfig } from '@/lib/remoteConfig';

export function UploadButton() {
  const [maxSize, setMaxSize] = useState(10);
  const [newDashboard, setNewDashboard] = useState(false);

  useEffect(() => {
    initRemoteConfig().then(() => {
      setMaxSize(getConfig<number>('max_upload_size_mb'));
      setNewDashboard(getConfig<boolean>('new_dashboard_enabled'));
    });
  }, []);

  return (
    <>
      <input type="file" accept={`*/*`} />
      <span>Максимум {maxSize} MB</span>
      {newDashboard && <NewDashboardBanner />}
    </>
  );
}

Self-hosted: LaunchDarkly альтернатива через Flagsmith

# Docker Compose
services:
  flagsmith:
    image: flagsmith/flagsmith:latest
    environment:
      DATABASE_URL: postgresql://flagsmith:secret@db/flagsmith
    ports:
      - "8000:8000"
// Flagsmith SDK
import Flagsmith from 'flagsmith-nodejs';

const flagsmith = new Flagsmith({
  environmentKey: process.env.FLAGSMITH_ENV_KEY!,
  enableLocalEvaluation: true, // кэш на сервере
  environmentRefreshIntervalSeconds: 60,
});

// Серверная сторона — с учётом пользователя
async function getConfig(userId: string, userPlan: string) {
  const flags = await flagsmith.getIdentityFlags(userId, {
    plan: userPlan,
    country: 'RU',
  });

  return {
    maxUploadSizeMb: flags.getFeatureValue('max_upload_size_mb', 10),
    betaFeatures: flags.isFeatureEnabled('beta_features'),
    apiRateLimit: flags.getFeatureValue('api_rate_limit', 100),
  };
}

Custom Remote Config через API

Для простых случаев — собственная реализация с кэшем:

// Хранение конфига в БД
// config table: key (varchar), value (jsonb), updated_at

// API endpoint
// GET /api/config → возвращает текущие параметры

// Server-side caching
import { unstable_cache } from 'next/cache';

const getRemoteConfig = unstable_cache(
  async () => {
    const configs = await db.config.findMany();
    return Object.fromEntries(configs.map(c => [c.key, c.value]));
  },
  ['remote-config'],
  { revalidate: 300 } // 5 минут
);

// Инвалидация кэша при обновлении
async function updateConfig(key: string, value: unknown) {
  await db.config.upsert({
    where: { key },
    create: { key, value },
    update: { value, updatedAt: new Date() },
  });

  // Инвалидируем кэш
  revalidateTag('remote-config');
}

Типичные параметры для Remote Config

interface AppConfig {
  // Feature flags
  newCheckoutEnabled: boolean;
  maintenanceMode: boolean;
  betaBannersEnabled: boolean;

  // Лимиты
  maxUploadSizeMb: number;
  apiRateLimitPerMinute: number;
  maxProjectsPerAccount: number;

  // Тексты и UI
  announcementBannerText: string;
  announcementBannerEnabled: boolean;
  supportEmail: string;

  // Бизнес-параметры
  trialDurationDays: number;
  freeStorageGb: number;
  minPasswordLength: number;
}

Conditional targeting — разные значения для разных пользователей:

  • Бета-пользователи получают newCheckoutEnabled: true
  • Pro-аккаунты — maxUploadSizeMb: 100 вместо 10
  • Администраторы — maintenanceMode не применяется

Настройка Firebase Remote Config или Flagsmith с интеграцией в приложение — 1–2 рабочих дня.