Skip to content

Описание продукта

Constantine Rafikov edited this page Dec 10, 2022 · 2 revisions

Об Open Genes

Open Genes [ˈəʊpən dʒiːnz] (оупэн джинз) — это технологический лонджевити стартап. Мы разрабатываем специализированную базу генов человека, ассоциированных со старением http://open-genes.com. Главной особенностью Open Genes является подробное описание параметров экспериментов, подтверждающих связь гена со старением. Эти данные мы собираем вручную из исследований. Наш проект призван помочь исследователям в изучении генетики старения и связанных с ним процессов. Мы уверены, что для изучения старения необходим комплексный подход. Мы хотим получить полную картину из разрозненных данных о связанных со старением генах.

Презентация

(обновить ссылку)

Презентация включает в себя слайды про: обоснование, чего не хватает в других биологических базах данных, подход к исследованию ассоциации генов с продолжительностью жизни, цели проекта, целевую аудиторию, технологический стэк.

Интеграция

Документация API

Swagger

Примеры интеграций с другими проектами

Интеграция Open Genes с порталом Open Longevity

Лицензирование

Файлы продукта Open Genes и все его составляющие распростараняются под копилефтной лицензией Mozilla Public License v2.0.

Техническое описание проекта

Код клиентской части приложения (frontend) и серверной части приложения (backend) хранятся в отдельных репозиториях. Работа над кодом ведется по GitFlow. Фронтэнд и бэкэнд собираются отдельно. Деплой фронтэнда и бэкэнда также происходит независимо друг от друга.

Open Genes состоит из нескольких приложений. Подробнее в «Инфраструктура Open Genes»

Инфраструктура Open Genes

Приложения

Open Genes состоит из нескольких приложений. Все эти приложения формируют инфраструктуру Open Genes.

Фронтенд

open-genes/open-genes-frontend

Сайт Open Genes — фронтенд, написанный на TypeScript, Angular. Веб приложение позволяет производить поиск, фильтровать, сортировать, группировать данные из API Open Genes используя графический интерфейс. Разработка фронтэнда сайта ведется на Typescript на фреймворке Angular 13. Клиентская часть представляет собой SPA (одностраничное веб-приложение). Предполагается развитие в сторону PWA (Progressive Web App). При сборке приложение интерпритируется в JavaScript и сохраняется в папку dist/frontend. Параметры сборки настраиваются в angular.json, зависимости автоматически прописываются в package.json. Для ускорения работы веб-приложения используются lazy-модули.

Бэкенд

API

API Open Genes — это REST API с GET эндпоинтами, отдающими данные из БД по генам, исследованиям и сущностям, связанным с генам — заболеваниям, ортологам, GO terms, категориям белка, механизмам старения, происхождению гена и его семейства и другим различным категориям. Описание эндпоинтов и форматов ответа можно прочитать здесь: https://open-genes.com/api/docs

Легаси API на PHP 7 (Yii2). При разработке команда ориентировалась на методологию 12factor.net. Зависимости прописываются в Composer, конфигурацию в среде выполнения задается с помощью .env. Конфигурация проекта (dsn для подключения к базе и т. д.) хранится в environment variables. Для работы с ними установлен пакет phpdotenv. В директории /app проекта находится .env.sample со значениями для dev-окружения. Он копируется в app/.env. Переменные для серверов хранятся в настройках GitHub и экспортируются при выкладке. В разработке части API (app/genes) соблюдались правила методологии PSR. Проект разрабатывался близко к принципам слоеной архитектуры, соблюдалась изоляцию логики от фреймворка и инфраструктуры.

В настоящий момент приложение больше не поддерживается. Большая часть эндпоинтов перенесена в новый API, но часть эндпоинтов реализована в этом старом проекте. Редирект для PHP API сделан на уровне конфига nginx. Если Python API возвращает 404, тогда запрос передается в PHP API.

Новый REST API на Python 3, разработанный на фреймворке FastAPI.

Консольные скрипты

Консольные скрипты для различных целей, написанные на PHP и Python. В основном это скрипты для парсинга данных из других баз, которые запускаются в CRON по расписанию.

  • Получение данных из UniProt
  • Автоматический перевод сущностей при помощи Google Translate API (названия позже можно редактировать в CMS)
  • Получение классов белка из Human Protein Atlas
  • Получение данных о гене из Human Protein Atlas
  • Получение болезней из eDGAR
  • Получение данных уровней экспрессии из NCBI
  • Получение ортологов гена из NCBI
  • Получение id ортологов гена у мух из базы Flybase
  • Получение текстового описания генов NCBI summary из MyGene
  • Получения кодов МКБ спаршенных из базы eDgar
  • Получение категорий заболеваний из базы ВОЗ
  • Получение категорий аннотаций Gene Ontology (GO terms) из QuickGO API

Присваивание механизмов старения к генам по спаршенным GO terms

CMS

open-genes/open-genes-cms

CMS для биологов предназначена для ручного добавления данных из исследований в БД, проверки данных добавленных биологами, а также редактирования данных, собранных автоматически. CMS разрабатывается под нужды биологов. Она написана на PHP 7 (Yii2).

CMS напрямую связана с БД, миграции в БД также пишутся тут. Dev-окружение разворачивается в Docker. На сегодняшний день это одна из самых старых частей проекта наряду с legacy API и узкое место всей инфраструктуры.

Publications Search API

open-genes/og-publications-search-api

Сервис на Node.js, в который перенесена логика поиска научных публикаций по списку генов из базы Open Genes в PubMed и получения информации о статье по DOI. Данные из него получает фронтенд. Для поиска статей в PubMed по генам из базы, сервис делает запрос в API Open Genes и в ESearch API. Для получения данных о статьях по DOI сервис делает запрос в API сервиса Plu.mx.

БД

База данных на MySQL. Изменения в базу применяются при помощи миграций. Данные в базу сохраняются из консольных скриптов во время автоматического парсинга и через CMS — когда биологи вручную редактируют данные.

(описание структуры БД)

DevOps

Инфраструктурные решения для поставки приложений и их развертывания на сервере. Немного отличается для фронтенда и бэкенда.

Для фронтенда CI/CD настраивается через GitHub Actions с возможностью сборки и деплоя для разных сред. После проверки все приложение упаковывается в контейнер Docker, затем устанавливаются и собираются модули npm. После сборки фронтенд-связки приложения переносятся в папку на сервере с помощью rsync.

Для бэкенда CI\CD настраивается через GitHub Actions с возможностью сборки и деплоя для разных окружений. В отличие от внешнего интерфейса, внутренние приложения уже упакованы в контейнеры Docker. Для CMS сборка и развертывание проектов выполняются в отдельных пайплайнах, для API - в одном пайплайне.

CMS и легаси API работают внутри Docker только на локальном компьютере. При развертывании на сервере они используют среду PHP. Новый API работает внутри Docker как на локальном компьютере, так и на сервере. И приложение API, и приложение CMS используют container registry при развертывании. Мы используем DigitalOcean container registry и DockerHub. Мы используем Watchtower для автоматического запуска и остановки контейнеров Docker после развертывания.

(Добавить подробное описание процесса деплоя)

Clone this wiki locally