From 20cc1576652191e07a04e92ab6c979f920b96974 Mon Sep 17 00:00:00 2001 From: Ethan-clay03 <ethanclay2017@gmail.com> Date: Tue, 19 Nov 2024 11:43:01 +0000 Subject: [PATCH] Create SQL docker and flask docker containers --- .env | 6 +++++- Dockerfile | 9 +++++++++ app/__init__.py | 20 +++++++++++++------- compose.yaml | 33 +++++++++++++++++++++++++++++++++ requirements.txt | 5 +++++ 5 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 Dockerfile create mode 100644 compose.yaml create mode 100644 requirements.txt diff --git a/.env b/.env index b6619f5..9945644 100644 --- a/.env +++ b/.env @@ -1 +1,5 @@ -FLASK_ENV=development \ No newline at end of file +DEVELOPMENT_MODE=True +DATABASE_HOST=localhost +DATABASE_USER=ethan2clay +DATABASE_PASSWORD=Ethan2claY10+$++ +DATABASE_NAME=ethan2clay_prj \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..74a10ea --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM python:3.10-alpine AS builder + +COPY . /flask +WORKDIR ./flask + +RUN pip3 install --no-cache-dir -r requirements.txt + +ENV FLASK_APP=app:create_app +CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"] \ No newline at end of file diff --git a/app/__init__.py b/app/__init__.py index 4b2f4dd..e84d0a1 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -4,6 +4,8 @@ from flask import Flask from config import Config from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate +from dotenv import load_dotenv +import os db = SQLAlchemy() migrate = Migrate() @@ -12,15 +14,19 @@ def create_app(config_class=Config): app = Flask(__name__) app.config.from_object(config_class) - #ONLY TURN ON FOR DEBUGGING - app.config['DEBUG'] = True + #Only enabled when DEVELOPMENT_MODE in .env is set to true + development_mode = os.getenv("DEVELOPMENT_MODE") - # Database connection , TO DO: Encrypt and move into .env fix where connection only works when remoted into database - db_user = 'ethan2clay' - db_password = 'Ethan2claY10+$++' - db_name = 'ethan2clay_prj' + if (development_mode.lower() == 'true'): + app.config['DEBUG'] = True + + load_dotenv() + db_host = os.getenv("DATABASE_HOST") + db_user = os.getenv("DATABASE_USER") + db_password = os.getenv("DATABASE_PASSWORD") + db_name = os.getenv("DATABASE_NAME") - app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{db_user}:{db_password}@localhost/{db_name}".format(db_user=db_user, db_password=db_password, db_name=db_name) + app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}".format(db_user=db_user, db_password=db_password, db_name=db_name) db.init_app(app) #Run Flask migrations if any available diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..76a9152 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,33 @@ +services: + flask: + build: + context: . + dockerfile: Dockerfile + stop_signal: SIGINT + ports: + - '5000:5000' + volumes: + - ./app:/app + environment: + - FLASK_APP=app:create_app + - DATABASE_HOST=database + - DATABASE_USER=user + - DATABASE_PASSWORD=userpassword + - DATABASE_NAME=mydatabase + depends_on: + - database + + database: + image: mysql:8.3 + ports: + - '3306:3306' + environment: + MYSQL_ROOT_PASSWORD: rootpassword + MYSQL_DATABASE: mydatabase + MYSQL_USER: user + MYSQL_PASSWORD: userpassword + volumes: + - mysql_data:/var/lib/mysql + +volumes: + mysql_data: \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b71cdc4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +Flask>=3.0.0 +flask_sqlalchemy +flask_migrate +pymysql +python-dotenv \ No newline at end of file -- GitLab