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