Browse Source

docker compose for deployment

master
junikimm717 2 years ago
parent
commit
defd0118f6
  1. 162
      .dockerignore
  2. 17
      Dockerfile
  3. 11
      app.py
  4. 8
      docker-compose.yml
  5. 17
      poetry.lock
  6. 1
      pyproject.toml

162
.dockerignore

@ -0,0 +1,162 @@
.idea
/instance
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# 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
# 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
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# 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/

17
Dockerfile

@ -0,0 +1,17 @@
FROM fnndsc/python-poetry
WORKDIR /app/
# plz install everything globally in docker
RUN apt-get update && apt-get install -y build-essential
RUN poetry config virtualenvs.create false
# install our dependencies first
COPY pyproject.toml poetry.lock /app/
RUN poetry install --no-dev
# now copy over everything
COPY . /app/
ENTRYPOINT ["gunicorn", "-b", "0.0.0.0:5000", "app:app"]

11
app.py

@ -13,14 +13,19 @@ app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///project.db"
app.secret_key = '98d31240f9fbe14c8083586db49c19c3a8d3f726'
db.init_app(app)
with app.app_context():
db.create_all()
BaseModelForm = model_form_factory(FlaskForm)
class ModelForm(BaseModelForm):
@classmethod
def get_session(self):
return db.session
class Admin(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String, unique=True, nullable=False)
@ -245,14 +250,11 @@ def search_api():
except ValueError:
abort(400)
print(mz_min, mz_max, " ", rt_min, rt_max)
mz_filter = and_(mz_max > Chemical.final_mz, Chemical.final_mz > mz_min)
rt_filter = and_(rt_max > Chemical.final_rt, Chemical.final_rt > rt_min)
result = Chemical.query.filter(
or_(mz_filter, rt_filter)
).limit(20).all()
print("Got Result", result)
data = []
for x in result:
data.append({"url": url_for("chemical_view", id=x.id), "name": x.name, "mz": x.final_mz, "rt": x.final_rt})
@ -265,7 +267,4 @@ def search():
if __name__ == "__main__":
db.init_app(app)
with app.app_context():
db.create_all()
app.run(debug=True)

8
docker-compose.yml

@ -0,0 +1,8 @@
version: '3.9'
services:
web:
ports:
- "5002:5000"
build: .
volumes:
- ./instance:/app/instance/

17
poetry.lock

@ -124,6 +124,20 @@ python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
docs = ["sphinx", "docutils (<0.18)"]
test = ["objgraph", "psutil", "faulthandler"]
[[package]]
name = "gunicorn"
version = "20.1.0"
description = "WSGI HTTP Server for UNIX"
category = "main"
optional = false
python-versions = ">=3.5"
[package.extras]
eventlet = ["eventlet (>=0.24.1)"]
gevent = ["gevent (>=1.4.0)"]
setproctitle = ["setproctitle"]
tornado = ["tornado (>=0.2)"]
[[package]]
name = "idna"
version = "3.4"
@ -414,7 +428,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-co
[metadata]
lock-version = "1.1"
python-versions = "^3.9"
content-hash = "2bf62dac3f38c6f5d62cd5a4dfdef4916bfaa6a1db6be9c68cc842bbdf719795"
content-hash = "f2618675cce387206217c9e139800f6c6e7d5bd103a45e88712ff59902812042"
[metadata.files]
autopep8 = []
@ -430,6 +444,7 @@ flask = []
flask-sqlalchemy = []
flask-wtf = []
greenlet = []
gunicorn = []
idna = []
importlib-metadata = []
infinity = []

1
pyproject.toml

@ -12,6 +12,7 @@ py-bcrypt = "^0.4"
wtforms = "^3.0.1"
wtforms-alchemy = "^0.18.0"
flask-wtf = "^1.0.1"
gunicorn = "^20.1.0"
[tool.poetry.dev-dependencies]
autopep8 = "^2.0.1"

Loading…
Cancel
Save