Commit 06a4454f authored by Markus Mößler's avatar Markus Mößler
Browse files

added some production setup

parent 98539725
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ DB_NAME = os.getenv("DB_NAME", "postgres")
DB_USER = os.getenv("DB_USER", "postgres")
DB_PASSWORD = os.getenv("POSTGRES_PASSWORD", "postgres")


def get_connection():
    return psycopg2.connect(
        host=DB_HOST,
@@ -22,6 +23,7 @@ def get_connection():
        password=DB_PASSWORD
    )


def init_db():
    with get_connection() as conn:
        with conn.cursor() as cur:

doc/some_notes.md

0 → 100644
+70 −0
Original line number Diff line number Diff line

# Some Notes

## Commands

Prepare frontend

```bash
docker run -it --rm -v $(pwd)/frontend:/app -w /app node:20 bash
```

Check database

```bash
docker exec -it yf-web-app-db-1 psql -U postgres -d postgres
```

Insert data into database

```bash
curl -X POST http://localhost:8000/api/nvda/fetch
```

Use production setup based on nginxx

```bash
docker compose -f docker-compose.prod.yml up
```

## Vidualization

### Development

```mermaid
graph TD
    User["User Browser"]
    Frontend["React Frontend (Port 3000)"]
    Backend["Python Tornado Backend (Port 8000)"]
    Database["PostgreSQL Database (Port 5432)"]

    subgraph Docker Network ["Docker Compose Network: app-network"]
        Frontend -->|"HTTP Request to /api/nvda"| Backend
        Backend -->|"SQL SELECT"| Database
        Backend -->|"SQL INSERT (via yfinance fetch)"| Database
        Backend -->|"JSON Response"| Frontend
    end

    User -->|"Accesses localhost:3000"| Frontend
    Frontend -->|"Renders chart from API data"| User
```

### Production

```mermaid
graph TD
    User["User Browser"]
    NGINX["NGINX (Port 80)"]
    Frontend["Static React Files (/usr/share/nginx/html)"]
    Backend["Python Tornado Backend (Port 8000)"]
    Database["PostgreSQL (Port 5432)"]

    subgraph Docker Network: app-network
        NGINX -->|"Serves static files"| Frontend
        NGINX -->|"Proxies /api requests"| Backend
        Backend -->|"SQL Queries"| Database
    end

    User -->|"HTTP GET /"| NGINX
    User -->|"HTTP GET /api/nvda"| NGINX
```
 No newline at end of file
+42 −0
Original line number Diff line number Diff line
version: "3.8"

services:
  db:
    image: postgres
    environment:
      DB_HOST: db
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
    volumes:
      - ./pg_data:/var/lib/postgresql/data:rw
    networks:
      - app-network

  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    environment:
      DB_HOST: db
      DB_NAME: postgres
      DB_USER: postgres
      POSTGRES_PASSWORD: postgres
    networks:
      - app-network

  nginx:
    image: nginx:alpine
    depends_on:
      - backend
    ports:
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./frontend/build:/usr/share/nginx/html:ro
    networks:
      - app-network

networks:
  app-network:
    driver: bridge
+0 −2
Original line number Diff line number Diff line
@@ -8,8 +8,6 @@ services:
      DB_NAME: postgres
      DB_USER: postgres
      POSTGRES_PASSWORD: postgres
    ports:
      - "5432:5432"
    volumes:
      - ./pg_data:/var/lib/postgresql/data:rw
    networks:
+31 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
      "name": "gdp-frontend",
      "version": "1.0.0",
      "dependencies": {
        "bootstrap": "^5.3.6",
        "chart.js": "^4.4.0",
        "react": "^18.2.0",
        "react-chartjs-2": "^5.2.0",
@@ -3083,6 +3084,17 @@
        }
      }
    },
    "node_modules/@popperjs/core": {
      "version": "2.11.8",
      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
      "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
      "license": "MIT",
      "peer": true,
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/popperjs"
      }
    },
    "node_modules/@rollup/plugin-babel": {
      "version": "5.3.1",
      "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
@@ -5159,6 +5171,25 @@
      "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
      "license": "ISC"
    },
    "node_modules/bootstrap": {
      "version": "5.3.6",
      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.6.tgz",
      "integrity": "sha512-jX0GAcRzvdwISuvArXn3m7KZscWWFAf1MKBcnzaN02qWMb3jpMoUX4/qgeiGzqyIb4ojulRzs89UCUmGcFSzTA==",
      "funding": [
        {
          "type": "github",
          "url": "https://github.com/sponsors/twbs"
        },
        {
          "type": "opencollective",
          "url": "https://opencollective.com/bootstrap"
        }
      ],
      "license": "MIT",
      "peerDependencies": {
        "@popperjs/core": "^2.11.8"
      }
    },
    "node_modules/brace-expansion": {
      "version": "1.1.11",
      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
Loading