From dbcb53e4b5d0fdad1eba2f343e0a903d4a40b51a Mon Sep 17 00:00:00 2001 From: Pavel Umansky Date: Wed, 8 Apr 2026 19:22:13 +0200 Subject: [PATCH] finish zadanie1 --- z1/README.md | 52 +++++++++++++++++++++++++++++++++++ z1/docker-compose.yml | 32 +++++++++++++++++++-- z1/fluent-bit/fluent-bit.conf | 12 ++++++++ z1/nginx/nginx.conf | 18 +++++++++++- z1/prepare-app.sh | 4 +++ z1/remove-app.sh | 4 +++ z1/start-app.sh | 3 ++ z1/stop-app.sh | 2 ++ 8 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 z1/fluent-bit/fluent-bit.conf create mode 100644 z1/prepare-app.sh create mode 100644 z1/remove-app.sh create mode 100644 z1/start-app.sh create mode 100644 z1/stop-app.sh diff --git a/z1/README.md b/z1/README.md index e69de29..43cc366 100644 --- a/z1/README.md +++ b/z1/README.md @@ -0,0 +1,52 @@ +# Bank API + +REST API pre základné bankové operácie postavené na Flask, MongoDB a Nginx. + +## Architektúra + +- **Nginx** — reverse proxy, statický frontend +- **Backend** — Flask + Gunicorn REST API +- **MongoDB** — databáza +- **Fluent Bit** — zber logov + +## Požiadavky + +- Docker +- Docker Compose + +## Spustenie + +```bash +chmod +x prepare-app.sh start-app.sh stop-app.sh remove-app.sh +./prepare-app.sh +./start-app.sh +``` + +Aplikácia bude dostupná na **http://localhost:80** + +## Zastavenie + +```bash +./stop-app.sh +``` + +Opätovné spustenie: `./start-app.sh` — dáta v databáze sa zachovajú. + +## Odstránenie + +```bash +./remove-app.sh +``` + +## API endpointy + +Všetky endpointy prijímajú POST s JSON telom. + +| Endpoint | Popis | Parametre | +|---|---|---| +| `/api/register` | Registrácia | `username`, `password` | +| `/api/add` | Vklad | `username`, `password`, `amount` | +| `/api/transfer` | Prevod | `username`, `password`, `to`, `amount` | +| `/api/balance` | Zostatok | `username`, `password` | +| `/api/take_loan` | Pôžička | `username`, `password`, `amount` | +| `/api/pay_loan` | Splátka | `username`, `password`, `amount` | \ No newline at end of file diff --git a/z1/docker-compose.yml b/z1/docker-compose.yml index c5015b8..67163aa 100644 --- a/z1/docker-compose.yml +++ b/z1/docker-compose.yml @@ -7,12 +7,40 @@ services: - "80:80" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro + depends_on: + - fluent-bit + logging: + # используемый драйвер логгирования + driver: "fluentd" + options: + # куда посылать лог-сообщения, необходимо что бы адрес + # совпадал с настройками плагина forward + fluentd-address: localhost:24224 + # теги используются для маршрутизации лог-сообщений, тема + # маршрутизации будет рассмотрена ниже + tag: nginx.logs command: [nginx-debug, '-g', 'daemon off;'] + restart: unless-stopped db: build: context: ./backend/db - ports: - - "27017:27017" + volumes: + - mongo-data:/data/db + restart: unless-stopped backend: build: context: ./backend + restart: unless-stopped + + fluent-bit: + container_name: fluent-bit + image: fluent/fluent-bit + ports: + - 24224:24224 + - 24224:24224/udp + volumes: + - ./fluent-bit/fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf + restart: unless-stopped + +volumes: + mongo-data: \ No newline at end of file diff --git a/z1/fluent-bit/fluent-bit.conf b/z1/fluent-bit/fluent-bit.conf new file mode 100644 index 0000000..6b7f0c1 --- /dev/null +++ b/z1/fluent-bit/fluent-bit.conf @@ -0,0 +1,12 @@ +[INPUT] + Name forward + +[OUTPUT] + Name stdout + Match * +[FILTER] + Name record_modifier + # для всех лог-сообщений + Match * + # оставить только поле log + Whitelist_key log diff --git a/z1/nginx/nginx.conf b/z1/nginx/nginx.conf index 42df12e..3d8ba53 100644 --- a/z1/nginx/nginx.conf +++ b/z1/nginx/nginx.conf @@ -1,10 +1,26 @@ +user nginx; +worker_processes 1; +error_log /var/log/nginx/error.log warn; events { worker_connections 1024; } http { upstream backend { server backend:5000; -} + } + + include /etc/nginx/mime.types; + default_type application/octet-stream; +log_format main 'access_log $remote_addr "$request" ' + '$status "$http_user_agent"'; + +access_log /var/log/nginx/access.log main; + +sendfile on; + +keepalive_timeout 65; + + server { listen 80 default_server; listen [::]:80; diff --git a/z1/prepare-app.sh b/z1/prepare-app.sh new file mode 100644 index 0000000..50e537f --- /dev/null +++ b/z1/prepare-app.sh @@ -0,0 +1,4 @@ +#!/bin/bash +docker network create app-network 2>/dev/null +docker volume create mongo-data 2>/dev/null +docker compose build diff --git a/z1/remove-app.sh b/z1/remove-app.sh new file mode 100644 index 0000000..c6b5a6c --- /dev/null +++ b/z1/remove-app.sh @@ -0,0 +1,4 @@ +#!/bin/bash +docker compose down --rmi all --volumes +docker volume rm mongo-data 2>/dev/null +docker network rm app-network 2>/dev/null diff --git a/z1/start-app.sh b/z1/start-app.sh new file mode 100644 index 0000000..dc1ebd9 --- /dev/null +++ b/z1/start-app.sh @@ -0,0 +1,3 @@ +#!/bin/bash +docker compose up -d +echo "Aplikácia je dostupná na http://localhost:80" diff --git a/z1/stop-app.sh b/z1/stop-app.sh new file mode 100644 index 0000000..0022afb --- /dev/null +++ b/z1/stop-app.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker compose stop