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