zkt25/z1/README.md

143 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Assignment 1 Docker Notes App
## Overview
This project is a simple **Notes Application** built using Docker.
It demonstrates how to run a multi-container application composed of:
- Frontend (Nginx)
- Backend (Flask REST API)
- Database (PostgreSQL)
The application allows users to:
- Add notes
- View saved notes
- Delete notes
All data is stored persistently using a Docker volume.
---
## Architecture
The application consists of three services:
### 1. Frontend
- Technology: Nginx
- Serves static HTML page
- Proxies API requests to backend
- Accessible via browser
### 2. Backend
- Technology: Python (Flask)
- Provides REST API:
- `GET /api/notes`
- `POST /api/notes`
- `DELETE /api/notes/{id}`
- Connects to PostgreSQL database
### 3. Database
- Technology: PostgreSQL 16
- Stores notes data
- Uses persistent Docker volume
---
## Networking
All containers are connected via a Docker virtual network:
- **Network name:** `zkt_net`
This allows communication between:
- frontend → backend
- backend → database
---
## Persistent Storage
- **Volume name:** `zkt_db_data`
- Purpose: store PostgreSQL data
- Ensures data is not lost after stopping containers
---
## Containers Used
| Container Name | Description |
|----------------|------------------------|
| zkt_frontend | Nginx web server |
| zkt_backend | Flask API |
| zkt_db | PostgreSQL database |
---
## Requirements
- Docker
- Docker Compose (plugin)
- Linux / WSL / Docker Desktop
- Web browser
---
## How to Run the Application
### 1. Prepare the application
```bash
./prepare-app.sh
### 2. Start the application
./start-app.sh
### Then open your browser:
http://localhost:8080
### 3. Stop the application
./stop-app.sh
### 4. Remove the application
./remove-app.sh
## Testing the Application
-Open the web interface
-Add a note
-Verify it appears in the list
-Stop and restart the app:
./stop-app.sh
./start-app.sh
-Refresh the page
## If the note is still there → persistence works correctly
## Key Concepts Demonstrated
-Multi-container Docker application
-Docker Compose usage
-Container networking
-Persistent storage with volumes
-REST API communication
-Reverse proxy with Nginx
## Use of Artificial Intelligence
Artificial intelligence was used to:
-Design application architecture
-Generate initial code (frontend, backend, Docker config)
-Explain Docker concepts
-Assist with debugging and troubleshooting
-Prepare documentation
## Tool used:
-ChatGPT
-Gemini
## Pablo Pérez Arcas