Руководство по установке#

Модуль «Инициативное бюджетирование» – информационная система, которая позволяет органам государственной власти и местного самоуправления проводить конкурсный отбор инициативных проектов жителей по улучшению качества жизни и созданию комфортной городской среды.

Подготовка серверов#

Настройте виртуальную машину (выделенный хост):

  • Операционная система на базе Ubuntu v. 9+ или Debian v. 8+;

  • Nginx;

  • MinIO;

  • Docker (v. 20+), Docker-compose (v. 2.5+);

  • Node;

  • Git;

  • Postman или Insomnia (инструмент для работы с API);

  • MC (установка по желанию).

Используемые порты (должны быть открыты для внешнего доступа):

  • 443 – порт для обмена шифрованными данными (https);

  • 22 – порт подключения по SSH для необходимых работ на хосте;

  • 587 – порт для пересылки почты.

Создайте директории хоста:

  • /home/{pppuser}/ppp – директория используется для выкачки последней версии кода (backend + frontend), настроек и других конфигурационных файлов сервера из репозиториев gitlab (pppuser – пользователь текущей системы, может быть другим);

  • /home/{pppuser}/ppp/ppp-backend – директория (git clone) репозитория кода backend;

  • /opt/ppp – директория проекта;

  • /opt/ppp/ppp-back – директория сервера backend проекта;

  • /opt/ppp/front – директория frontend проекта (скомпилированный frontend + разная статика для frontend);

  • /opt/ppp/postfix – директория для хранения данных проксирующего postfix;

  • /opt/ppp/postgresql – директория базы данных backend;

  • /mnt/data – директория базы данных MinIO (объектное хранилище данных).

Установка#

Чтобы установить модуль, получите артефакты:

  • dist(front).zip;

  • source-platform.tar.xz.

Настройка Nginx#

  1. Возьмите файл nginx.conf, настроенный для информационной системы, из папки source-platform/nginx.

  2. В файле обновите пути до SSL-сертификатов.

  3. Измените названия для всех директив server_name на актуальные.

  4. Получите сертификат для использования https-протокола на развертываемом сервере с помощью сервиса let’s encrypt/certbot. Настройка осуществляется в соответствии с документацией Let’s Encrypt на официальных сайтах с учетом используемой операционной системы.

Настройка frontend части#

  1. Скопируйте все содержимое папки dist в папку frontend.

../../../_images/proactive_deploy.png
  1. Измените файл favicon.svg на свой (формат .svg, картинка вкладки).

  2. Измените файл Logo.png на свой (формат .png, лого в хедере).

  3. В файле index.html обновите название вкладки сайта.

../../../_images/proactive_deploy2.png
  1. В файле manifest.json обновите название на актуальное.

../../../_images/proactive_deploy3.png
  1. Укажите следующие переменные в файле config.json:

Название переменной

Значение по умолчанию

Описание переменной

VITE_API_URL

/api

Путь до БД

VITE_SEVEN_BITS_URL

https://7bits.ru/

VITE_PORTAL_URL

https://omskportal.ru/

Ссылка на портал

VITE_ADMIN_URL

/admin

Путь до администратора панели

VITE_MINFIN_PHONE_NUMBER

8 (3812) 35-77-00

VITE_MINFIN_ADRESS

644043, Омск, ул. Орджоникидзе, д. 5

VITE_MINFIN_SUPPORT_EMAIL

post@minfin.omskportal.ru

