Use bind mounts for pgdata and dp_keys in docker-compose
Matches the production compose so the stack data lives next to the compose file and can be backed up with the server. ticket_uploads stays a named volume to avoid losing existing attachments on pull. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4b34c37ce3
commit
d7743977a1
5 files changed
+19
-5
No files matched your search
@@ -6,6 +6,11 @@
|
||||
**/node_modules/
|
||||
frontend/dist/
|
||||
|
||||
# Данные docker-compose (bind-маунты): в build context не нужны, а pgdata ещё и нечитаем
|
||||
# (владелец — uid postgres), сборка на нём падала бы
|
||||
pgdata/
|
||||
dp_keys/
|
||||
|
||||
# VCS / IDE / env
|
||||
.git/
|
||||
.vs/
|
||||
|
||||
@@ -415,6 +415,10 @@ FodyWeavers.xsd
|
||||
*.sln.iml
|
||||
|
||||
|
||||
# Данные docker-compose (bind-маунты) — БД и key-ring Data Protection
|
||||
/pgdata/
|
||||
/dp_keys/
|
||||
|
||||
# Local environment files (secrets) — keep .env.example, ignore real .env
|
||||
.env
|
||||
.env.local
|
||||
|
||||
@@ -28,9 +28,14 @@
|
||||
```bash
|
||||
cp .env.example .env # заполнить AdminSeed__Password, Jwt__SigningKey и т.д.
|
||||
docker compose up -d --build
|
||||
# → http://localhost:8080 (админ — логин/пароль из .env, AdminSeed__Username/Password)
|
||||
# → http://localhost:8085 (админ — логин/пароль из .env, AdminSeed__Username/Password)
|
||||
```
|
||||
|
||||
БД и key-ring лежат рядом с `docker-compose.yml` (bind-маунты): `./pgdata` — PostgreSQL, `./dp_keys` —
|
||||
key-ring Data Protection (без него не расшифровать пароли нод). Вложения тикетов и картинки — в
|
||||
именованном volume `ticket_uploads`. Бэкап — остановить стек (`docker compose stop`) и скопировать
|
||||
каталог целиком вместе с `.env` (+ содержимое volume `ticket_uploads`).
|
||||
|
||||
Локальная разработка (без Docker для приложения — только `db`):
|
||||
|
||||
```bash
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@ services:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-pnvpanel}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-pnvpanel}
|
||||
volumes:
|
||||
- pgdata:/var/lib/postgresql/data
|
||||
- ./pgdata:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER:-pnvpanel} -d ${POSTGRES_DB:-pnvpanel}']
|
||||
interval: 5s
|
||||
@@ -39,7 +39,7 @@ services:
|
||||
volumes:
|
||||
# Data Protection key-ring (шифрование секретов нод at-rest) должен пережить пересоздание
|
||||
# контейнера — иначе расшифровка паролей нод после рестарта станет невозможна.
|
||||
- dp_keys:/app/keys
|
||||
- ./dp_keys:/app/keys
|
||||
# Вложения тикетов поддержки (скриншоты) — обычные файлы на диске, см. DiskFileStorage.
|
||||
- ticket_uploads:/app/uploads
|
||||
healthcheck:
|
||||
|
||||
@@ -97,11 +97,11 @@ PnvPanel — backend на **ASP.NET Core (.NET 10)** по принципам **C
|
||||
- **Background jobs**: `TrafficSyncService`, `NodeHealthCheckService`, `TrafficRetentionService`,
|
||||
`BillingService` (`BackgroundService` + `PeriodicTimer`).
|
||||
- **Secrets**: `DataProtectionSecretProtector : ISecretProtector` (шифрование паролей нод at-rest,
|
||||
ASP.NET Core Data Protection, key-ring на томе `dp_keys`).
|
||||
ASP.NET Core Data Protection, key-ring в bind-маунте `./dp_keys`).
|
||||
- **Telegram**: `TelegramNotifier : ITelegramNotifier` — отправка DM-уведомлений через `ITelegramBotClient`.
|
||||
- **Storage**: `DiskFileStorage : IFileStorage` — вложения тикетов поддержки и картинки для markdown
|
||||
(`MediaImage`), файлы на диске под GUID-именем (`FileStorage:RootPath`, том `ticket_uploads` в
|
||||
docker-compose, как `dp_keys`).
|
||||
docker-compose).
|
||||
|
||||
> **SignalR-пуш физически лежит в `PnvPanel.Api/Hubs/`, не в `Infrastructure`.**
|
||||
> `SignalRRealtimeNotifier : IRealtimeNotifier` нужен `IHubContext<PanelHub>`, а сам `PanelHub`
|
||||
|
||||
Reference in new issue
Block a user