From 952c6d08d137733680904e4d7691a35821712336 Mon Sep 17 00:00:00 2001 From: karimch-50 Date: Tue, 6 Oct 2026 07:18:59 +0000 Subject: [PATCH 1/2] feat: add Dockerfile and docker-compose for backend service setup (DEV ENV) --- .dockerignore | 6 +++++ Dockerfile.dev | 15 +++++++++++ compose.yaml | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile.dev create mode 100644 compose.yaml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..1d130af --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +target +data +.git +.idea +.vscode +.env diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..b575db6 --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,15 @@ +FROM eclipse-temurin:17-jdk-jammy + +RUN apt-get update \ + && apt-get install -y --no-install-recommends ffmpeg \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY .mvn .mvn +COPY mvnw pom.xml ./ +RUN chmod +x mvnw && ./mvnw dependency:go-offline + +EXPOSE 8080 6891-6896 49001-49006/udp + +CMD ["./mvnw", "spring-boot:run"] diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..bb726ab --- /dev/null +++ b/compose.yaml @@ -0,0 +1,67 @@ +name: filmexa-dev + +services: + db: + image: postgres:15-alpine + environment: + POSTGRES_DB: filmexa_db + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres -d filmexa_db"] + interval: 5s + timeout: 5s + retries: 10 + + backend: + build: + context: . + dockerfile: Dockerfile.dev + env_file: + - ./.env + environment: + SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/filmexa_db + SPRING_DATASOURCE_USERNAME: postgres + SPRING_DATASOURCE_PASSWORD: postgres + IMG_STORAGE_PATH: /data/images + VIDEO_STORAGE_PATH: /data/movies + JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true + ports: + - "8080:8080" + - "6891-6896:6891-6896/tcp" + - "49001-49006:49001-49006/udp" + volumes: + - .:/app + - maven_cache:/root/.m2 + - movie_data:/data/movies + - image_data:/data/images + - subtitle_data:/data/subtitles + depends_on: + db: + condition: service_healthy + restart: unless-stopped + + frontend: + build: + context: ../frontend + dockerfile: Dockerfile.dev + ports: + - "4200:4200" + volumes: + - ../frontend:/app + - frontend_node_modules:/app/node_modules + depends_on: + - backend + restart: unless-stopped + +volumes: + postgres_data: + maven_cache: + frontend_node_modules: + movie_data: + image_data: + subtitle_data: From 2dc2160f2280f3cc331f705606c35e42b392fc44 Mon Sep 17 00:00:00 2001 From: karimch-50 Date: Tue, 6 Oct 2026 07:19:45 +0000 Subject: [PATCH 2/2] fix: restructure docker-compose files for production and development environments --- compose.yaml | 67 ------------------------------------ docker-compose.prod.yml | 42 +++++++++++++++++++++++ docker-compose.yml | 75 ++++++++++++++++++++++++++--------------- 3 files changed, 89 insertions(+), 95 deletions(-) delete mode 100644 compose.yaml create mode 100644 docker-compose.prod.yml diff --git a/compose.yaml b/compose.yaml deleted file mode 100644 index bb726ab..0000000 --- a/compose.yaml +++ /dev/null @@ -1,67 +0,0 @@ -name: filmexa-dev - -services: - db: - image: postgres:15-alpine - environment: - POSTGRES_DB: filmexa_db - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - ports: - - "5432:5432" - volumes: - - postgres_data:/var/lib/postgresql/data - healthcheck: - test: ["CMD-SHELL", "pg_isready -U postgres -d filmexa_db"] - interval: 5s - timeout: 5s - retries: 10 - - backend: - build: - context: . - dockerfile: Dockerfile.dev - env_file: - - ./.env - environment: - SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/filmexa_db - SPRING_DATASOURCE_USERNAME: postgres - SPRING_DATASOURCE_PASSWORD: postgres - IMG_STORAGE_PATH: /data/images - VIDEO_STORAGE_PATH: /data/movies - JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true - ports: - - "8080:8080" - - "6891-6896:6891-6896/tcp" - - "49001-49006:49001-49006/udp" - volumes: - - .:/app - - maven_cache:/root/.m2 - - movie_data:/data/movies - - image_data:/data/images - - subtitle_data:/data/subtitles - depends_on: - db: - condition: service_healthy - restart: unless-stopped - - frontend: - build: - context: ../frontend - dockerfile: Dockerfile.dev - ports: - - "4200:4200" - volumes: - - ../frontend:/app - - frontend_node_modules:/app/node_modules - depends_on: - - backend - restart: unless-stopped - -volumes: - postgres_data: - maven_cache: - frontend_node_modules: - movie_data: - image_data: - subtitle_data: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..1415ddf --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,42 @@ +services: + postgres: + image: postgres:15 + container_name: filmexa-postgres + restart: always + env_file: + - ./.env + volumes: + - postgres_data:/var/lib/postgresql/data + networks: + - shared-network + + backend: + image: mbaanni/filmexa-backend:${IMAGE_TAG:-latest} + container_name: filmexa-backend + restart: always + env_file: + - ./.env + environment: + JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true + volumes: + - movie_data:/data/movies + - image_data:/data/images + - subtitle_data:/data/subtitles + ports: + - "6891-6896:6891-6896/tcp" + - "49001-49006:49001-49006/udp" + depends_on: + - postgres + networks: + - shared-network + +volumes: + postgres_data: + movie_data: + image_data: + subtitle_data: + +networks: + shared-network: + external: true + name: filmexa-net diff --git a/docker-compose.yml b/docker-compose.yml index 8d4f7e6..bb726ab 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,48 +1,67 @@ +name: filmexa-dev services: - - postgres: - image: postgres:15 - container_name: filmexa-postgres - restart: always - env_file: - - ./.env - + db: + image: postgres:15-alpine + environment: + POSTGRES_DB: filmexa_db + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - networks: - - shared-network - - backend: - image: mbaanni/filmexa-backend:${IMAGE_TAG:-latest} - container_name: filmexa-backend - restart: always + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres -d filmexa_db"] + interval: 5s + timeout: 5s + retries: 10 + backend: + build: + context: . + dockerfile: Dockerfile.dev env_file: - ./.env environment: - # Keep the Java torrent client on IPv4. Some cloud hosts advertise IPv6 - # without providing a fully usable IPv6 route to DHT nodes and peers. + SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/filmexa_db + SPRING_DATASOURCE_USERNAME: postgres + SPRING_DATASOURCE_PASSWORD: postgres + IMG_STORAGE_PATH: /data/images + VIDEO_STORAGE_PATH: /data/movies JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true + ports: + - "8080:8080" + - "6891-6896:6891-6896/tcp" + - "49001-49006:49001-49006/udp" volumes: - # Application storage must survive container recreation and redeployment. + - .:/app + - maven_cache:/root/.m2 - movie_data:/data/movies - image_data:/data/images - subtitle_data:/data/subtitles + depends_on: + db: + condition: service_healthy + restart: unless-stopped + + frontend: + build: + context: ../frontend + dockerfile: Dockerfile.dev ports: - - "6891-6896:6891-6896/tcp" - - "49001-49006:49001-49006/udp" + - "4200:4200" + volumes: + - ../frontend:/app + - frontend_node_modules:/app/node_modules depends_on: - - postgres - networks: - - shared-network + - backend + restart: unless-stopped + volumes: postgres_data: + maven_cache: + frontend_node_modules: movie_data: image_data: subtitle_data: - -networks: - shared-network: - external: true - name: filmexa-net