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..V10, academic V1..V12, progress V1..V9 и V11..V13; у 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).
|