Files
Flamy-Trade_svelte/README.md
T

115 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Flamy Trade
Публичный frontend для `trade.flamy.studio`: лендинг, блог и исследовательский дашборд ML-прогнозов по крипторынку.
Проект построен на SvelteKit, Svelte 5 Runes, Tailwind CSS v4, TypeScript и `lightweight-charts`.
## Требования
```text
Node.js: >=24.0.0 <25
pnpm: >=11.15.1 <12
```
В Windows PowerShell запускайте pnpm через `pnpm.cmd`, если выполнение `.ps1`-скриптов отключено.
## Быстрый старт
```bash
pnpm install
pnpm dev
```
Локальный адрес по умолчанию:
```text
http://localhost:5173
```
## Команды
```bash
pnpm format # автоформатирование
pnpm format:check # проверка форматирования
pnpm lint # ESLint
pnpm check # Svelte + TypeScript
pnpm build # production build
pnpm preview # preview production build
pnpm audit # аудит зависимостей
```
`prepare` намеренно выполняет `svelte-kit sync` без подавления ошибок. Если синхронизация SvelteKit падает, установка зависимостей тоже должна завершаться ошибкой.
## Конфигурация
`.env.example` описывает production-настройки. Для сервера скопируйте его в `.env` и заполните значения без локальных заглушек.
Основные переменные:
```bash
PUBLIC_SITE_URL=https://trade.flamy.studio
PUBLIC_SITE_NAME=Flamy Trade
PUBLIC_SITE_DESCRIPTION=Публичная витрина ML-прогнозов для крипторынка.
PUBLIC_DASHBOARD_DATA_MODE=research-static
HOST=0.0.0.0
PORT=3000
ORIGIN=https://trade.flamy.studio
BODY_SIZE_LIMIT=1M
SHUTDOWN_TIMEOUT=15
APP_STOP_GRACE_PERIOD=20s
APP_IMAGE_REPOSITORY=registry.example.com/flamy-trade
APP_IMAGE_TAG=<git-sha>
BUILD_DATE=<utc-iso-date>
VCS_REF=<git-sha>
APP_HOST_IP=10.20.0.20
APP_PUBLISHED_PORT=18082
NGINX_IMAGE=nginxinc/nginx-unprivileged:1.30.4-alpine-perl@sha256:36fa38fb8f34faba45e7e1857644d6561f2faf45e7ce6b15e97d1a2a1682a0cd
```
`PUBLIC_DASHBOARD_DATA_MODE=research-static` означает, что дашборд показывает исследовательские синтетические данные. Это production-поведение текущего публичного этапа, а не интеграция с реальным торговым API.
## Структура
```text
src/lib/blog/posts.ts # типизированные статьи блога
src/lib/config/site.ts # единая конфигурация сайта, canonical и metadata
src/lib/data/dashboard.ts # provider данных дашборда
src/lib/stores/chartStore.ts # типы графика и research-static генератор
src/lib/components/Chart.svelte # компонент lightweight-charts
src/routes/healthz/+server.ts # health endpoint
src/routes/robots.txt/+server.ts # runtime robots.txt
src/routes/sitemap.xml/+server.ts # runtime sitemap
docker/nginx/default.conf # nginx server config
docker/nginx/includes # общие nginx include-файлы
docs/deployment.md # runbook развёртывания
```
## Production
Production-схема:
```text
Internet -> Caddy -> 10.20.0.20:18082 -> nginx -> app:3000
```
Публикуется только nginx. Node-приложение доступно только во внутренней Docker-сети. Nginx запускается через unprivileged image с `cap_drop: ALL`, `read_only` и `no-new-privileges`.
Подробный порядок развёртывания, Caddy block, smoke-check и rollback описаны в [docs/deployment.md](docs/deployment.md).
## Зависимости
Renovate закрепляет версии и digest Docker-образов, а также ждёт 3 дня перед обновлением свежих релизов. TypeScript 6.x является осознанным compatibility hold до обновления peer constraints в SvelteKit/typescript-eslint.
## Что не входит в текущий этап
- ML-runtime;
- реальный торговый API;
- S3;
- база данных;
- Redis;
- Telegram egress;
- публикация ML API через Caddy.