From da76953f9f3e26b7d7792dc9f88818c1ff82a626 Mon Sep 17 00:00:00 2001 From: tmanik Date: Wed, 7 Aug 2024 14:32:17 -0400 Subject: [PATCH] Created new folder for flask app Basic version of flask app. Will ned to improve upon --- .gitignore | 3 +++ 02-advanced-deployment/docker-compose.yml | 8 +++++- 03-flask-app/Dockerfile | 18 +++++++++++++ 03-flask-app/docker-compose.yml | 14 ++++++++++ 03-flask-app/flask_app/app.py | 28 ++++++++++++++++++++ 03-flask-app/flask_app/static/styles.css | 22 +++++++++++++++ 03-flask-app/flask_app/templates/index.html | 14 ++++++++++ 03-flask-app/flask_app/templates/layout.html | 12 +++++++++ 03-flask-app/requirements.txt | 8 ++++++ 9 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 03-flask-app/Dockerfile create mode 100644 03-flask-app/docker-compose.yml create mode 100644 03-flask-app/flask_app/app.py create mode 100644 03-flask-app/flask_app/static/styles.css create mode 100644 03-flask-app/flask_app/templates/index.html create mode 100644 03-flask-app/flask_app/templates/layout.html create mode 100644 03-flask-app/requirements.txt diff --git a/.gitignore b/.gitignore index bf79bb2..cc5acd4 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ # ignore drafts 01-basic-deployment-new/* 02-advanced-deployment-old/* + +# ignore all files that are .env +*.env \ No newline at end of file diff --git a/02-advanced-deployment/docker-compose.yml b/02-advanced-deployment/docker-compose.yml index 0d1b711..9d7ef89 100644 --- a/02-advanced-deployment/docker-compose.yml +++ b/02-advanced-deployment/docker-compose.yml @@ -6,6 +6,8 @@ services: POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: ${DB_NAME} + networks: + - mynetwork ports: - "5432:5432" volumes: @@ -61,4 +63,8 @@ services: volumes: pgdata: - shared-data: \ No newline at end of file + shared-data: + +networks: + mynetwork: + driver: bridge \ No newline at end of file diff --git a/03-flask-app/Dockerfile b/03-flask-app/Dockerfile new file mode 100644 index 0000000..77f70ed --- /dev/null +++ b/03-flask-app/Dockerfile @@ -0,0 +1,18 @@ +# Base image +FROM python:3.11 + +# Set working directory +WORKDIR /app + +# Copy requirements and install +COPY requirements.txt . +RUN pip install -r requirements.txt + +# Copy all files +COPY . . + +# Expose port for Flask +EXPOSE 5000 + +# Run Flask app +CMD ["python", "flask_app/app.py"] diff --git a/03-flask-app/docker-compose.yml b/03-flask-app/docker-compose.yml new file mode 100644 index 0000000..5e2b059 --- /dev/null +++ b/03-flask-app/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3' +services: + flask_app: + build: . + ports: + - "5000:5000" + env_file: + - .env + networks: + - 02-advanced-deployment_mynetwork + +networks: + 02-advanced-deployment_mynetwork: + external: true diff --git a/03-flask-app/flask_app/app.py b/03-flask-app/flask_app/app.py new file mode 100644 index 0000000..262cf44 --- /dev/null +++ b/03-flask-app/flask_app/app.py @@ -0,0 +1,28 @@ +import os +from flask import Flask, render_template +from sqlalchemy import create_engine +import pandas as pd +from dotenv import load_dotenv + +# Load environment variables from .env file +load_dotenv() + +app = Flask(__name__) + +# Retrieve the database URL from environment variables +DATABASE_URL = os.getenv('DATABASE_URL') +engine = create_engine(DATABASE_URL) + +@app.route('/') +def index(): + # Fetch data from database + query = "SELECT * FROM weather LIMIT 10;" + df = pd.read_sql(query, engine) + + # Convert data to HTML table + data = df.to_html(classes='table table-striped') + + return render_template('index.html', table=data) + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000) diff --git a/03-flask-app/flask_app/static/styles.css b/03-flask-app/flask_app/static/styles.css new file mode 100644 index 0000000..987fef8 --- /dev/null +++ b/03-flask-app/flask_app/static/styles.css @@ -0,0 +1,22 @@ +body { + font-family: Arial, sans-serif; +} + +.container { + width: 80%; + margin: auto; +} + +table { + width: 100%; + border-collapse: collapse; +} + +th, td { + border: 1px solid #ddd; + padding: 8px; +} + +th { + background-color: #f2f2f2; +} diff --git a/03-flask-app/flask_app/templates/index.html b/03-flask-app/flask_app/templates/index.html new file mode 100644 index 0000000..74b43de --- /dev/null +++ b/03-flask-app/flask_app/templates/index.html @@ -0,0 +1,14 @@ + + + + + Data Visualization + + + +

Data Visualization

+
+ {{ table|safe }} +
+ + diff --git a/03-flask-app/flask_app/templates/layout.html b/03-flask-app/flask_app/templates/layout.html new file mode 100644 index 0000000..7d5a451 --- /dev/null +++ b/03-flask-app/flask_app/templates/layout.html @@ -0,0 +1,12 @@ + + + + + Flask App + + + + {% block content %} + {% endblock %} + + diff --git a/03-flask-app/requirements.txt b/03-flask-app/requirements.txt new file mode 100644 index 0000000..83b5a6e --- /dev/null +++ b/03-flask-app/requirements.txt @@ -0,0 +1,8 @@ +Flask==1.1.4 +Werkzeug==0.16.1 +python-dotenv==1.0.0 +pandas +numpy +sqlalchemy==2.0.0 +psycopg2-binary==2.9.6 +markupsafe==2.0.1