Руководство по установке#
Модуль «Инициативное бюджетирование» – информационная система, которая позволяет органам государственной власти и местного самоуправления проводить конкурсный отбор инициативных проектов жителей по улучшению качества жизни и созданию комфортной городской среды.
Подготовка серверов#
Настройте виртуальную машину (выделенный хост):
Операционная система на базе 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#
Возьмите файл nginx.conf, настроенный для информационной системы, из папки source-platform/nginx.
В файле обновите пути до SSL-сертификатов.
Измените названия для всех директив server_name на актуальные.
Получите сертификат для использования https-протокола на развертываемом сервере с помощью сервиса let’s encrypt/certbot. Настройка осуществляется в соответствии с документацией Let’s Encrypt на официальных сайтах с учетом используемой операционной системы.
Настройка frontend части#
Скопируйте все содержимое папки dist в папку frontend.
Измените файл favicon.svg на свой (формат .svg, картинка вкладки).
Измените файл Logo.png на свой (формат .png, лого в хедере).
В файле index.html обновите название вкладки сайта.
В файле manifest.json обновите название на актуальное.
Укажите следующие переменные в файле 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 части#
Распакуйте архив source-platform.tar.xz в директорию backend папки приложения на хосте.
Укажите следующие переменные для 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– переменная устанавливается при необходимости.
Настройте файл .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_DOMAINLOGOUT_DOMAINPASSWORD_RECOVERY_SIGN_UP_URL_HOSTPASSWORD_RECOVERY_URL_HOSTREFRESH_DOMAINSIGN_UP_CONFIRMATION_URL_HOSTSIGN_UP_RESET_URL_HOSTPROJECT_SPECIALIST_EMAIL_HOSTPROJECT_PROFILE_EMAIL_HOSTPROJECT_SOCIAL_PREVIEW_HOSTSPECIFIC_URL_BUILDER_HOST
3.5. Установите почту, по которой можно связаться с технической поддержкой, в формате mailto:<email> в переменные:
PASSWORD_RECOVERY_SIGN_UP_URL_CONTACTPASSWORD_RECOVERY_URL_CONTACTSIGN_UP_CONFIRMATION_URL_CONTACTSIGN_UP_RESET_URL_CONTACTPROJECT_SPECIALIST_EMAIL_CONTACTPROJECT_PROFILE_EMAIL_CONTACTSPECIFIC_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_ENDPOINTURL-адрес для MinIO, например https://minio-example.ru.3.10. Установите в переменную
MINIO_CLIENT_SECRET_KEYпароль, сгенерированный для переменнойMINIO_ROOT_PASSWORD.3.11. Установите в переменную
TECH_SUPPORT_MANAGER_CONTACTпочту, на которую будут приходить письма с вопросами об информационной системе. Важно указать почту без префикса mailto:.Настройте файлы с шаблонами писем.
В файле templates/email_templates.json через глобальный поиск найдите все места, где используется строка https://example.ru и замените на актуальный домен информационной системы. При замене в конце вводимого url слеш (/) не нужен.
Если необходимо поменять текст письма или название информационной системы в письме, это делается аналогично через глобальный поиск в файле templates/email_templates.json.
Используйте команду для запуска контейнеров minio, postgresql и postfix:
docker compose up -d postgresql minio postfix
Настройте 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 – политика конфиденциальности.
Используйте команду для запуска контейнера сервера:
docker compose up -d server
Запустите команду:
docker compose restart server.
Второй запуск гарантированно инициализирует данные в таблицах.
Создание регионального администратора#
Способ 1. Регистрация в качестве муниципального администратора.
Зарегистрируйтесь в информационной системе с ролью «Администратор».
Перейдите по ссылке из письма, которое придет после регистрации.
Обратитесь в техническую поддержку со следующим сообщением: в таблице «confirmed_users» базы данных обновите значение поля [role] на «ADMIN».
Выйдите из своего профиля и авторизуйтесь снова. Роль сменится на «Региональный админ».
Способ 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).
Последовательно отправьте несколько POST-запросов:
Пример запроса:
curl --location '{{URL}}/api' \
--header 'Content-Type: application/json' \
--data-raw '{{body}}'
где URL зависит от домена и включает в себя протокол https. Например, для демонстрационного стенда URL – https://demo.delaigorod.ru/.
Примеры body для каждого запроса свои.
Примеры body
логин регионального администратора:
{
"messageMapId": "sign-in",
"arguments": {
"email": "{{admin_email}}",
"password": "{{admin_password}}"
}
}
curl для демонстрационного стенда:
curl --location 'https://demo.delaigorod.ru/api' \
--header 'Content-Type: application/json' \
--data-raw '{
"messageMapId": "sign-in",
"arguments": {
"email": "existing.admin.email@gmail.com",
"password": "password"
}
}'
создание новостного проекта:
{
"messageMapId": "project-creation/create-project",
"arguments": {
"parentProjectId": null,
"type": "news"
}
}
После того как будет получен ответ на последний запрос, в котором указан UUID (уникальный идентификатор) созданного проекта, вставьте его в файл с именем ppp-frontpage-projects.json в MinIO. UUID нужно поместить в поле [newsProjectId], например:
Обновите файл ppp-frontpage-projects.json в MinIO по пути \Object Browser\ppp-frontpage-projects\Upload. Менять название файла нельзя.
Теперь на странице «Новости» доступна возможность просматривать и добавлять новости региональным администраторам.