Skip to content

kruStrip/chemistry-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

177 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chemistry Backend

Backend-инфраструктура и API проекта Chemistry на .NET 8.

Быстрый старт (УП.03)

scripts\setup.bat       :: зависимости backend + frontend
scripts\docker-up.bat   :: полный стек Docker (dev)
scripts\deploy.bat      :: demo/production-стенд (УП.03 этап 3)
scripts\check.bat       :: линтеры и тесты

Развертывание demo-стенда: DEPLOYMENT.md, DEMO_GUIDE.md, scripts\deploy.bat.

Подробнее: INSTALL.md. Makefile: make setup, make docker-up, make check, make format.

Что внутри

  • src/Chemistry.Api — входная точка ASP.NET Core API
  • src/Chemistry.Application — application-слой
  • src/Chemistry.Domain — доменная модель
  • src/Chemistry.Infrastructure — доступ к данным и внешним сервисам
  • tests/Chemistry.Api.Tests — базовые тесты API
  • deploy/ — Docker Compose, Nginx, мониторинг, backup и server bootstrap

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

Полная backend-документация: Documentation/Backend.md.


Запуск (краткая схема)

Сценарий Postgres Команда
Полный локальный стек контейнер postgres из compose docker compose up -d в deploy/
Тот же стек + API смотрит в удалённую БД хостинг / SSH-туннель см. ниже «Удалённая PostgreSQL»
Только зависимости в Docker локальный :5432 или своя строка postgres redis minio ... + dotnet run

Фронтенд локально описан в chemistry-frontend/README.md (обычно npm run dev на порту 3000 → прокси на API 5000).


1. Подготовка deploy/.env

Один раз:

cd deploy
Copy-Item .env.example .env

Проверь минимум: POSTGRES_*, REDIS_PASSWORD, JWT_SECRET (подробности в .env.example). Файл не коммитится.


2. Docker Compose — локальная база и весь стек

cd deploy
docker compose up -d

После старта (первый билд контейнера api на Windows может занять несколько минут):

Сервис URL
API http://localhost:5000
Swagger http://localhost:5000/swagger
Health http://localhost:5000/health
Фронт в контейнере http://localhost:3000
Grafana http://localhost:3001
MinIO Console http://localhost:9001

Порты меняются в deploy/.env (API_PORT, FRONTEND_PORT и т.д.).

Курсы в каталоге: из таблицы Course с IsPublished = true. Автосида нет: на чистой локальной БД список будет пустым, пока не создашь курсы (админка / API) или не подключишь удалённую БД.


3. Удалённая PostgreSQL (те же курсы, что на сервере)

Нужно, чтобы контейнер api подключался к внешней БД, а фронт по-прежнему ходил на http://localhost:3000 с прокси на 5000.

  1. В deploy/.env задай REMOTE_POSTGRES_CONNECTION_STRING (одна строка Npgsql, см. комментарии в .env.example).

    • Прямое подключение: Host=…;Port=5432;Database=…;Username=…;Password=… при необходимости добавь SSL Mode=Require и Trust Server Certificate=true (только для отладки).
    • Через SSH-туннель на хосте: подними ssh -N -L 15432:127.0.0.1:5432 user@server, в строке укажи Host=host.docker.internal;Port=15432;… (для Linux хоста host.docker.internal добавляется в docker-compose.remote-db.yml).
  2. Запуск с оверрайдом (миграции к удалённой БД отключены):

    cd deploy
    docker compose -f docker-compose.yml -f docker-compose.remote-db.yml up -d

    Либо скрипт: deploy/up-remote-db.ps1.

Контейнер postgres всё равно поднимается из-за depends_on у api, но строка подключения API переключена на REMOTE_*. Не храни прод-пароли в репозитории; ограничивай доступ к :5432 по IP/VPN.


4. Локальный dotnet run, зависимости в Docker

Удобно для отладки API в IDE.

cd deploy
docker compose up -d postgres redis minio minio-init loki

Из корня репозитория backend:

$env:ASPNETCORE_ENVIRONMENT="Development"
$env:ConnectionStrings__Postgres="Host=localhost;Port=5432;Database=chemistry_db;Username=chemistry_user;Password=<из deploy/.env>"
$env:POSTGRES_CONNECTION_STRING=$env:ConnectionStrings__Postgres
$env:Redis__ConnectionString="localhost:6379,password=<REDIS_PASSWORD>,abortConnect=false"
$env:JWT_SECRET="<из deploy/.env>"
dotnet run --project src/Chemistry.Api/Chemistry.Api.csproj --urls http://localhost:5000

Для Bash/macOS/Linux те же переменные через export.

Проверка: curl http://localhost:5000/health → в JSON есть "status":"Healthy".


5. Остановка

cd deploy
docker compose down

С удалением томов с данными: docker compose down -v.


Частые проблемы

  • connect ECONNREFUSED 127.0.0.1:5000 на фронте — не запущен API (Docker или dotnet run).
  • Connection string is empty — не заданы ConnectionStrings__Postgres / POSTGRES_CONNECTION_STRING / REMOTE_POSTGRES_CONNECTION_STRING в нужном сценарии.
  • Postgres в Docker падает с 126 / /bin/sh^M — в deploy/postgres/init/*.sh должны быть переводы строк LF (не CRLF); в репозитории это фиксируется через .gitattributes.
  • Redis connection failed — контейнер redis не запущен или неверный REDIS_PASSWORD.
  • Порт занят — поменяй порты в deploy/.env или останови конфликтующий процесс.
  • Внешние интеграции — для локалки оставь mock в .env: Payments__Provider=Mock, email/shipping mock, Captcha__Enabled=false по необходимости.

About

No description, website, or topics provided.

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors