Add a non-required general comment for a student's lab grade (progress V9, API, admin modal, student card). Empty string is the default. Switch the UI to square corners and bump static asset versions.
5.2 KiB
5.2 KiB
Развёртывание
1. Диаграмма развёртывания
flowchart TB
internet["Интернет"]
subgraph host["Сервер lms.our-place.ru (Ubuntu, Docker)"]
nginx["nginx (host)<br/>80/443, TLS (certbot)<br/>proxy → 127.0.0.1:8090"]
subgraph net["docker network: lms"]
web["container: web<br/>lms-web:latest<br/>:8090"]
gw["container: gateway<br/>lms-gateway:latest<br/>:8080"]
id["container: identity<br/>lms-identity:latest<br/>:8081"]
ac["container: academic<br/>lms-academic:latest<br/>:8082"]
pr["container: progress<br/>lms-progress:latest<br/>:8083"]
pg["container: postgres<br/>postgres:18<br/>:5432"]
vol1[("volume lms_pgdata")]
vol2[("volume lms_assets<br/>/data/content-assets")]
vol3[("volume lms_submissions<br/>/data/submissions")]
end
end
internet -->|HTTPS| nginx
nginx -->|HTTP| web
web --> gw
gw --> id
gw --> ac
gw --> pr
id --> pg
ac --> pg
pr --> pg
ac --> vol2
pr --> vol3
pg --> vol1
Наружу публикуется только web на 127.0.0.1:8090; доступ снаружи — через nginx и TLS.
2. Контейнеры и переменные окружения
| Сервис | Образ / стадия Dockerfile | Порт | Ключевые переменные | Тома |
|---|---|---|---|---|
| postgres | postgres:18 |
5432 (внутр.) | POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD |
lms_pgdata |
| identity | target: identity |
8081 | LMS_DB_URL (схема identity), LMS_DB_USER, LMS_DB_PASSWORD |
— |
| academic | target: academic |
8082 | LMS_DB_URL (academic), LMS_CONTENT_ASSETS_DIR, LMS_JWT_JWK_SET_URI |
lms_assets |
| progress | target: progress |
8083 | LMS_DB_URL (progress), LMS_SUBMISSIONS_DIR, LMS_IDENTITY_URI, LMS_ACADEMIC_URI, LMS_JWT_JWK_SET_URI |
lms_submissions |
| gateway | target: gateway |
8080 | LMS_IDENTITY_URI, LMS_ACADEMIC_URI, LMS_PROGRESS_URI, LMS_JWT_JWK_SET_URI |
— |
| web | target: web |
8090 | LMS_GATEWAY_URL, SERVER_PORT |
— |
Общие для сервисов переменные БД: LMS_DB_USER, LMS_DB_PASSWORD, LMS_DB_NAME.
LMS_JWT_JWK_SET_URI обязателен для gateway, academic и progress —
в контейнерах это http://identity:8081/api/v1/auth/jwks.json (иначе 401).
3. Сборка
flowchart LR
src["Исходники<br/>services/, libs/, web/, buildSrc/"]
subgraph build["Dockerfile, стадия build (eclipse-temurin:21-jdk)"]
g["./gradlew bootJar -x test<br/>(Gradle-кэш в cache-mount)"]
end
jar["bootJar-артефакты"]
subgraph run["Runtime-стадии (eclipse-temurin:21-jre)"]
r["java -jar app.jar<br/>TZ=Europe/Moscow"]
end
src --> g --> jar --> r
Java на сервере не нужна: сборка и запуск — внутри контейнеров.
deploy/deploy.sh up собирает образы и запускает стек из docker-compose.prod.yml.
4. Nginx
deploy/nginx/lms.our-place.ru.conf:
listen 80(TLS добавляетcertbot --nginx),server_name lms.our-place.ru;- ACME-челлендж через
/.well-known/acme-challenge/; client_max_body_size 120m— загрузка ZIP-архивов лабораторных и решений;proxy_pass http://127.0.0.1:8090c заголовкамиHost,X-Real-IP,X-Forwarded-For,X-Forwarded-Proto,X-Forwarded-Host;- таймауты 300 с на чтение/отправку.
Web-сервис запускается с server.forward-headers-strategy: framework,
поэтому корректно формирует https-редиректы за прокси.
5. Обновление и данные
sequenceDiagram
autonumber
participant Dev as Разработчик
participant Git as Gitea
participant Srv as Сервер /opt/LMS
participant DC as docker compose
participant PG as postgres
Dev->>Git: git push origin master
Srv->>Git: git pull
Srv->>DC: ./deploy/deploy.sh up
DC->>DC: docker build (5 стадий)
DC->>PG: старт postgres (volume lms_pgdata)
DC->>DC: старт identity → academic → progress → gateway → web
Note over DC: Flyway применяет миграции автоматически<br/>при старте сервисов (identity V1..V3, academic V1..V5, progress V1..V9; у web миграций нет)
- Локально (
docker-compose.yml) поднимается толькоpostgres; прод-стек —docker-compose.prod.yml. - Резервные копии:
pg_dump(томlms_pgdata) иtarтомовlms_assets,lms_submissions— команды в deploy/DEPLOY.md. - Порядок наполнения данными (админ → группы → лабораторная → варианты → оценки/защита → материалы) описан в deploy/IMPORT.md.