From 5a6c34e1473a114f298160ae102344259b88ee97 Mon Sep 17 00:00:00 2001 From: Aaron <Aaron8.jones@live.uwe.ac.uk> Date: Thu, 13 Mar 2025 21:15:40 +0000 Subject: [PATCH] Updated to include DB. --- ActualProjectCode/DjangoProject/Dockerfile | 11 +- ActualProjectCode/DjangoProject/db.sqlite3 | 0 .../DjangoProject/docker-compose.yml | 43 ++++-- .../DjangoProject/requirements.txt | Bin 130 -> 164 bytes .../DjangoProject/server/settings.py | 10 +- .../DjangoProject/server/urls.py | 4 +- .../backend/server/settings/__init__.py | 12 -- .../backend/server/settings/local.py | 128 ---------------- .../backend/server/settings/production.py | 139 ------------------ 9 files changed, 50 insertions(+), 297 deletions(-) delete mode 100644 ActualProjectCode/DjangoProject/db.sqlite3 delete mode 100644 mainDockerImage/backend/server/settings/__init__.py delete mode 100644 mainDockerImage/backend/server/settings/local.py delete mode 100644 mainDockerImage/backend/server/settings/production.py diff --git a/ActualProjectCode/DjangoProject/Dockerfile b/ActualProjectCode/DjangoProject/Dockerfile index 483a879c..2e49ee69 100644 --- a/ActualProjectCode/DjangoProject/Dockerfile +++ b/ActualProjectCode/DjangoProject/Dockerfile @@ -1,12 +1,17 @@ # Use the official Python image -FROM python:3.12 +FROM python:3.12-alpine3.20 # Set the working directory WORKDIR /app # Copy and install dependencies COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt + +RUN apk add --update --upgrade --no-cache postgresql-client && \ + apk add --update --upgrade --no-cache --virtual .tmp \ + build-base postgresql-dev + +RUN pip install --no-cache-dir -r requirements.txt && apk del .tmp # Copy the project files COPY . . @@ -15,4 +20,4 @@ COPY . . EXPOSE 8000 # Run the Django development server -CMD ["python", "manage.py", "runserver", "0.0.0.0:7000"] \ No newline at end of file +CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] \ No newline at end of file diff --git a/ActualProjectCode/DjangoProject/db.sqlite3 b/ActualProjectCode/DjangoProject/db.sqlite3 deleted file mode 100644 index e69de29b..00000000 diff --git a/ActualProjectCode/DjangoProject/docker-compose.yml b/ActualProjectCode/DjangoProject/docker-compose.yml index 0dbf18c1..da720a0f 100644 --- a/ActualProjectCode/DjangoProject/docker-compose.yml +++ b/ActualProjectCode/DjangoProject/docker-compose.yml @@ -1,18 +1,37 @@ version: '3.8' services: web: - build: . + build: + context: . ports: - - "7000:7000" + - "8000:8000" volumes: - - .:/app + - .:/app + command: > + sh -c "python manage.py migrate && + python manage.py runserver 0.0.0.0:8000" environment: - - DEBUG=True -# depends_on: -# - db -# db: -# image: postgres -# environment: -# POSTGRES_USER: user -# POSTGRES_PASSWORD: password -# POSTGRES_DB: mydb + - DB_HOST=db + - DB_NAME=db + - DB_USER=user + - DB_PASSWORD=password + depends_on: + db: + condition: service_healthy + + db: + image: postgres + volumes: + - db-data:/var/lib/postgresql/data + environment: + POSTGRES_USER: user + POSTGRES_PASSWORD: password + POSTGRES_DB: db + healthcheck: + test: ["CMD", "pg_isready", "-q", "-d", "db", "-U", "user"] + interval: 5s + timeout: 5s + retries: 5 + +volumes: + db-data: diff --git a/ActualProjectCode/DjangoProject/requirements.txt b/ActualProjectCode/DjangoProject/requirements.txt index 09ed45eca833e4b3c124887702da9690fb4c5ead..02400a1d8af30e7a2db6300c1d7a5217861c806b 100644 GIT binary patch delta 41 wcmZo-T*5e^NvVLLn4yv(nIWH{fFYeBnjx7Xmcf?6mcf`okHLsRkHMG$0M4-o>i_@% delta 6 NcmZ3&*u*%Y2>=I>0y_Wz diff --git a/ActualProjectCode/DjangoProject/server/settings.py b/ActualProjectCode/DjangoProject/server/settings.py index 98df23a0..38c9d5e1 100644 --- a/ActualProjectCode/DjangoProject/server/settings.py +++ b/ActualProjectCode/DjangoProject/server/settings.py @@ -37,6 +37,8 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django.contrib.admin', + 'core', ] MIDDLEWARE = [ @@ -76,8 +78,12 @@ WSGI_APPLICATION = 'server.wsgi.application' DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': os.environ.get("DB_NAME"), + 'USER': os.environ.get("DB_USER"), + "PASSWORD": os.environ.get("DB_PASSWORD"), + "HOST": os.environ.get("DB_HOST"), + "PORT": 5432, } } diff --git a/ActualProjectCode/DjangoProject/server/urls.py b/ActualProjectCode/DjangoProject/server/urls.py index 1f30cc33..13c75576 100644 --- a/ActualProjectCode/DjangoProject/server/urls.py +++ b/ActualProjectCode/DjangoProject/server/urls.py @@ -19,12 +19,14 @@ from django.urls import path from django.contrib import admin from django.urls import path +from django.urls import include from django.shortcuts import render def home(request): return render(request, 'index.html') + urlpatterns = [ - # path('admin/', admin.site.urls), + path('admin/', admin.site.urls), path('', home, name='home'), ] \ No newline at end of file diff --git a/mainDockerImage/backend/server/settings/__init__.py b/mainDockerImage/backend/server/settings/__init__.py deleted file mode 100644 index 9d2afefe..00000000 --- a/mainDockerImage/backend/server/settings/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# decides whether we are using production settings or local - -import os - -def get_secret(secret_id, backup=None): - return os.getenv(secret_id, backup) - -# Keep at the end -if get_secret('PIPELINE') == 'production': - from .production import * -else: - from .local import * \ No newline at end of file diff --git a/mainDockerImage/backend/server/settings/local.py b/mainDockerImage/backend/server/settings/local.py deleted file mode 100644 index 42d10516..00000000 --- a/mainDockerImage/backend/server/settings/local.py +++ /dev/null @@ -1,128 +0,0 @@ -""" -Django settings for server project. - -Generated by 'django-admin startproject' using Django 5.1.6. - -For more information on this file, see -https://docs.djangoproject.com/en/5.1/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/5.1/ref/settings/ -""" - -from pathlib import Path -import os - - -# Build paths inside the project like this: BASE_DIR / 'subdir'. -BASE_DIR = Path(__file__).resolve().parent.parent.parent.parent - -STATIC_URL = "/static/" -STATICFILES_DIRS = [BASE_DIR / 'server'/'frontend' / 'static'] -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'django-insecure-g)$()*#j2%^=7c#efw5(gjr$%du8=9mx&tg&3ivtt#s1w%dk*m' - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = [] - - -# Application definition - -INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', -] - -MIDDLEWARE = [ - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', -] - -ROOT_URLCONF = 'server.urls' - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [ - BASE_DIR / 'server' / 'frontend' / 'templates', # Updated path - ], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] - -WSGI_APPLICATION = 'server.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/5.1/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', - } -} - - -# Password validation -# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, -] - - -# Internationalization -# https://docs.djangoproject.com/en/5.1/topics/i18n/ - -LANGUAGE_CODE = 'en-us' - -TIME_ZONE = 'UTC' - -USE_I18N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/5.1/howto/static-files/ - -STATIC_URL = 'static/' - -# Default primary key field type -# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field - -DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/mainDockerImage/backend/server/settings/production.py b/mainDockerImage/backend/server/settings/production.py deleted file mode 100644 index 12dca54f..00000000 --- a/mainDockerImage/backend/server/settings/production.py +++ /dev/null @@ -1,139 +0,0 @@ -""" -Django settings for server project. - -Generated by 'django-admin startproject' using Django 5.1.6. - -For more information on this file, see -https://docs.djangoproject.com/en/5.1/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/5.1/ref/settings/ -""" - -from pathlib import Path -import os - - -# Build paths inside the project like this: BASE_DIR / 'subdir'. -BASE_DIR = Path(__file__).resolve().parent.parent - -STATIC_URL = "/static/" -STATICFILES_DIRS = [os.path.join(BASE_DIR, "backend/static")] -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -from server.settings import get_secret -SECRET_KEY = get_secret('SECRET_KEY') - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = False - -ALLOWED_HOSTS = ['*'] - - -# Application definition - -INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', -] - -MIDDLEWARE = [ - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', -] - -ROOT_URLCONF = 'server.urls' - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [ - os.path.join(BASE_DIR, 'frontend'), - ], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] - -WSGI_APPLICATION = 'server.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/5.1/ref/settings/#databases - -# Change DATABASES to connect to a real database -DB_NAME = get_secret("DB_NAME") -DB_USER_NM = get_secret("DB_USER_NM") -DB_USER_PW = get_secret("DB_USER_PW") -DB_IP = get_secret("DB_IP") -DB_PORT = get_secret("DB_PORT") -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql', - 'NAME': DB_NAME, - 'USER': DB_USER_NM, - "PASSWORD": DB_USER_PW, - "HOST": DB_IP, - "PORT": DB_PORT, - } -} - - -# Password validation -# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, -] - - -# Internationalization -# https://docs.djangoproject.com/en/5.1/topics/i18n/ - -LANGUAGE_CODE = 'en-us' - -TIME_ZONE = 'UTC' - -USE_I18N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/5.1/howto/static-files/ - -STATIC_URL = 'static/' - -# Default primary key field type -# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field - -DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' -- GitLab