# Полезные ссылки

# CI/CD и Управление Инфраструктурой

#### **Jenkins**

🔗 [https://jenkins.ao-nk.site](https://jenkins.ao-nk.site/)  
**Описание:** Jenkins — это мощная система автоматизации непрерывной интеграции и доставки (CI/CD), которая позволяет автоматизировать этапы разработки программного обеспечения, такие как сборка, тестирование и деплой приложений.

<div class="my-2" id="bkmrk-">  
</div>---

#### **Rancher**

🔗 [https://rancher.ao-nk.site](https://rancher.ao-nk.site/)  
**Описание:** Rancher — это платформа управления контейнерами Kubernetes, позволяющая централизованно управлять кластерами, разворачивать приложения и обеспечивать безопасность в средах контейнеризации.

<div class="my-2" id="bkmrk--2">  
</div>---

#### **Nexus**

🔗 [https://nexus.common.ao-nk.site/](https://nexus.common.ao-nk.site/)  
**Описание:** Nexus — это репозиторий артефактов (Nexus Repository Manager), который служит центральным хранилищем для библиотек, пакетов и образов, используемых в процессе разработки и деплоя приложений.

<div class="my-2" id="bkmrk--4">  
</div>---

#### **Puppet**

🔗 [https://puppet.spk.site/](https://puppet.spk.site/)  
**Описание:** Puppet — это инструмент управления конфигурациями, позволяющий автоматизировать настройку и поддержание серверов в требуемом состоянии, обеспечивая согласованность и масштабируемость инфраструктуры.

<div class="my-2" id="bkmrk--6">  
</div>

# Адреса ключевых стендов и сервисов

<div class="qwen-markdown-table-wrap qwen-markdown-table-wrap-pc group relative w-full" id="bkmrk-"></div>### Сервисы

<div class="scrollbar-hidden relative max-w-full overflow-x-auto whitespace-nowrap rounded-lg" id="bkmrk-%E2%84%96-%D0%9D%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%B0-%D0%92"><table class="qwen-markdown-table w-full max-w-full table-auto rounded-xl text-left text-sm text-gray-500 dark:text-gray-400" style="width: 100%; height: 1626.2px;"><thead class="qwen-markdown-table-thead border-none bg-gray-50 text-xs uppercase text-gray-700 dark:bg-gray-850 dark:text-gray-400"><tr class="qwen-markdown-table-thead-tr" style="height: 46.4333px;"><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col" style="width: 4.64747%; background-color: rgb(206, 212, 217); height: 46.4333px;"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5" data-spm-anchor-id="a2ty_o01.29997173.0.i4.2837c9218B8Uw4">№</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col" style="width: 13.7041%; background-color: rgb(206, 212, 217); height: 46.4333px;"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">Название сервиса</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col" style="width: 7.14995%; background-color: rgb(206, 212, 217); height: 46.4333px;"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">Ветка</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col" style="width: 15.4916%; background-color: rgb(206, 212, 217); height: 46.4333px;"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">IP адрес</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col" style="width: 15.4916%; background-color: rgb(206, 212, 217); height: 46.4333px;"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">Ссылка</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col" style="width: 19.7815%; background-color: rgb(206, 212, 217); height: 46.4333px;"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">Хостнейм</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col" style="width: 23.714%; background-color: rgb(206, 212, 217); height: 46.4333px;"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">Описание</div></th></tr></thead><tbody class="qwen-markdown-table-tbody"><tr style="height: 64.6833px;"><td colspan="7" style="width: 99.9802%; background-color: rgb(236, 240, 241); vertical-align: middle; height: 64.6833px;">##### Опытная эксплуатация

</td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">1</div></td><td style="width: 13.7041%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]"><span style="color: rgb(224, 62, 45);">Mail</span></div></td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">-</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.10](ssh://master@10.100.29.10)</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[mail.stage.ao-nk.ru](https://mail.stage.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[mail.stage.common.ao-nk.site](http://mail.stage.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Корпоративная почта</div></td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">2</div></td><td style="width: 13.7041%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]"><span style="color: rgb(224, 62, 45);">Registry</span></div></td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">-</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.11](ssh://master@10.100.29.11)</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[registry.stage.ao-nk.ru](https://registry.stage.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[registry.stage.common.ao-nk.site](http://registry.stage.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Докер-регистри</div></td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">3</div></td><td style="width: 13.7041%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]"><span style="color: rgb(224, 62, 45);">Help</span></div></td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">-</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.12](ssh://master@10.100.29.12)</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[help.stage.ao-nk.ru](https://help.stage.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[help.stage.common.ao-nk.site](http://help.stage.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Справка и поддержка</div></td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">4</div></td><td style="width: 13.7041%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]"><span style="color: rgb(224, 62, 45);">NextCloud</span></div></td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">-</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.13](ssh://master@10.100.29.13)</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[office.stage.ao-nk.ru](https://office.stage.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[nc.stage.common.ao-nk.site](http://nc.stage.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Онлайн-офис</div></td></tr><tr style="height: 63.2333px;"><td style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">5</div></td><td style="width: 13.7041%; height: 63.2333px;">AO-NK ID</td><td style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.15](ssh://master@10.100.29.15)</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[id.stage.ao-nk.ru](https://id.stage.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[id.stage.common.ao-nk.site](http://id.stage.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Централизованная система управления доступом и аутентификацией (SSO)</div></td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">6</div></td><td style="width: 13.7041%; height: 57.6333px;">Профстандарты</td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.20](ssh://master@10.100.29.20)</div></td><td style="width: 15.4916%; height: 57.6333px;">[ps.stage.ao-nk.ru](https://ps.stage.ao-nk.ru)</td><td style="width: 19.7815%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[ps.stage.common.ao-nk.site](http://ps.stage.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия портала "Профстандарты"</div></td></tr><tr style="height: 63.2333px;"><td style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">7</div></td><td style="width: 13.7041%; height: 63.2333px;">Мониторинг НСК</td><td style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.21](ssh://master@10.100.29.21)</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[nskmon.stage.ao-nk.ru](https://nskmon.stage.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[nskmon.stage.common.ao-nk.site](http://nskmon.stage.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия "Мониторинг НСК"</div></td></tr><tr style="height: 63.2333px;"><td style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">8</div></td><td style="width: 13.7041%; height: 63.2333px;">Я-Эксперт</td><td style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.24](ssh://master@10.100.29.24)</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[iexpert.stage.ao-nk.ru](https://iexpert.stage.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[iexpert.stage.common.ao-nk.site](http://iexpert.stage.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия соцсети "Я-Эксперт"</div></td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">9</div></td><td style="width: 13.7041%; height: 57.6333px;">TheNextFlow</td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.25](ssh://master@10.100.29.25)</div></td><td style="width: 15.4916%; height: 57.6333px;">[tnf.stage.ao-nk.ru](https://tnf.stage.ao-nk.ru)</td><td style="width: 19.7815%; height: 57.6333px;">[tnf.stage.common.ao-nk.site](http://tnf.stage.common.ao-nk.site)</td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия портала "TheNextFlow"</div></td></tr><tr style="height: 63.2333px;"><td style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">10</div></td><td style="width: 13.7041%; height: 63.2333px;">СОК (НОКО)</td><td style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.26](ssh://master@10.100.29.26)</div></td><td style="width: 15.4916%; height: 63.2333px;">[noko.stage.ao-nk.ru](https://noko.stage.ao-nk.ru)</td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[noko.stage.common.ao-nk.site](http://noko.stage.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия "СОК"</div></td></tr><tr style="height: 63.2333px;"><td style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">11</div></td><td style="width: 13.7041%; height: 63.2333px;">ИС-Мониторинг</td><td style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.36](ssh://master@10.100.29.36)</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[ismon.stage.ao-nk.ru](https://ismon.stage.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[ismon.stage.common.ao-nk.site](http://ismon.stage.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия портала "ИС-Мониторинг"</div></td></tr><tr class="qwen-markdown-table-tbody-tr bg-white text-xs dark:border-gray-850 dark:bg-gray-900" style="height: 63.2333px;"><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white" style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">12</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white" style="width: 13.7041%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Приоритет</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white" style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white" style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.29.41](ssh://master@10.100.29.41)</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[priority.stage.ao-nk.ru](https://priority.stage.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[priority.stage.common.ao-nk.site](http://priority.stage.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия портала "ППР-Онлайн"</div></td></tr><tr style="height: 64.6833px;"><td colspan="7" style="background-color: rgb(236, 240, 241); vertical-align: middle; height: 64.6833px; width: 99.9802%;">##### Промышленная эксплуатация

</td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">1</div></td><td style="width: 13.7041%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]"><span style="color: rgb(0, 0, 0);">Mail</span></div></td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">-</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.10](ssh://master@10.100.28.10)</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[mail.ao-nk.ru](https://mail.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[mail.common.ao-nk.site](http://mail.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Корпоративная почта</div></td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">2</div></td><td style="width: 13.7041%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]"><span style="color: rgb(0, 0, 0);">Registry</span></div></td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">-</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.11](ssh://master@10.100.28.11)</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[registry.ao-nk.ru](https://registry.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[registry.common.ao-nk.site](http://registry.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Докер-регистри</div></td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">3</div></td><td style="width: 13.7041%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]"><span style="color: rgb(0, 0, 0);">Help</span></div></td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">-</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.12](ssh://master@10.100.28.12)</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[help.ao-nk.ru](https://help.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[help.common.ao-nk.site](http://help.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Справка и поддержка</div></td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">4</div></td><td style="width: 13.7041%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]"><span style="color: rgb(0, 0, 0);">NextCloud</span></div></td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">-</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.13](ssh://master@10.100.28.13)</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[office.ao-nk.ru](https://office.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[nc.common.ao-nk.site](http://nc.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Онлайн-офис</div></td></tr><tr style="height: 63.2333px;"><td style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">5</div></td><td style="width: 13.7041%; height: 63.2333px;">AO-NK ID</td><td style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.15](ssh://master@10.100.28.15)</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[id.ao-nk.ru](https://id.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[id.common.ao-nk.site](http://id.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Централизованная система управления доступом и аутентификацией (SSO)</div></td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">6</div></td><td style="width: 13.7041%; height: 57.6333px;">Профстандарты</td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.20](ssh://master@10.100.28.20)</div></td><td style="width: 15.4916%; height: 57.6333px;">[ps.ao-nk.ru](https://ps.ao-nk.ru)</td><td style="width: 19.7815%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[ps.common.ao-nk.site](http://ps.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия портала "Профстандарты"</div></td></tr><tr style="height: 63.2333px;"><td style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">7</div></td><td style="width: 13.7041%; height: 63.2333px;">Мониторинг НСК</td><td style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.21](ssh://master@10.100.28.21)</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[nsk.monitoring.ao-nk.ru](https://nsk.monitoring.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[nskmon.common.ao-nk.site](http://nskmon.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия "Мониторинг НСК"</div></td></tr><tr style="height: 63.2333px;"><td style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">8</div></td><td style="width: 13.7041%; height: 63.2333px;">Я-Эксперт</td><td style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.24](ssh://master@10.100.28.24)</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[expertspk.ru](https://expertspk.ru)</div></td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[iexpert.common.ao-nk.site](http://iexpert.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия соцсети "Я-Эксперт"</div></td></tr><tr style="height: 57.6333px;"><td style="width: 4.64747%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">9</div></td><td style="width: 13.7041%; height: 57.6333px;">TheNextFlow</td><td style="width: 7.14995%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.25](ssh://master@10.100.28.25)</div></td><td style="width: 15.4916%; height: 57.6333px;">[tnf.ao-nk.ru](https://tnf.ao-nk.ru)</td><td style="width: 19.7815%; height: 57.6333px;">[tnf.common.ao-nk.site](http://tnf.common.ao-nk.site)</td><td style="width: 23.714%; height: 57.6333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия портала "TheNextFlow"</div></td></tr><tr style="height: 63.2333px;"><td style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">10</div></td><td style="width: 13.7041%; height: 63.2333px;">СОК (НОКО)</td><td style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.26](ssh://master@10.100.28.26)</div></td><td style="width: 15.4916%; height: 63.2333px;">[noko.ao-nk.ru](https://noko.ao-nk.ru)</td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[noko.common.ao-nk.site](http://noko.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия "СОК"</div></td></tr><tr style="height: 63.2333px;"><td style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">11</div></td><td style="width: 13.7041%; height: 63.2333px;">ИС-Мониторинг</td><td style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.36](ssh://master@10.100.28.36)</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[is-mon.ao-nk.ru](https://is-mon.ao-nk.ru)</div></td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[ismon.common.ao-nk.site](http://ismon.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия портала "ИС-Мониторинг"</div></td></tr><tr style="height: 63.2333px;"><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white" style="width: 4.64747%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">12</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white" style="width: 13.7041%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Приоритет</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white" style="width: 7.14995%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">main</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white" style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[10.100.28.41](ssh://master@10.100.28.41)</div></td><td style="width: 15.4916%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[llcpriority.ru](https://llcpriority.ru/)</div></td><td style="width: 19.7815%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[priority.common.ao-nk.site](http://priority.common.ao-nk.site)</div></td><td style="width: 23.714%; height: 63.2333px;"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия портала "ППР-Онлайн"</div></td></tr></tbody></table>

</div>### Стенды

<div class="qwen-markdown-table-wrap qwen-markdown-table-wrap-pc group relative w-full" id="bkmrk-%E2%84%96-%D0%9D%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D0%B5%D0%BD%D0%B4%D0%B0-%D0%A2%D0%B8"><div class="scrollbar-hidden relative max-w-full overflow-x-auto whitespace-nowrap rounded-lg"><table class="qwen-markdown-table w-full max-w-full table-auto rounded-xl text-left text-sm text-gray-500 dark:text-gray-400"><thead class="qwen-markdown-table-thead border-none bg-gray-50 text-xs uppercase text-gray-700 dark:bg-gray-850 dark:text-gray-400"><tr class="qwen-markdown-table-thead-tr"><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5" data-spm-anchor-id="a2ty_o01.29997173.0.i4.2837c9218B8Uw4">№</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">Название стенда</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">Тип / Версия</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">Ветка / Окружение</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">Ссылка на интерфейс</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">Ссылка на API</div></th><th class="qwen-markdown-table-thead-tr-th cursor-pointer select-none border border-gray-50 dark:border-gray-850" scope="col"><div class="qwen-markdown-table-thead-tr-th-col flex items-center gap-1.5">Описание</div></th></tr></thead><tbody class="qwen-markdown-table-tbody"><tr class="qwen-markdown-table-tbody-tr bg-white text-xs dark:border-gray-850 dark:bg-gray-900"><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">1</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">AONK ID</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">—</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">`stand/update`</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[http://aonk-id-update.dev.ao-nk.ru/](http://aonk-id-update.dev.ao-nk.ru/)</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[http://aonk-id-update.dev.ao-nk.ru/api/](http://aonk-id-update.dev.ao-nk.ru/api/)</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Централизованная система управления доступом и аутентификацией (SSO)</div></td></tr><tr class="qwen-markdown-table-tbody-tr bg-white text-xs dark:border-gray-850 dark:bg-gray-900"><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">2</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Профстандарты (Vue3)</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Frontend / Vue3</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">`stand/vue3`</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[http://lego-vue3.dev.ao-nk.ru/](http://lego-vue3.dev.ao-nk.ru/)</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[http://lego-vue3.dev.ao-nk.ru/api/](http://lego-vue3.dev.ao-nk.ru/api/)</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Тестовая версия фронтенда "Профстандарты" на Vue 3</div></td></tr><tr class="qwen-markdown-table-tbody-tr bg-white text-xs dark:border-gray-850 dark:bg-gray-900"><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">3</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Профстандарты (Docker/Vue2)</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Frontend / Vue2</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">`stand/docker`</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[http://lego-docker.dev.ao-nk.ru/](http://lego-docker.dev.ao-nk.ru/)</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">[http://lego-docker.dev.ao-nk.ru/api/](http://lego-docker.dev.ao-nk.ru/api/)</div></td><td class="qwen-markdown-table-tbody-tr-td w-max border border-gray-50 text-gray-900 dark:border-gray-850 dark:text-white"><div class="qwen-markdown-table-tbody-tr-td-col flex items-center gap-[2px]">Текущая версия сервиса "Профстандарты", развернутая в Docker на Vue 2</div></td></tr></tbody></table>

</div><div class="qwen-markdown-table-thead-tool invisible group-hover:visible">  
</div></div><div class="my-2" id="bkmrk--1"><button class="rounded-lg bg-transparent transition leading-[20px]"></button>  
</div>

# Корпоративные сервисы

Почта - [https://mail.ao-nk.ru](https://mail.ao-nk.ru)

Портал - [https://portal.ao-nk.ru/](https://portal.ao-nk.ru/)

Сервис единой авторизации - [http://id.ao-nk.ru](http://id.ao-nk.ru)

# Инструкция по деплою и правила разработкиа

## [](#%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5)Содержание

1. [Общие принципы](#%D0%BE%D0%B1%D1%89%D0%B8%D0%B5-%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B)
2. [Инструкции для фронтенда](#%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8-%D0%B4%D0%BB%D1%8F-%D1%84%D1%80%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D0%B4%D0%B0)
3. [Инструкции для бэкенда](#%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8-%D0%B4%D0%BB%D1%8F-%D0%B1%D1%8D%D0%BA%D0%B5%D0%BD%D0%B4%D0%B0)
4. [Тестовые стенды (Staging)](#%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B5-%D1%81%D1%82%D0%B5%D0%BD%D0%B4%D1%8B-staging)
5. [Проверка перед деплоем](#%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0-%D0%BF%D0%B5%D1%80%D0%B5%D0%B4-%D0%B4%D0%B5%D0%BF%D0%BB%D0%BE%D0%B5%D0%BC)

## [](#%D0%BE%D0%B1%D1%89%D0%B8%D0%B5-%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B)Общие принципы

1. Все конфигурации должны управляться через переменные окружения (`.env` файлы)
2. Переопределение конфигурации доступно через `config.override.json` (только в режиме разработки)
3. Запрещено использование сторонних CDN для любых ресурсов (включая шрифты, скрипты, стили)
4. Весь код должен следовать принятым соглашениям о стиле кодирования

### [](#%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-%D0%BE%D0%BA%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F)Настройка окружения

#### [](#%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D0%BE%D0%BA%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F)Переменные окружения

Все конфигурации приложения должны быть вынесены в `.env` файлы:

- `.env` - базовые настройки, общие для всех окружений
- `.env.development` - настройки для разработки
- `.env.production` - настройки для продакшена

Пример структуры `.env` файла:

```
VITE_API_URL=https://api-id.АОНК.ru/
VITE_APP_NAME=АОНК ID
```

<div class="gl-relative markdown-code-block js-markdown-code" id="bkmrk--4"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-2" data-title="Copy to clipboard" type="button"><svg></svg></button></div>#### [](#%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8)Переопределение конфигурации

В процессе разработки можно переопределить настройки без изменения исходного кода, используя файл `config.override.json`. Этот файл должен иметь следующую структуру:

```
{
  "config": {
    "apiUrl": "http://localhost:8000/",
    "appName": "АОНК ID (локальная разработка)"
  }
}
```

<div class="gl-relative markdown-code-block js-markdown-code" id="bkmrk--6"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-3" data-title="Copy to clipboard" type="button"><svg></svg></button></div>**Важно**: Механизм переопределения работает только в режиме разработки. В продакшн-среде он отключен для безопасности.

### [](#%D0%BF%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5-%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8)Персистентные папки

Персистентные папки - это директории, которые сохраняются между обновлениями приложения и не очищаются при повторном развертывании.

Персистентные папки в проекте создаются и обозначаются в Dockerfile с помощью директивы `VOLUME`. Пример из бэкенд-проекта:

```
# Создание персистентной директории uploads
RUN mkdir -p /var/www/aonk-id/runtime/uploads
VOLUME /var/www/aonk-id/runtime/uploads

# Создание персистентной директории drivers
RUN mkdir -p /var/www/aonk-id/runtime/drivers
VOLUME /var/www/aonk-id/runtime/drivers
```

<div class="gl-relative markdown-code-block js-markdown-code" id="bkmrk--8"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-4" data-title="Copy to clipboard" type="button"><svg></svg></button></div>Чтобы создать новую персистентную папку:

1. Создайте директорию в корне проекта
2. Добавьте путь к этой директории в файл `.gitignore` (чтобы избежать коммита содержимого)
3. Добавьте следующие строки в `contrib/Dockerfile`: ```
    # Создание персистентной директории
    RUN mkdir -p /var/www/aonk-id/my-persistent-dir
    VOLUME /var/www/aonk-id/my-persistent-dir
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-5" data-title="Copy to clipboard" type="button"><svg></svg></button></div>

Директива `VOLUME` в Dockerfile гарантирует, что содержимое указанной директории будет сохраняться между перезапусками контейнера и обновлениями приложения.

**Важно**: Данные в томах (`VOLUME`) сохраняются даже при удалении контейнера, но могут быть удалены при выполнении команды `docker volume prune`. Убедитесь, что у вас настроено резервное копирование важных данных.

## [](#%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8-%D0%B4%D0%BB%D1%8F-%D1%84%D1%80%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D0%B4%D0%B0)Инструкции для фронтенда

### [](#%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0-frontend)Структура проекта (Frontend)

```
frontend/
├── dist/               # Результат сборки (очищается при каждой сборке)
├── public/             # Статические файлы
│   └── config.override.json  # Файл переопределения конфигурации
├── src/                # Исходный код приложения
│   ├── config/         # Конфигурация приложения
│   │   ├── env.config.js      # Базовая конфигурация
│   │   ├── configRewrite.js   # Механизм переопределения
│   │   └── index.js           # Экспорт конфигурации
│   ├── components/     # Компоненты Vue
│   ├── plugins/        # Плагины Vue
│   ├── router/         # Маршрутизация
│   ├── stores/         # Хранилища Pinia
│   └── styles/         # Стили приложения
├── node_modules/       # Зависимости (очищаются при сборке)
├── contrib/            # Файлы для развертывания
│   ├── Dockerfile      # Dockerfile для сборки образа
│   └── aonk-id-frontend.nginx.conf  # Конфигурация Nginx
├── debian/             # Файлы для сборки Debian-пакета
│   ├── control         # Метаданные пакета
│   ├── aonk-id-frontend-bin.install  # Список файлов для установки
│   └── aonk-id-frontend-bin.dir      # Список создаваемых директорий
├── Makefile            # Скрипты сборки
└── build.sh            # Скрипт создания Debian-пакета
```

<div class="gl-relative markdown-code-block js-markdown-code" id="bkmrk--11"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-6" data-title="Copy to clipboard" type="button"><svg></svg></button></div>### [](#%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2-%D0%B8-%D0%BF%D0%B0%D0%BF%D0%BE%D0%BA-%D0%B2-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D1%83)Добавление файлов и папок в сборку

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

1. **Включение файлов в сборку Vite**:
    
    
    - Все исходные файлы должны размещаться в директории `src/`
    - Статические файлы (изображения, шрифты и т.д.) должны размещаться в директории `public/`
    - Vite автоматически включит эти файлы в результирующую сборку (директория `dist/`)
2. **Включение файлов в установочный пакет**:
    
    
    - Для определения файлов, которые должны быть установлены на сервер, используется файл `debian/aonk-id-frontend-bin.install`
    - Каждая строка в этом файле содержит два элемента: исходный путь и путь назначения
    
    Пример содержимого файла `aonk-id-frontend-bin.install`:
    
    ```
    package.json /var/www/aonk-id
    package-lock.json /var/www/aonk-id
    dist/* /var/www/aonk-id/public
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-7" data-title="Copy to clipboard" type="button"><svg></svg></button></div>

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

1. Добавьте новую строку в файл `debian/aonk-id-frontend-bin.install`, указав исходный путь и путь назначения
    
    ```
    my-config-file.json /var/www/aonk-id/configs
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-8" data-title="Copy to clipboard" type="button"><svg></svg></button></div>
2. Убедитесь, что указанный каталог назначения существует или создайте его, добавив путь в файл `debian/aonk-id-frontend-bin.dir`:
    
    ```
    /var/www/aonk-id/configs
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-9" data-title="Copy to clipboard" type="button"><svg></svg></button></div>

### [](#%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC)Управление состоянием

Для управления состоянием приложения используется Pinia. При добавлении нового хранилища:

1. Создайте файл в директории `src/stores/`
2. Используйте `defineStore` для определения хранилища
3. Импортируйте конфигурацию из `@/config`, если требуется доступ к настройкам

Пример:

```
import { defineStore } from 'pinia'
import config from '@/config'

export const useAuthStore = defineStore('auth', {
  state: () => ({
    user: null,
    apiUrl: config.apiUrl
  }),
  actions: {
    // ...
  }
})
```

<div class="gl-relative markdown-code-block js-markdown-code" id="bkmrk--14"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-10" data-title="Copy to clipboard" type="button"><svg></svg></button></div>### [](#%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0-%D0%B8-%D0%B4%D0%B5%D0%BF%D0%BB%D0%BE%D0%B9-%D1%84%D1%80%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D0%B4%D0%B0)Сборка и деплой фронтенда

1. Установка зависимостей:
    
    ```
    yarn install
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-11" data-title="Copy to clipboard" type="button"><svg></svg></button></div>
2. Запуск в режиме разработки:
    
    ```
    yarn dev
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-12" data-title="Copy to clipboard" type="button"><svg></svg></button></div>
3. Сборка для продакшена:
    
    ```
    yarn build
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-13" data-title="Copy to clipboard" type="button"><svg></svg></button></div>
4. Создание Debian-пакета:
    
    ```
    ./build.sh
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-14" data-title="Copy to clipboard" type="button"><svg></svg></button></div>

## [](#%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8-%D0%B4%D0%BB%D1%8F-%D0%B1%D1%8D%D0%BA%D0%B5%D0%BD%D0%B4%D0%B0)Инструкции для бэкенда

### [](#%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0-backend)Структура проекта (Backend)

```
backend/
├── config/             # Конфигурация приложения
│   ├── env.config.js   # Базовая конфигурация
│   └── configRewrite.js # Механизм переопределения
├── controllers/        # Контроллеры
├── models/             # Модели данных
├── routes/             # Маршруты API
├── middleware/         # Промежуточное ПО
├── helpers/            # Вспомогательные функции
├── drivers/            # Драйверы (персистентная папка)
├── uploads/            # Загруженные файлы (персистентная папка)
├── contrib/            # Файлы для развертывания
│   └── Dockerfile      # Dockerfile для сборки образа
├── debian/             # Файлы для сборки Debian-пакета
│   ├── control         # Метаданные пакета
│   └── aonk-id-backend-bin.install  # Список файлов для установки
├── Makefile            # Скрипты сборки
└── build.sh            # Скрипт создания Debian-пакета
```

<div class="gl-relative markdown-code-block js-markdown-code" id="bkmrk--18"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-15" data-title="Copy to clipboard" type="button"><svg></svg></button></div>### [](#%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2-%D0%B8-%D0%BF%D0%B0%D0%BF%D0%BE%D0%BA-%D0%B2-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D1%83-backend)Добавление файлов и папок в сборку (Backend)

Для включения файлов в установочный пакет бэкенда, используется файл `debian/aonk-id-backend-bin.install`. Каждая строка в файле определяет исходный путь и путь назначения:

```
package.json /var/www/aonk-id/runtime
package-lock.json /var/www/aonk-id/runtime
config /var/www/aonk-id/runtime
controllers /var/www/aonk-id/runtime
emails /var/www/aonk-id/runtime
helpers /var/www/aonk-id/runtime
middleware /var/www/aonk-id/runtime
models /var/www/aonk-id/runtime
readme /var/www/aonk-id/runtime
node_modules /var/www/aonk-id/runtime
routes /var/www/aonk-id/runtime
seeders /var/www/aonk-id/runtime
index.js /var/www/aonk-id/runtime
config.override.json /var/www/aonk-id/runtime
contrib/aonk-id.service /lib/systemd/system
contrib/aonk-id /etc/default
```

<div class="gl-relative markdown-code-block js-markdown-code" id="bkmrk--20"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-16" data-title="Copy to clipboard" type="button"><svg></svg></button></div>### [](#%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D0%B1%D0%B0%D0%B7%D0%BE%D0%B9-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)Работа с базой данных

Для работы с базой данных в проекте используется Sequelize ORM:

1. Модели данных размещаются в директории `models/`
2. Миграции размещаются в директории `migrations/`
3. Сидеры для заполнения тестовыми данными - в директории `seeders/`

Пример создания миграции:

```
npx sequelize-cli migration:generate --name create-users-table
```

<div class="gl-relative markdown-code-block js-markdown-code" id="bkmrk--22"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-17" data-title="Copy to clipboard" type="button"><svg></svg></button></div>Запуск миграций:

```
npx sequelize-cli db:migrate
```

<div class="gl-relative markdown-code-block js-markdown-code" id="bkmrk--23"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-18" data-title="Copy to clipboard" type="button"><svg></svg></button></div>### [](#%D0%BF%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5-%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8-backend)Персистентные папки (Backend)

На бэкенде определены следующие персистентные директории:

- `/var/www/aonk-id/runtime/uploads` - для загруженных файлов
- `/var/www/aonk-id/runtime/drivers` - для драйверов

### [](#%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0-%D0%B8-%D0%B4%D0%B5%D0%BF%D0%BB%D0%BE%D0%B9-%D0%B1%D1%8D%D0%BA%D0%B5%D0%BD%D0%B4%D0%B0)Сборка и деплой бэкенда

1. Установка зависимостей:
    
    ```
    npm install
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-19" data-title="Copy to clipboard" type="button"><svg></svg></button></div>
2. Запуск в режиме разработки:
    
    ```
    npm run dev
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-20" data-title="Copy to clipboard" type="button"><svg></svg></button></div>
3. Создание Debian-пакета:
    
    ```
    ./build.sh
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-21" data-title="Copy to clipboard" type="button"><svg></svg></button></div>

## [](#%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B5-%D1%81%D1%82%D0%B5%D0%BD%D0%B4%D1%8B-staging)Тестовые стенды (Staging)

### [](#%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B8-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D0%B5%D0%BD%D0%B4%D0%BE%D0%B2)Создание и обновление стендов

Для работы с тестовыми стендами используется механизм веток. Каждая ветка формата `stand/название` автоматически создает или обновляет соответствующий тестовый стенд:

1. Создайте новую ветку с префиксом `stand/`:
    
    ```
    git checkout -b stand/feature-name
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-22" data-title="Copy to clipboard" type="button"><svg></svg></button></div>
2. Внесите необходимые изменения и закоммитьте их:
    
    ```
    git add .
    git commit -m "Описание изменений"
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-23" data-title="Copy to clipboard" type="button"><svg></svg></button></div>
3. Отправьте ветку в удаленный репозиторий:
    
    ```
    git push origin stand/feature-name
    ```
    
    <div class="gl-relative markdown-code-block js-markdown-code"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-24" data-title="Copy to clipboard" type="button"><svg></svg></button></div>

После пуша изменений в ветку `stand/feature-name`, система CI/CD автоматически развернет или обновит тестовый стенд с соответствующим именем.

### [](#%D1%87%D0%B8%D1%81%D1%82%D0%B0%D1%8F-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D1%81%D1%82%D0%B5%D0%BD%D0%B4%D0%B0)Чистая установка стенда

Для полной очистки тестового стенда (включая базу данных и персистентные файлы) необходимо выполнить коммит с ключевым словом `CleanStand` в сообщении:

```
git commit --allow-empty -m "CleanStand: полная очистка тестового стенда"
git push origin stand/feature-name
```

<div class="gl-relative markdown-code-block js-markdown-code" id="bkmrk--29"><button class="btn btn-default btn-md gl-button btn-icon has-tooltip" data-clipboard-target="pre#code-25" data-title="Copy to clipboard" type="button"><svg></svg></button></div>**Важно**: Используйте эту операцию с осторожностью, так как она приведет к потере всех данных на тестовом стенде.

## [](#%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5-%D1%84%D1%80%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D0%B4%D0%B0-%D0%B8-%D0%B1%D1%8D%D0%BA%D0%B5%D0%BD%D0%B4%D0%B0)Взаимодействие фронтенда и бэкенда

### [](#api-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D1%8B)API-интерфейсы

Взаимодействие между фронтендом и бэкендом осуществляется через REST API.

1. На бэкенде API-маршруты определяются в директории `routes/`
2. На фронтенде для работы с API используется axios

### [](#%D0%B0%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F-%D0%B8-%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F)Аутентификация и авторизация

Для авторизации используется механизм JWT-токенов:

1. Фронтенд отправляет учетные данные пользователя на бэкенд
2. Бэкенд проверяет учетные данные и выдает JWT-токен
3. Фронтенд сохраняет токен и использует его для последующих запросов

## [](#%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0-%D0%BF%D0%B5%D1%80%D0%B5%D0%B4-%D0%B4%D0%B5%D0%BF%D0%BB%D0%BE%D0%B5%D0%BC)Проверка перед деплоем

Перед деплоем в продакшн-среду необходимо выполнить следующие проверки:

1. Убедиться, что все тесты проходят успешно
2. Проверить сборку на наличие предупреждений или ошибок
3. Проверить работоспособность основных функций приложения
4. Удостовериться, что все переменные окружения для продакшн-среды корректно настроены

## [](#%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8)Правила разработки

### [](#%D0%BE%D0%B1%D1%8F%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D1%82%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)Обязательные требования

1. **Конфигурации через переменные окружения**
    
    
    - Все настройки, зависящие от окружения, должны быть определены через `.env` файлы
    - Доступ к переменным должен осуществляться через объект конфигурации, а не напрямую через `import.meta.env` или `process.env`
2. **Механизм переопределения конфигурации**
    
    
    - Каждый проект должен поддерживать переопределение конфигурации через `config.override.json`
    - Логика загрузки переопределений должна работать только в режиме разработки
3. **Запрет на использование сторонних CDN**
    
    
    - Все ресурсы (шрифты, скрипты, стили) должны быть локальными
    - Шрифты должны размещаться в директории проекта, а не загружаться через Google Fonts или другие CDN
    - Все библиотеки должны быть установлены через npm/yarn
4. **Безопасность**
    
    
    - Не хранить секреты и ключи в исходном коде
    - Не включать учетные данные в репозиторий
    - Использовать HTTPS для всех внешних запросов

### [](#%D0%BB%D1%83%D1%87%D1%88%D0%B8%D0%B5-%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B8)Лучшие практики

1. **Код**
    
    
    - Следовать принятому стилю кодирования
    - Писать тесты для критически важного функционала
    - Использовать типизацию где это возможно
2. **Производительность**
    
    
    - Минимизировать количество и размер внешних зависимостей
    - Оптимизировать изображения и другие медиа-ресурсы
    - Использовать ленивую загрузку для тяжелых компонентов
3. **Доступность**
    
    
    - Обеспечивать доступность интерфейса (WCAG)
    - Поддерживать корректное отображение на различных устройствах
    - Учитывать особенности разных браузеров