# DVR Admin — сборка и деплой Docker-контейнера ## ⚠️ Требования для сборки Проект использует **wine + PlayCtrl.dll** для декодирования encrypted H.265+ потоков Hikvision. Для работы этого функционала: 1. **Папка `dvr_admin/wine_playm4/`** должна присутствовать в build-контексте при сборке образа. Она содержит проприетарные Hikvision DLL (PlayCtrl.dll, SystemTransform.dll, slf.dll и т.д.) и скомпилированный `playm4_pb_server.exe`. Папка в gitignore — копируй её вручную с dev-машины на сборочную. 2. **Image size** ≈ 1.5GB (wine + wine32 + xvfb + DLLs). Если encrypted потоки не нужны, можно удалить эту секцию из Dockerfile. Если папка `wine_playm4/` отсутствует, сборка упадёт на `COPY`. Тогда либо добавь её, либо удали 2 строки с wine_playm4 из Dockerfile (playback encrypted H.265+ работать не будет, всё остальное — да). --- ## Первый запуск (локально) ```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 ```