Настройка backend части#

  1. Распакуйте архив source-platform.tar.xz в директорию backend папки приложения на хосте.

  2. Укажите следующие переменные для minio, postgresql и postfix:

    2.1. В файле .db_env:

    • POSTGRES_PASSWORD – переменная для пароля (сгенерируйте и установите самостоятельно).

    2.2. В файле .minio_env:

    • MINIO_ROOT_PASSWORD – пароль для доступа через браузерную консоль и для интеграции через API (сгенерируйте и установите самостоятельно);

    • SERVER_ENDPOINT – домен, по которому можно получить доступ к MinIo. Обратите внимание, что этот домен не должен содержать домен к браузерной консоли!

    2.3. В файле .postfix_env:

    • RELAYHOST – хост вашего почтового сервера в формате <host>:<port>;

    • RELAYHOST_USERNAME – переменная устанавливается при необходимости;

    • RELAYHOST_PASSWORD – переменная устанавливается при необходимости.

  3. Настройте файл .env:

    3.1. Установите в переменную CONNECTION_OPTIONS_DB_PASSWORD пароль, сгенерированный для переменной POSTGRES_PASSWORD.

    3.2. Установите в переменные ACCESS_ISSUER и REFRESH_ISSUER информацию о том, кто подписывает токены в приложении, например issuer@example.ru.

    3.3. Сгенерируйте надежный пароль и установите его в переменные ACCESS_KEYSTORE_PASSWORD и REFRESH_KEYSTORE_PASSWORD. Пароль используется для генерации сертификатов подписи токенов.

    3.4. Установите домен информационной системы в переменные:

    • ACCESS_DOMAIN

    • LOGOUT_DOMAIN

    • PASSWORD_RECOVERY_SIGN_UP_URL_HOST

    • PASSWORD_RECOVERY_URL_HOST

    • REFRESH_DOMAIN

    • SIGN_UP_CONFIRMATION_URL_HOST

    • SIGN_UP_RESET_URL_HOST

    • PROJECT_SPECIALIST_EMAIL_HOST

    • PROJECT_PROFILE_EMAIL_HOST

    • PROJECT_SOCIAL_PREVIEW_HOST

    • SPECIFIC_URL_BUILDER_HOST

    3.5. Установите почту, по которой можно связаться с технической поддержкой, в формате mailto:<email> в переменные:

    • PASSWORD_RECOVERY_SIGN_UP_URL_CONTACT

    • PASSWORD_RECOVERY_URL_CONTACT

    • SIGN_UP_CONFIRMATION_URL_CONTACT

    • SIGN_UP_RESET_URL_CONTACT

    • PROJECT_SPECIALIST_EMAIL_CONTACT

    • PROJECT_PROFILE_EMAIL_CONTACT

    • SPECIFIC_URL_BUILDER_CONTACT

    3.6. Установите в переменную EMAIL_SENDER_AUTHOR_EMAIL_FROM информацию о том, от кого будут отправляться письма с информационной системы, например <noreply@example.ru>. Обязательно укажите информацию внутри одинарных кавычек!

    3.7. Установите в переменные EMAIL_SENDER_OPTIONS_MAIL_TRANSPORT_PROTOCOL и SEND_EMAIL_ACTOR_OPTIONS_MAIL_TRANSPORT_PROTOCOL протокол передачи электронной почты, например smtp.

    3.8. Установите в переменные EMAIL_SENDER_OPTIONS_MAIL_SMTP_PORT и SEND_EMAIL_ACTOR_OPTIONS_MAIL_SMTP_PORT порт почтового сервера.

    3.9. Установите в переменную MINIO_CLIENT_ENDPOINT URL-адрес для MinIO, например https://minio-example.ru.

    3.10. Установите в переменную MINIO_CLIENT_SECRET_KEY пароль, сгенерированный для переменной MINIO_ROOT_PASSWORD.

    3.11. Установите в переменную TECH_SUPPORT_MANAGER_CONTACT почту, на которую будут приходить письма с вопросами об информационной системе. Важно указать почту без префикса mailto:.

  4. Настройте файлы с шаблонами писем.

    • В файле templates/email_templates.json через глобальный поиск найдите все места, где используется строка https://example.ru и замените на актуальный домен информационной системы. При замене в конце вводимого url слеш (/) не нужен.

    • Если необходимо поменять текст письма или название информационной системы в письме, это делается аналогично через глобальный поиск в файле templates/email_templates.json.

  5. Используйте команду для запуска контейнеров minio, postgresql и postfix:

