Переведено скачивание клипов на Hikvision SDK (PlayBackByTime_V40 + data callback) — точное время по часам DVR без seek-смещения. Исправлена загрузка SDK-библиотек через self-restart с LD_LIBRARY_PATH. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
106 lines
2.9 KiB
Markdown
106 lines
2.9 KiB
Markdown
# DVR Admin — сборка и деплой Docker-контейнера
|
||
|
||
## Первый запуск (локально)
|
||
|
||
```bash
|
||
cd /home/deeily/git/ISAPI
|
||
docker compose -f dvr_admin_docker/docker-compose.yml up -d --build
|
||
```
|
||
|
||
Приложение будет доступно на http://localhost:5001
|
||
Логин по умолчанию: `admin` / `admin`
|
||
БД и ключ шифрования создаются автоматически в `/home/deeily/docker/dvr_admin/`
|
||
|
||
---
|
||
|
||
## Обновление (пересборка образа)
|
||
|
||
```bash
|
||
cd /home/deeily/git/ISAPI/dvr_admin_docker
|
||
|
||
# Пересобрать и перезапустить (данные сохраняются)
|
||
docker compose up -d --build
|
||
```
|
||
|
||
---
|
||
|
||
## Перенос на другой сервер
|
||
|
||
### 1. Собрать и экспортировать образ
|
||
|
||
```bash
|
||
cd /home/deeily/git/ISAPI
|
||
docker build -f dvr_admin_docker/Dockerfile -t dvr_admin:latest .
|
||
docker save dvr_admin:latest | gzip > dvr_admin_docker/dvr_admin.tar.gz
|
||
```
|
||
|
||
### 2. Скопировать на сервер
|
||
|
||
```bash
|
||
scp dvr_admin.tar.gz user@server:/opt/dvr_admin/
|
||
```
|
||
|
||
Также скопировать `docker-compose.yml`, заменив `build: .` на `image: dvr_admin:latest`:
|
||
|
||
```yaml
|
||
services:
|
||
dvr_admin:
|
||
image: dvr_admin:latest # вместо build: .
|
||
container_name: dvr_admin
|
||
restart: unless-stopped
|
||
ports:
|
||
- "5001:8000"
|
||
volumes:
|
||
- /opt/dvr_admin/data:/data # папка для БД на сервере
|
||
environment:
|
||
- SECRET_KEY=<сгенерировать>
|
||
- DATA_DIR=/data
|
||
- FERNET_KEY=<сгенерировать>
|
||
```
|
||
|
||
### 3. Запустить на сервере
|
||
|
||
```bash
|
||
docker load < dvr_admin.tar.gz
|
||
docker compose up -d
|
||
```
|
||
|
||
---
|
||
|
||
## Обновление на удалённом сервере
|
||
|
||
```bash
|
||
# На локальной машине — пересобрать и экспортировать
|
||
# Запускать из корня проекта — app.py и lib/ берутся из dvr_admin/ автоматически
|
||
cd /home/deeily/git/ISAPI
|
||
# --no-cache обязателен, иначе Docker использует старый кэш и упакует старый app.py
|
||
docker build --no-cache -f dvr_admin_docker/Dockerfile -t dvr_admin:latest .
|
||
docker save dvr_admin:latest | gzip > dvr_admin_docker/dvr_admin.tar.gz
|
||
scp dvr_admin.tar.gz user@server:/opt/dvr_admin/
|
||
|
||
# На сервере — загрузить новый образ и перезапустить (данные сохраняются)
|
||
docker stop dvr_admin && docker rm dvr_admin
|
||
docker load < dvr_admin.tar.gz
|
||
docker compose up -d
|
||
```
|
||
|
||
---
|
||
|
||
## Генерация ключей
|
||
|
||
```bash
|
||
# SECRET_KEY
|
||
python3 -c "import secrets; print(secrets.token_hex(32))"
|
||
|
||
# FERNET_KEY
|
||
python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
|
||
```
|
||
|
||
---
|
||
|
||
## Просмотр логов
|
||
|
||
```bash
|
||
docker logs dvr_admin -f
|
||
```
|