FRONT-END
Nuxt@4
TailwindCSS@4
Typescript
Каждую ночь база данных SQLite моего портфолио автоматически обновляется через выделенный Docker-сервис на VPS.
Этот сервис запускает cron-задачу Node.js, которая формирует и обновляет данные из различных источников, включая Vimeo, GitHub, GitLab API, Puppeteer-скрапинг и статические источники, размещённые на https://storage.rottigni.tech/.
Обновления применяются к SQLite базе через@prisma/clientи отражаются как в файловой системе VPS, так и в контейнере Nuxt3, синхронизированном через Docker volumes.
Контейнер сидирования генерирует логи во время процесса (logs.log, errors.log, debug.log), которые отправляются в моё приватное хранилище https://s3.rottigni.tech/portfolio.rottigni.tech/seeding/logs/на каждом запуске.
Также контейнер создаёт резервную копию SQLite3 перед каждой операцией сидирования, хранящуюся в https://s3.rottigni.tech/portfolio.rottigni.tech/seeding/backup/,, чтобы обеспечить безопасность данных.
Одна из ключевых особенностей сидера — возможность использовать приватное хранилище как кэш-провайдер.
При запросе данных у оригинального источника он загружает новый JSON-ответ в хранилище с UTC-временной меткой в имени файла
(https://s3.rottigni.tech/portfolio.rottigni.tech/seeding/history/)Если кэш включён, сидер читает последний файл из хранилища вместо обращения к исходному источнику.
Всё это управляется через seed.config.ts в корне директории сидирования.
Этот файл определяет, какие сущности и связи нужно сидировать, что кэшировать и куда загружать данные.
В целом система автоматически обновляет SQLite базу портфолио, обеспечивая безопасность данных и минимизируя обращения к внешним источникам через кэш.