docker compose up -d postgresql minio postfix
  1. Настройте MinIO.

    6.1. Откройте браузерную консоль.

    6.2. Создайте бакеты, нажав кнопку Create Bucket +.

    6.3. Введите имя бакета (остальные параметры по умолчанию), должно быть создано 9 бакетов:

    • ppp-frontpage-projects

    • ppp-images

    • ppp-instructions

    • ppp-participants

    • ppp-payment-documents

    • ppp-payment-statistics-files

    • ppp-privacy-policy

    • ppp-request-documents

    • ppp-tech-support

    6.4. В папке Примеры файлов, хранимые в MinIO лежат все необходимые файлы, которые нужно положить в созданные бакеты. Расположите файлы согласно списку ниже, остальные бакеты оставьте пустыми.

    • в бакет ppp-frontpage-projects положите файл ppp-frontpage-projects.json.

    • в бакет ppp-instructions добавьте файлы:

      • для инструкций:

        • admin-general-instructions.json;

        • admin-instructions.json;

        • anonymous-instructions.json;

        • user-instructions.json;

        • municipal-admin-instructions.json;

        • municipal-rejected-instructions.json;

        • municipal-unconfirmed-instructions.json;

        • все картинки и гифки: screen1.png, screen1.1.png и другие;

      • для шаблонов в конкурсы:

        • municipal-form.docx – это типовая форма с описанием проекта для подачи инициативных проектов на этапе «Оформление проектов»;

        • request-template.docx – это шаблон, по которому муниципальные администраторы смогут составлять заявки на региональный отбор;

    • в бакет ppp-privacy-policy добавьте файлы:

      • platform-strategy.pdf – стратегия информационной системы (оставьте стандартный, если стратегии нет);

      • ppp-privacy-policy.pdf – политика конфиденциальности.

  2. Используйте команду для запуска контейнера сервера:

docker compose up -d server
  1. Запустите команду:

docker compose restart server.

Второй запуск гарантированно инициализирует данные в таблицах.

Создание регионального администратора#

Способ 1. Регистрация в качестве муниципального администратора.

  1. Зарегистрируйтесь в информационной системе с ролью «Администратор».

  2. Перейдите по ссылке из письма, которое придет после регистрации.

  3. Обратитесь в техническую поддержку со следующим сообщением: в таблице «confirmed_users» базы данных обновите значение поля [role] на «ADMIN».

  4. Выйдите из своего профиля и авторизуйтесь снова. Роль сменится на «Региональный админ».

Способ 2. Обратиться в техническую поддержку с просьбой зарегистрировать аккаунт регионального администратора.

В техническую поддержку необходимо передать: действующий email, пароль (его можно сменить позже), имя, которое будет отображаться в профиле (например, «Региональный админ Омской области»), номер телефона.

Информация, которую следует передать технической поддержке:

  • добавьте в таблицу confirmed_users запись:

{
"role": "ADMIN",
"email": "existing.email.adress",
"usersID": "new_generated_uuid_1",
"password":"$2a$10$tCc17gd5djW1TC9zAn1rY.EFaoam2jBI4ZXKjy2hOUDeYd4cUdwTW",
"createdAt": "2025-01-01T10:39:43.160+0000",
"updatedAt": "2025-01-01T09:00:56.302+0000",
"confirmed_usersID": "new_generated_uuid_2"
}

где password – это хеш пароля, который будет использоваться для входа. Его можно сгенерировать и вставить в поле [password].

  • добавьте в таблицу profile запись:

{
"name": "Имя пользователя",
"phone": "89999999999",
"userId": "new_generated_uuid_1",
"createdAt": "2025-01-01T06:06:44.873+0000",
"profileID": "new_generated_uuid_3",
"updatedAt": "2025-01-01T06:06:44.873+0000",
"socialLink": "",
"privacyPolicyConfirmed": "true"
}

После этого вы сможете авторизоваться в информационной системе по email и password.

Первичное создание новостного проекта#

Важно

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

При первом запуске информационной системы на ней нет ни одного проекта. Чтобы его создать, потребуется инструмент для работы с API (например, Postman или Insomnia).

  1. Последовательно отправьте несколько POST-запросов:

Пример запроса:

curl --location '{{URL}}/api' \
--header 'Content-Type: application/json' \
--data-raw '{{body}}'

где URL зависит от домена и включает в себя протокол https. Например, для демонстрационного стенда URL – https://demo.delaigorod.ru/.

Примеры body для каждого запроса свои.

  1. После того как будет получен ответ на последний запрос, в котором указан UUID (уникальный идентификатор) созданного проекта, вставьте его в файл с именем ppp-frontpage-projects.json в MinIO. UUID нужно поместить в поле [newsProjectId], например:

../../../_images/proactive_deploy4.png
  1. Обновите файл ppp-frontpage-projects.json в MinIO по пути \Object Browser\ppp-frontpage-projects\Upload. Менять название файла нельзя.

Теперь на странице «Новости» доступна возможность просматривать и добавлять новости региональным администраторам.