From 7dd8c4e589714b0afb9d9233fba068b934ee1e88 Mon Sep 17 00:00:00 2001
From: Mikhail Sennikov <mifls@yandex.ru>
Date: Thu, 25 Jan 2024 17:45:27 +0300
Subject: [PATCH] docker-compose

---
 Backend/config.py                  |  3 --
 Dockerfiles/Dockerfile             | 15 +++---
 ProxyNode/config.py                |  4 +-
 ProxyNode/rtsp/rtsp_placeholder.py |  4 +-
 docker-compose.yml                 | 85 +++++++++++++++++++++++++-----
 5 files changed, 85 insertions(+), 26 deletions(-)

diff --git a/Backend/config.py b/Backend/config.py
index 9770372..ab73115 100644
--- a/Backend/config.py
+++ b/Backend/config.py
@@ -5,9 +5,6 @@ credentials = {
 
 # Does not change server settings, used only for data substitution
 server = {
-    'host': '192.168.1.106',
-    'port': 8080,
-    'rtsp_port': 8554,
     'login_service_host': 'localhost',
     'login_service_port': 8082,
 }
diff --git a/Dockerfiles/Dockerfile b/Dockerfiles/Dockerfile
index 28dca96..105963c 100644
--- a/Dockerfiles/Dockerfile
+++ b/Dockerfiles/Dockerfile
@@ -2,13 +2,14 @@ FROM python:3.11-alpine
 LABEL authors="Mikhail Sennikov"
 
 RUN apk add --no-cache ffmpeg
-RUN pip3 install aiohttp fastapi lxml onvif-zeep-async uvicorn
+RUN pip3 install aiohttp fastapi lxml onvif-zeep-async \
+    uvicorn SQLAlchemy psycopg2 asyncpg bcrypt pytz
 
-COPY Backend /ptz-proxy
-WORKDIR /ptz-proxy/rtsp
-RUN /ptz-proxy/rtsp/download_mediamtx.sh
-
-RUN mkdir -p /ptz-proxy/frontend
+COPY ProxyNode/rtsp/mediamtx.yml
+     ProxyNode/rtsp/download_mediamtx.sh
+     /mediamtx/
+WORKDIR /mediamtx
+RUN /mediamtx/download_mediamtx.sh
 
 WORKDIR /ptz-proxy
-CMD ["python", "-m", "uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "9000"]
+CMD ["python", "run.py"]
diff --git a/ProxyNode/config.py b/ProxyNode/config.py
index 123c8e6..8b6f672 100644
--- a/ProxyNode/config.py
+++ b/ProxyNode/config.py
@@ -8,7 +8,7 @@ port = int(os.getenv("NODE_PORT", 8081))
 
 database = {
     'driver': "postgresql+asyncpg",
-    'host': "localhost",
+    'host': "postgres",
     'port': 5432,
     'database': "postgres",
     'user': "postgres",
@@ -28,3 +28,5 @@ services_to_proxy = {
     # 'Search',
     # 'Replay'
 }
+
+mediamtx_path = "/mediamtx/mediamtx"
diff --git a/ProxyNode/rtsp/rtsp_placeholder.py b/ProxyNode/rtsp/rtsp_placeholder.py
index 21406cf..ddc9a48 100644
--- a/ProxyNode/rtsp/rtsp_placeholder.py
+++ b/ProxyNode/rtsp/rtsp_placeholder.py
@@ -2,6 +2,8 @@ import asyncio
 import subprocess
 from asyncio import Task
 
+import config
+
 
 async def start_rtsp_server():
     ffmpeg = None
@@ -11,7 +13,7 @@ async def start_rtsp_server():
         mediamtx = asyncio.create_task(
             start_service(
                 "MediaMTX",
-                ["rtsp/mediamtx", "rtsp/mediamtx.yml"]
+                [config.mediamtx_path, "rtsp/mediamtx.yml"]
             )
         )
         await asyncio.sleep(3)
diff --git a/docker-compose.yml b/docker-compose.yml
index 29c84dc..9cab212 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,25 +1,82 @@
 version: '3.8'
 
 services:
-  ptx-proxy:
+  postgres:
+    image: postgres
+    environment:
+      POSTGRES_DB: "postgres"
+      POSTGRES_USER: "postgres"
+      POSTGRES_PASSWORD: "password"
+
+  ptz-proxy-master:
     build:
       context: .
       dockerfile: Dockerfiles/Dockerfile
     volumes:
-      - ./Backend/config.py:/ptz-proxy/config.py:ro
-      - ./Frontend/dist:/ptz-proxy/frontend:ro
+      - ./Backend:/ptz-proxy:ro
     ports:
-      - "0.0.0.0:8080:9000"
-      - "0.0.0.0:8554:8554"
+      - "0.0.0.0:8080:8080"
+    depends_on:
+      postgres:
+        condition: service_started
+
+  ptz-proxy-node-1:
+    build:
+      context: .
+      dockerfile: Dockerfiles/Dockerfile
+    volumes:
+      - ./ProxyNode:/ptz-proxy:ro
+    ports:
+      - "0.0.0.0:8081:8081"
+      - "0.0.0.0:8551:8554"
+    depends_on:
+      ptz-proxy-master:
+        condition: service_started
+
+  ptz-proxy-node-2:
+    build:
+      context: .
+      dockerfile: Dockerfiles/Dockerfile
+    volumes:
+      - ./ProxyNode:/ptz-proxy:ro
+    ports:
+      - "0.0.0.0:8083:8081"
+      - "0.0.0.0:8553:8554"
     depends_on:
-      frontend-builder:
-        condition: service_completed_successfully
+      ptz-proxy-master:
+        condition: service_started
 
-  frontend-builder:
-    image: node:alpine
+  ptz-proxy-node-3:
+    build:
+      context: .
+      dockerfile: Dockerfiles/Dockerfile
     volumes:
-      - ./Frontend:/ptz-proxy/frontend:rw
-    working_dir: /ptz-proxy/frontend
-    command: >
-      /bin/sh -c 
-      "npm install && npm run build && npm prune --production"
+      - ./ProxyNode:/ptz-proxy:ro
+    ports:
+      - "0.0.0.0:8083:8081"
+      - "0.0.0.0:8553:8554"
+    depends_on:
+      ptz-proxy-master:
+        condition: service_started
+
+  ptz-proxy-node-4:
+    build:
+      context: .
+      dockerfile: Dockerfiles/Dockerfile
+    volumes:
+      - ./ProxyNode:/ptz-proxy:ro
+    ports:
+      - "0.0.0.0:8084:8081"
+      - "0.0.0.0:8554:8554"
+    depends_on:
+      ptz-proxy-master:
+        condition: service_started
+
+#  frontend-builder:
+#    image: node:alpine
+#    volumes:
+#      - ./Frontend:/ptz-proxy/frontend:rw
+#    working_dir: /ptz-proxy/frontend
+#    command: >
+#      /bin/sh -c
+#      "npm install && npm run build && npm prune --production"
-- 
GitLab