Use Video label in PDF links and preserve deployment safeguards

This commit is contained in:
DmitriyFadin
2026-10-13 22:51:20 +03:00
parent ad3cd6f671
commit 98770521b1
4 changed files with 40 additions and 3 deletions
+4
View File
@@ -32,6 +32,10 @@
## Работа с проектом
- С 13 октября 2026 года сервер содержит рабочие данные. Не выполнять серверные операции без согласованной задачи; прежнее разрешение на первоначальное развёртывание не разрешает последующие обновления.
- Миграции должны сохранять текущие данные. Перед применением на сервере проверить SQL, создать резервную копию и проверить её восстановление и миграцию в отдельной тестовой БД. Не запускать тесты на рабочей базе.
- Не пересоздавать рабочую БД, не удалять её тома и не заменять её локальной базой. Потенциально разрушающие изменения требуют отдельного согласования и плана переноса данных.
- Учитывать автоматическое применение миграций при запуске приложения: перезапуск новой версии также может изменить БД. При обнаружении проблемы на сервере остановиться и спросить пользователя до исправления.
- После изменений выполнять сборку и проверки, соответствующие изменению.
- Поддерживать README и `.env.example` в соответствии с реальной конфигурацией.
- Не заявлять о проверке Docker, БД, PDF или UI, если соответствующая проверка не выполнена.
+1 -1
View File
@@ -14,6 +14,6 @@ FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
RUN apt-get update && apt-get install -y --no-install-recommends fonts-dejavu-core libgssapi-krb5-2 && rm -rf /var/lib/apt/lists/*
WORKDIR /app
RUN mkdir -p /app/keys && chown $APP_UID /app/keys
COPY --from=build /app ./
COPY --from=build --chown=$APP_UID:$APP_UID /app ./
USER $APP_UID
ENTRYPOINT ["dotnet", "TrainingPlanner.Web.dll"]
+34
View File
@@ -0,0 +1,34 @@
# Развёртывание на сервере
## Текущее правило эксплуатации — 13 октября 2026
Пользователь завершил настройку сервера; база содержит рабочие данные. Описанные ниже параметры первоначального развёртывания — историческая справка, а не подтверждение текущей конфигурации.
Без согласованной задачи сервер не изменять. Перед миграцией проверить SQL на потерю данных, создать резервную копию, проверить её восстановление и выполнение миграции в отдельной тестовой БД. Сохранность текущих данных обязательна. Не пересоздавать базу, не удалять тома и не подменять рабочие данные локальными. Учитывать миграции, автоматически выполняемые при старте приложения. При обнаружении проблемы остановиться и согласовать дальнейшие действия.
## Первоначальное развёртывание — 30 сентября 2026
- Подключение: `ssh trainplan` (алиас из локальной SSH-конфигурации).
- Каталог развёртывания: `/home/dimass/training-planner`.
- Исходники: подкаталог `repository`, ветка `main`, коммит `ad3cd6f`.
- Compose-проект: `trainingplanner`, отдельные сеть и тома.
- Приложение: `127.0.0.1:8001`, только через локальный reverse proxy.
- PostgreSQL не публикует порт на хосте. При первоначальном развёртывании была создана пустая база; сейчас она содержит рабочие данные.
- `compose.yaml`, `.env`, `app.env` и `access.txt` находятся вне Git-репозитория.
- Логин тренера: `trainer`; сгенерированный пароль находится в `access.txt`, доступном только владельцу.
## Управление
```sh
cd /home/dimass/training-planner
docker compose ps
docker compose logs --tail 100 app
```
Не выполнять `docker system prune`, `docker volume prune` или `docker compose down -v`: на сервере есть другие проекты, а тома этого приложения содержат базу и ключи авторизации.
## HTTPS — исторические результаты проверки
При проверке 30 сентября 2026 года Nginx для `trainplan.samsonium.ru` слушает только порт 80 и проксирует на `http://127.0.0.1:8001`. На порту 443 выдаётся сертификат `search.samsonium.ru`, истёкший 19 ноября 2025 года. Конфигурация Nginx и сертификаты при развёртывании приложения не изменяются.
На момент первоначальной проверки требовалась настройка HTTPS администратором. 13 октября пользователь сообщил, что завершил настройку сервера; повторная проверка не выполнялась. Прежнюю проблему сертификата не считать актуальной без новой проверки в рамках согласованной задачи.
@@ -85,8 +85,7 @@ public class PdfWeekTableBuilder(PdfOptions options)
if (!string.IsNullOrWhiteSpace(exercise.VideoUrl))
{
var link = row.Cells[6].AddParagraph().AddHyperlink(exercise.VideoUrl, HyperlinkType.Url);
// Invisible break opportunities keep long URLs within the cell; the target stays unchanged.
link.AddText(string.Join("\u200B", exercise.VideoUrl.Select(character => character.ToString())));
link.AddText("Видео");
link.Font.Color = Color.Parse(options.AccentColor);
link.Font.Underline = Underline.Single;
}