From ce86879aa53025325541a38b06dbdfe90b845d83 Mon Sep 17 00:00:00 2001 From: 4-dash <120916864+4-dash@users.noreply.github.com> Date: Mon, 19 May 2025 23:55:24 +0200 Subject: [PATCH 1/8] remove binary files, wsgi rename --- .gitignore | 2 ++ src/locale/de/LC_MESSAGES/django.mo | Bin 3853 -> 0 bytes src/locale/en/LC_MESSAGES/django.mo | Bin 42096 -> 0 bytes src/{django.wsgi => wsgi.py} | 0 4 files changed, 2 insertions(+) delete mode 100644 src/locale/de/LC_MESSAGES/django.mo delete mode 100644 src/locale/en/LC_MESSAGES/django.mo rename src/{django.wsgi => wsgi.py} (100%) diff --git a/.gitignore b/.gitignore index 8e614510..573b7551 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ venv/ .python-version node_modules/ + +*.mo \ No newline at end of file diff --git a/src/locale/de/LC_MESSAGES/django.mo b/src/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index 21fa752fae783f54f039080262e8554fe5467ea5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3853 zcmcImO^hSO6|V4)*$^NkKuF;2DhoSe+6zcX;N4m9u04yj_RKJz-4$F=xw~vvrd?%K zSC4l_iWDhQj!`Z_B8e0!N-iiDqzEa}o|qiCamy`8+~9@;ms}9vt8S0&9d8hav^4X% z-Bqu@_r34E@+Xhn^?QNqB>sMizn_0kh_k@eJMa(JXTU4K&w*ROm+lnehrr(ep8);= z*aH3ocmnt}@CU#L?h@ir;FG}nfX@T@`&WSX16$?uF7O`Q4}rYS0`CRh06q@&x1La>(r| zAYTs`5d6a*S$Fm->n-Z!huS64SUSH?GLCI-JoTL&(djc|XZLiX+)746nNd$EL$NhR z#a<=kE$!RfO*d7)d#prfvvA>^w*)NdTq@qFt;s|^Nl4O8AiWhx*Nau6Zb&(29oaa} zodd(kP^XHd_i8lu+6GWnxX4%BLM3iI}|*vtzqw$;e)DbdBMkX=^~47H3Xk*x7h zo4GGOTpb6@$6{xw<^xZQvZQX+Z(loKm)kGb8OhWsnd~o`LQdp8FwQs$=OPrg+olBpnp*+1zvK~zwO9Tt$89QpBoYQoV_s^0zY=&U>S$*F&a-`5~(>6S^tGAWYXENUBYg5~21R|Frgp+K`__$WA(vPhnx=3|2TxNn`(*pK z1X$81@H9&tdd>KBA70y2Wb86!v#I#S+(5LWEDLE86=Twbp#p|z9&S{0>VTyNPaZTZ zK*`Y>#TW0ojcbBqdRcbMPykdf>C254`a#tN`gs~Q@;$7z@4V~(*ojQFc42HLJ zm#$=|E|dzLKPxX(#g?$p$)! zF6M(Q+OajNY;8u{YESc?s3E~W^%sWel68i>jtwm zV9;rGnlsujRG+W#tU{YaJNsks@#=;@J5HrG=O`XZmnpw?b!R<#dA5#ep`W9siEV25SSzcM8Hd|!?ZtEOB0pI>W9Z}>y|8kwBATdT!)foO>1o*0?Sh1* zJ!=-m8%=VTC=|?73w0UMm13E4z1$?qRKH^&jz1r0pghKs@l_E5vo1Ytk{r|C+%EJ` zn}fW6c$1f0RC+}0fjl0r!jJKg4sZ69Iqc2LDIDKccVkHyT6&k|f+~Zdu2TZzw>cQNYf?`9)LkEJ0kFy7H zX-~O{Vil>Y6;r{dP!p_fAAXR9ZC&jT3OS0fcs7e)j0= zorqa9)2OHPVzx%SHBlO8)GiuZnP_@S_4NV7g4Q^~6})5;N+fo#2A3F>tEI9XYng+b zE6X-!C;dNT1;5XFbLNBcREi3fS%HPqs)901`v50bnh{Q@0~nLK>`{;3n};{?YpF0M zMhnJ#0@L95g1DFmJYw=xa?{|@;S_fdKfupWKFQF6OsOb0+kCof$-uz|CO1D3WN04l z5e_><0SqC^0enQe95h%5U$X9Hx2)m^PBEl_+3_hAidmGR2pCvm)AHuo><43NEpyyq16Z58_rn1j#!keNugN_~j{^V)Lg U+Z}vOZTR3-hL1k}*??L34gM*MP5=M^ diff --git a/src/locale/en/LC_MESSAGES/django.mo b/src/locale/en/LC_MESSAGES/django.mo deleted file mode 100644 index aff8f1901fcd6b6a204e5087a2445dec16264ba3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42096 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 diff --git a/src/django.wsgi b/src/wsgi.py similarity index 100% rename from src/django.wsgi rename to src/wsgi.py From 166d4abc4b2ec49a700e20236df848baa3c01c55 Mon Sep 17 00:00:00 2001 From: 4-dash <120916864+4-dash@users.noreply.github.com> Date: Mon, 19 May 2025 23:55:40 +0200 Subject: [PATCH 2/8] add Dockerfile --- .dockerignore | 27 +++++++++++++++++++++ Dockerfile | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 3 files changed, 90 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..573b7551 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,27 @@ +latex/anschreiben/veranstalter.adr +# Ignore all files in db folder +db/* +# But keep the folder +!db/.gitkeep + +*.pyc +htmlcov +pyenv +*.aux +*.log +.idea +*.pdf +*.adr +.project +.pydevproject +.settings/* +.coverage +settings_secret.py +static/* +venv/ +.vscode/* +.python-version + +node_modules/ + +*.mo \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..e9d8850f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,62 @@ +# Stage 1 +FROM python:3.13-slim AS builder + +RUN mkdir /app + +WORKDIR /app + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 + +RUN pip install --upgrade pip + +RUN apt-get update && apt-get install -y \ + curl \ + gnupg \ + ca-certificates \ + && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ + && apt-get install -y nodejs \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt /app/ + +RUN pip install --no-cache-dir -r requirements.txt + +COPY package*.json ./ + +RUN npm i + +# Stage 2 +FROM python:3.13-slim + +RUN useradd -m -r appuser && \ + mkdir /app && \ + chown -R appuser /app + +COPY --from=builder /usr/local/lib/python3.13/site-packages/ /usr/local/lib/python3.13/site-packages/ +COPY --from=builder /usr/local/bin/ /usr/local/bin/ + +RUN apt-get update && apt-get install -y gettext \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + + +WORKDIR /app + +COPY --chown=appuser:appuser . . + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 + +WORKDIR /app/src + +RUN python manage.py migrate --no-input +RUN python manage.py compilemessages + +USER appuser + +EXPOSE 8000 + + +CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "3", "wsgi:application"] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index a407d925..173bbe3c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ django-debug-toolbar==6.0.0 freezegun==1.5.5 django-formtools==2.5.1 django-allauth[socialaccount,keycloak]==65.12.1 +gunicorn==23.0.0 From 135957717eeee93cb46bc59068c3bb6ba204a287 Mon Sep 17 00:00:00 2001 From: 4-dash <120916864+4-dash@users.noreply.github.com> Date: Tue, 20 May 2025 23:59:35 +0200 Subject: [PATCH 3/8] add docker compose and .env --- .env | 11 +++++++++++ docker-compose.yml | 25 +++++++++++++++++++++++++ src/settings_production.py | 22 +++++++++++----------- src/wsgi.py | 4 +++- 4 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 .env create mode 100644 docker-compose.yml diff --git a/.env b/.env new file mode 100644 index 00000000..31fa3b69 --- /dev/null +++ b/.env @@ -0,0 +1,11 @@ +SETTINGS_FILE=settings +DEBUG=False +ALLOWED_HOSTS=.fachschaft.informatik.tu-darmstadt.de,.d120.de +SECRET_KEY= +KEYCLOAK_CLIENT_ID= +KEYCLOAK_SECRET= +KEYCLOAK_SERVER_URL= +EMAIL_HOST=mail.d120.de +EMAIL_PORT=587 +EMAIL_HOST_USER=pyfeedback +EMAIL_HOST_PASSWORD= \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..b85d87b1 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,25 @@ +services: + django-web: + build: . + container_name: pyfeedback-docker + ports: + - "8000:8000" + environment: + - SETTINGS_FILE=${SETTINGS_FILE} + - DEBUG=${DEBUG} + - ALLOWED_HOSTS=${ALLOWED_HOSTS} + - SECRET_KEY=${SECRET_KEY} + - KEYCLOAK_CLIENT_ID=${KEYCLOAK_CLIENT_ID} + - KEYCLOAK_SECRET=${KEYCLOAK_SECRET} + - KEYCLOAK_SERVER_URL=${KEYCLOAK_SERVER_URL} + - EMAIL_HOST=${EMAIL_HOST} + - EMAIL_PORT=${EMAIL_PORT} + - EMAIL_HOST_USER=${EMAIL_HOST_USER} + - EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD} + env_file: + - .env + volumes: + - db_data:/app/db/ + +volumes: + db_data: \ No newline at end of file diff --git a/src/settings_production.py b/src/settings_production.py index ba6f04ea..e5096749 100644 --- a/src/settings_production.py +++ b/src/settings_production.py @@ -1,11 +1,11 @@ from settings import * -import settings_secret as secrets +import os -DEBUG = False +DEBUG = os.getenv("DEBUG") -ALLOWED_HOSTS = ['.fachschaft.informatik.tu-darmstadt.de', '.d120.de'] +ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS").split(",") -SECRET_KEY = secrets.SECRET_KEY +SECRET_KEY = os.getenv("SECRET_KEY") URL_PREFIX = 'feedback/' @@ -20,10 +20,10 @@ { "provider_id": "keycloak", "name": "Keycloak", - "client_id": secrets.KEYCLOAK_CLIENT_ID, - "secret": secrets.KEYCLOAK_SECRET, + "client_id": os.getenv("KEYCLOAK_CLIENT_ID"), + "secret": os.getenv("KEYCLOAK_SECRET"), "settings": { - "server_url": secrets.KEYCLOAK_SERVER_URL, + "server_url": os.getenv("KEYCLOAK_SERVER_URL"), }, } ] @@ -33,11 +33,11 @@ # @see https://docs.djangoproject.com/es/1.9/topics/email/ EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' -EMAIL_HOST = 'mail.d120.de' -EMAIL_PORT = 587 +EMAIL_HOST = os.getenv("EMAIL_HOST") +EMAIL_PORT = int(os.getenv("EMAIL_PORT")) EMAIL_USE_TLS = True -EMAIL_HOST_USER = 'pyfeedback' -EMAIL_HOST_PASSWORD = secrets.EMAIL_HOST_PASSWORD +EMAIL_HOST_USER = os.getenv("EMAIL_HOST_USER") +EMAIL_HOST_PASSWORD = os.getenv("EMAIL_HOST_PASSWORD") SESSION_COOKIE_PATH = '/feedback' SESSION_COOKIE_SECURE = True diff --git a/src/wsgi.py b/src/wsgi.py index ac4b0cc0..872c4101 100644 --- a/src/wsgi.py +++ b/src/wsgi.py @@ -2,7 +2,9 @@ from django.core.wsgi import get_wsgi_application +# select in .env which settings to use +settings_file = os.getenv("SETTINGS_FILE", "settings") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", settings_file) application = get_wsgi_application() From f6d4102463814ce892928b10f66ced106bf4c544 Mon Sep 17 00:00:00 2001 From: 4-dash <120916864+4-dash@users.noreply.github.com> Date: Wed, 21 May 2025 00:29:26 +0200 Subject: [PATCH 4/8] update Dockerfile --- Dockerfile | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index e9d8850f..64d73022 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -# Stage 1 +## Stage 1: build stage FROM python:3.13-slim AS builder RUN mkdir /app @@ -8,6 +8,7 @@ WORKDIR /app ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 +# install packages and node RUN pip install --upgrade pip RUN apt-get update && apt-get install -y \ @@ -19,31 +20,36 @@ RUN apt-get update && apt-get install -y \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* +# install pip requirements COPY requirements.txt /app/ RUN pip install --no-cache-dir -r requirements.txt +# install node_modules COPY package*.json ./ RUN npm i -# Stage 2 +## Stage 2: production stage FROM python:3.13-slim RUN useradd -m -r appuser && \ mkdir /app && \ chown -R appuser /app +# Copy the python dependencies and node_modules from the builder stage COPY --from=builder /usr/local/lib/python3.13/site-packages/ /usr/local/lib/python3.13/site-packages/ COPY --from=builder /usr/local/bin/ /usr/local/bin/ +COPY --from=builder /app/node_modules/ /app/node_modules/ +# install gettext for translations (compiling) RUN apt-get update && apt-get install -y gettext \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* - WORKDIR /app +# copy the code COPY --chown=appuser:appuser . . ENV PYTHONDONTWRITEBYTECODE=1 @@ -51,12 +57,16 @@ ENV PYTHONUNBUFFERED=1 WORKDIR /app/src -RUN python manage.py migrate --no-input +# compile translations RUN python manage.py compilemessages +# migrate db changes +RUN python manage.py migrate --no-input + +# switch to non-root user USER appuser EXPOSE 8000 - +# start applicaiton with gunicorn CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "3", "wsgi:application"] \ No newline at end of file From b79d21807e02488f139b230aa17be6d4e1d913fd Mon Sep 17 00:00:00 2001 From: 4-dash <120916864+4-dash@users.noreply.github.com> Date: Thu, 22 May 2025 21:34:42 +0200 Subject: [PATCH 5/8] dockerfile fix --- Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 64d73022..e9a86cd0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -57,15 +57,15 @@ ENV PYTHONUNBUFFERED=1 WORKDIR /app/src +# switch to non-root user +USER appuser + # compile translations -RUN python manage.py compilemessages +RUN django-admin compilemessages # migrate db changes RUN python manage.py migrate --no-input -# switch to non-root user -USER appuser - EXPOSE 8000 # start applicaiton with gunicorn From 3754db671e4b19d5228cdaccbd1cd2805c28b9a5 Mon Sep 17 00:00:00 2001 From: 4-dash <120916864+4-dash@users.noreply.github.com> Date: Thu, 22 May 2025 23:41:45 +0200 Subject: [PATCH 6/8] bug fix --- src/settings_production.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings_production.py b/src/settings_production.py index e5096749..939eb06e 100644 --- a/src/settings_production.py +++ b/src/settings_production.py @@ -1,7 +1,7 @@ from settings import * import os -DEBUG = os.getenv("DEBUG") +DEBUG = (os.getenv("DEBUG", "False") == "True") # os.getenv only returns a string ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS").split(",") From bacbdb8ddef43d471ae9f9c8ffc6fd38350413f5 Mon Sep 17 00:00:00 2001 From: 4-dash <120916864+4-dash@users.noreply.github.com> Date: Mon, 1 Dec 2025 23:05:31 +0100 Subject: [PATCH 7/8] minor change --- .env | 3 +-- docker-compose.yml | 3 +-- src/settings_production.py | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.env b/.env index 31fa3b69..ec31d8b5 100644 --- a/.env +++ b/.env @@ -1,5 +1,4 @@ SETTINGS_FILE=settings -DEBUG=False ALLOWED_HOSTS=.fachschaft.informatik.tu-darmstadt.de,.d120.de SECRET_KEY= KEYCLOAK_CLIENT_ID= @@ -8,4 +7,4 @@ KEYCLOAK_SERVER_URL= EMAIL_HOST=mail.d120.de EMAIL_PORT=587 EMAIL_HOST_USER=pyfeedback -EMAIL_HOST_PASSWORD= \ No newline at end of file +EMAIL_HOST_PASSWORD= diff --git a/docker-compose.yml b/docker-compose.yml index b85d87b1..343f1356 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,7 +6,6 @@ services: - "8000:8000" environment: - SETTINGS_FILE=${SETTINGS_FILE} - - DEBUG=${DEBUG} - ALLOWED_HOSTS=${ALLOWED_HOSTS} - SECRET_KEY=${SECRET_KEY} - KEYCLOAK_CLIENT_ID=${KEYCLOAK_CLIENT_ID} @@ -22,4 +21,4 @@ services: - db_data:/app/db/ volumes: - db_data: \ No newline at end of file + db_data: diff --git a/src/settings_production.py b/src/settings_production.py index 939eb06e..ccc1db5c 100644 --- a/src/settings_production.py +++ b/src/settings_production.py @@ -1,7 +1,7 @@ from settings import * import os -DEBUG = (os.getenv("DEBUG", "False") == "True") # os.getenv only returns a string +DEBUG = False ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS").split(",") From e75ab306d88bb867011fd840239d6b81939a0c71 Mon Sep 17 00:00:00 2001 From: 4-dash <120916864+4-dash@users.noreply.github.com> Date: Tue, 2 Dec 2025 00:05:53 +0100 Subject: [PATCH 8/8] minor fix --- .env | 7 ++++--- docker-compose.yml | 15 ++------------- src/settings_production.py | 2 +- 3 files changed, 7 insertions(+), 17 deletions(-) diff --git a/.env b/.env index ec31d8b5..3fe5de79 100644 --- a/.env +++ b/.env @@ -1,10 +1,11 @@ SETTINGS_FILE=settings +DEBUG=False ALLOWED_HOSTS=.fachschaft.informatik.tu-darmstadt.de,.d120.de SECRET_KEY= KEYCLOAK_CLIENT_ID= KEYCLOAK_SECRET= KEYCLOAK_SERVER_URL= -EMAIL_HOST=mail.d120.de -EMAIL_PORT=587 -EMAIL_HOST_USER=pyfeedback +EMAIL_HOST= +EMAIL_PORT= +EMAIL_HOST_USER= EMAIL_HOST_PASSWORD= diff --git a/docker-compose.yml b/docker-compose.yml index 343f1356..b889e065 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,21 +4,10 @@ services: container_name: pyfeedback-docker ports: - "8000:8000" - environment: - - SETTINGS_FILE=${SETTINGS_FILE} - - ALLOWED_HOSTS=${ALLOWED_HOSTS} - - SECRET_KEY=${SECRET_KEY} - - KEYCLOAK_CLIENT_ID=${KEYCLOAK_CLIENT_ID} - - KEYCLOAK_SECRET=${KEYCLOAK_SECRET} - - KEYCLOAK_SERVER_URL=${KEYCLOAK_SERVER_URL} - - EMAIL_HOST=${EMAIL_HOST} - - EMAIL_PORT=${EMAIL_PORT} - - EMAIL_HOST_USER=${EMAIL_HOST_USER} - - EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD} env_file: - .env volumes: - - db_data:/app/db/ + - pyfeedback-db-vol:/app/db/ volumes: - db_data: + pyfeedback-db-vol: diff --git a/src/settings_production.py b/src/settings_production.py index ccc1db5c..939eb06e 100644 --- a/src/settings_production.py +++ b/src/settings_production.py @@ -1,7 +1,7 @@ from settings import * import os -DEBUG = False +DEBUG = (os.getenv("DEBUG", "False") == "True") # os.getenv only returns a string ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS").split(",")