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.
112 lines
5.2 KiB
Markdown
112 lines
5.2 KiB
Markdown
# Развёртывание
|
||
|
||
## 1. Диаграмма развёртывания
|
||
|
||
```mermaid
|
||
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. Сборка
|
||
|
||
```mermaid
|
||
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:8090` c заголовками
|
||
`Host`, `X-Real-IP`, `X-Forwarded-For`, `X-Forwarded-Proto`, `X-Forwarded-Host`;
|
||
- таймауты 300 с на чтение/отправку.
|
||
|
||
Web-сервис запускается с `server.forward-headers-strategy: framework`,
|
||
поэтому корректно формирует https-редиректы за прокси.
|
||
|
||
## 5. Обновление и данные
|
||
|
||
```mermaid
|
||
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/DEPLOY.md).
|
||
- Порядок наполнения данными (админ → группы → лабораторная → варианты →
|
||
оценки/защита → материалы) описан в [deploy/IMPORT.md](../deploy/IMPORT.md).
|