From 346f8f1dc50335ecf3296d9491880996f43e9aae Mon Sep 17 00:00:00 2001
From: Patrick Jentsch
Date: Fri, 11 Nov 2022 14:59:14 +0100
Subject: [PATCH] Update Dockerfile logic
---
.dockerignore | 41 ++++-------
.gitignore | 186 ++++++++++++++++++++++++++++++++++++++++++--------
Dockerfile | 94 +++++++++++++------------
boot.sh | 4 +-
4 files changed, 219 insertions(+), 106 deletions(-)
diff --git a/.dockerignore b/.dockerignore
index 07d50b4b..9960fd26 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,29 +1,12 @@
-**/__pycache__
-**/.venv
-**/.classpath
-**/.dockerignore
-**/.env
-**/.git
-**/.gitignore
-**/.project
-**/.settings
-**/.toolstarget
-**/.vs
-**/.vscode
-**/*.*proj.user
-**/*.dbmdl
-**/*.jfm
-**/bin
-**/charts
-**/docker-compose*
-**/compose*
-**/Dockerfile*
-**/node_modules
-**/npm-debug.log
-**/obj
-**/secrets.dev.yaml
-**/values.dev.yaml
-README.md
-
-
-data
+# Exclude everything
+*
+
+# Include what we need
+!app
+!migrations
+!tests
+!.flaskenv
+!boot.sh
+!config.py
+!nopaque.py
+!requirements.txt
diff --git a/.gitignore b/.gitignore
index 14a22fe1..59ada396 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,42 +1,168 @@
+# nopaque specifics
+app/static/gen/
+data/
+docker-compose.override.yml
+logs/
+!logs/dummy
+*.env
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
*.py[cod]
+*$py.class
# C extensions
*.so
-# Flask-Assets files
-.webassets-cache
-app/static/gen
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
-# Docker related files
-docker-compose.override.yml
-data/**
-
-# Environment files
-*.env
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
# Installer logs
pip-log.txt
+pip-delete-this-directory.txt
-# Logs in log folder
-logs/*
-!logs/dummy
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
-# Packages
-*.egg
-*.egg-info
-dist
-build
-eggs
-parts
-bin
-var
-sdist
-develop-eggs
-.installed.cfg
-lib
-lib64
-__pycache__
+# Translations
+*.mo
+*.pot
-# Virtual environment
-venv
-.idea
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# poetry
+# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+# This is especially recommended for binary packages to ensure reproducibility, and is more
+# commonly ignored for libraries.
+# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# pdm
+# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+# in version control.
+# https://pdm.fming.dev/#use-with-ide
+.pdm.toml
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+# and can be added to the global gitignore or merged into this file. For a more nuclear
+# option (not recommended) you can uncomment the following to ignore the entire idea folder.
+#.idea/
diff --git a/Dockerfile b/Dockerfile
index 0a2309f5..8ccdf7f6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,44 +1,50 @@
-FROM python:3.8.10-slim-buster
-
-
-LABEL authors="Patrick Jentsch "
-
-
-ARG DOCKER_GID
-ARG UID
-ARG GID
-
-
-ENV FLASK_APP nopaque.py
-ENV LANG=C.UTF-8
-ENV PYTHONDONTWRITEBYTECODE=1
-ENV PYTHONUNBUFFERED=1
-
-
-RUN apt-get update \
- && apt-get install --no-install-recommends --yes \
- build-essential \
- libpq-dev \
- && rm -r /var/lib/apt/lists/*
-
-
-RUN groupadd --gid ${DOCKER_GID} --system docker \
- && groupadd --gid ${GID} --system nopaque \
- && useradd --create-home --gid ${GID} --groups ${DOCKER_GID} --no-log-init --system --uid ${UID} nopaque
-USER nopaque
-WORKDIR /home/nopaque
-
-COPY --chown=nopaque:nopaque requirements.txt ./
-RUN python -m venv venv \
- && venv/bin/pip install --requirement requirements.txt
-
-
-COPY --chown=nopaque:nopaque app app
-COPY --chown=nopaque:nopaque migrations migrations
-COPY --chown=nopaque:nopaque tests tests
-COPY --chown=nopaque:nopaque boot.sh config.py nopaque.py ./
-
-
-# run-time configuration
-EXPOSE 5000
-ENTRYPOINT ["./boot.sh"]
+FROM python:3.9.15-slim-bullseye
+
+
+LABEL authors="Patrick Jentsch "
+
+
+ARG DOCKER_GID
+ARG UID
+ARG GID
+
+
+ENV LANG="C.UTF-8"
+ENV PYTHONDONTWRITEBYTECODE="1"
+ENV PYTHONUNBUFFERED="1"
+
+
+RUN apt-get update \
+ && apt-get install --no-install-recommends --yes \
+ build-essential \
+ libpq-dev \
+ && rm --recursive /var/lib/apt/lists/*
+
+
+RUN groupadd --gid "${DOCKER_GID}" docker \
+ && groupadd --gid "${GID}" nopaque \
+ && useradd --create-home --gid nopaque --groups "${DOCKER_GID}" --no-log-init --uid "${UID}" nopaque
+USER nopaque
+WORKDIR /home/nopaque
+
+
+ENV PYTHON3_VENV_PATH="/home/nopaque/venv"
+RUN python3 -m venv "${PYTHON3_VENV_PATH}"
+ENV PATH="${PYTHON3_VENV_PATH}/bin:${PATH}"
+
+
+COPY --chown=nopaque:nopaque requirements.txt .
+RUN python3 -m pip install --requirement requirements.txt \
+ && rm requirements.txt
+
+
+COPY --chown=nopaque:nopaque app app
+COPY --chown=nopaque:nopaque migrations migrations
+COPY --chown=nopaque:nopaque tests tests
+COPY --chown=nopaque:nopaque .flaskenv boot.sh config.py nopaque.py ./
+
+
+EXPOSE 5000
+
+
+ENTRYPOINT ["./boot.sh"]
diff --git a/boot.sh b/boot.sh
index 1d63652f..f96d7155 100755
--- a/boot.sh
+++ b/boot.sh
@@ -1,7 +1,5 @@
#!/bin/bash
-source venv/bin/activate
-
display_help() {
local script_name=$(basename "${0}")
echo ""
@@ -26,7 +24,7 @@ if [[ "${#}" -eq 0 ]]; then
sleep 5
done
fi
- python nopaque.py
+ python3 nopaque.py
elif [[ "${1}" == "flask" ]]; then
flask "${@:2}"
elif [[ "${1}" == "--help" || "${1}" == "-h" ]]; then