Skip to content

Commit

Permalink
Merge pull request #6 from CorreiaEduardo/feature/dockerfile
Browse files Browse the repository at this point in the history
Feature/dockerfile
  • Loading branch information
pedrovsbenevides authored Dec 17, 2024
2 parents 400683e + 3c5de24 commit e8442c4
Show file tree
Hide file tree
Showing 18 changed files with 427 additions and 76 deletions.
4 changes: 3 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@ blastdb/
temp_genomes/
results/
.vscode/
tests/
tests/
__init__.py
docs/
77 changes: 53 additions & 24 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,29 +1,58 @@
FROM ubuntu:20.04

FROM docker:24.0.2-dind as builder
USER root
ENV DEBIAN_FRONTEND=noninteractive
COPY . /app

WORKDIR /app

RUN apt-get update && apt-get install -y \
# apt-transport-https \
# ca-certificates \
# build-essential \
curl \
# gnupg-agent \
# software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" && \
apt-get install -y docker-ce docker-ce-cli containerd.io && \
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
sudo apt install python3.11


RUN curl -sSL https://install.python-poetry.org | python3 - &&\
poetry install --no-root

RUN apk update && apk add --no-cache \
ca-certificates \
curl \
bash \
tzdata \
build-base \
python3 \
python3-dev \
libffi-dev \
openssl-dev \
musl-dev \
gcc \
make \
docker-cli \
zlib \
bzip2 \
libgcc \
libstdc++ \
libgomp \
gcompat

# RUN apk add --no-cache bash curl binutils \
# && curl -Lo /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
# && curl -Lo /glibc.apk https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-2.35-r0.apk \
# && curl -Lo /glibc-bin.apk https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-bin-2.35-r0.apk \
# && apk add --no-cache --force-overwrite /glibc.apk /glibc-bin.apk \
# && rm /glibc.apk /glibc-bin.apk

# RUN curl -o ncbi-blast.tar.gz https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.16.0+-x64-linux.tar.gz && \
# tar -xzvf ncbi-blast.tar.gz && \
# rm ncbi-blast.tar.gz
# ENV BLAST_PATH="/app/ncbi-blast-2.16.0+/bin"
# ENV PATH="${BLAST_PATH}:${PATH}"

RUN curl -o fam-substrate-mapping-08012023.tsv https://bcb.unl.edu/dbCAN2/download/Databases/fam-substrate-mapping-08012023.tsv && \
mv fam-substrate-mapping-08012023.tsv fam-substrate-mapping.tsv

ENV POETRY_NO_INTERACTION=1 \
POETRY_VIRTUALENVS_CREATE=false \
POETRY_CACHE_DIR='/var/cache/pypoetry' \
POETRY_HOME='/usr/local' \
POETRY_VERSION=1.5.1

RUN curl -sSL https://install.python-poetry.org | python3 -
RUN poetry install --no-root
RUN chmod +x /app/start.sh

RUN dos2unix /app/start.sh
RUN chmod +x /app/run_flask.sh
RUN dos2unix /app/run_flask.sh
ENV FLASK_APP=plasticome.routes.app.py
FROM builder as runner
CMD [ "/bin/bash", "/app/start.sh" ]

121 changes: 121 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
services:
metadata:
container_name: plasticome_metadata
# build:
# context: ./plasticome-metadata
# dockerfile: Dockerfile
image: correiaeduardo/plasticome-metadata:final-1
environment:
- C_FORCE_ROOT=true
- FLASK_RUN_HOST=metadata
- JWT_SECRET_KEY=${JWT_SECRET_KEY}
- DATABASE_NAME=${DATABASE_NAME}
- DATABASE_USER=${DATABASE_USER}
- DATABASE_PASSWORD=${DATABASE_PASSWORD}
- DATABASE_PORT=${DATABASE_PORT}
- DATABASE_HOST=${DATABASE_HOST}
restart: always
ports:
- "5001:5000"
volumes:
- data:/metadata
- ./plasticome-metadata:/app
depends_on:
- postgres
networks:
- plasticome
# - internal

backend:
container_name: plasticome_backend
build:
context: ./plasticome-backend
dockerfile: Dockerfile
privileged: true
environment:
- DOCKER_HOST=tcp://localhost:2375
- [email protected]
- RABBIT_MQ_URL=amqp://guest:guest@plasticome_rabbitmq:5672//
- CELERY_BROKER_URL=amqp://guest:guest@plasticome_rabbitmq:5672//
- RESULT_BACKEND=redis://plasticome_redis:6379/0
- PLASTICOME_METADATA_URL=http://metadata:5000/
- C_FORCE_ROOT=true
- FLASK_RUN_HOST=backend
- PLASTICOME_USER=${PLASTICOME_USER}
- PLASTICOME_PASSWORD=${PLASTICOME_PASSWORD}
- MAIL_USER=${MAIL_USER}
- MAIL_SERVER=${MAIL_SERVER}
- MAIL_SECRET=${MAIL_SECRET}
- MAIL_ACCESS_PORT=${MAIL_ACCESS_PORT}
restart: always
ports:
- "5002:5000"
depends_on:
- rabbitmq
- metadata
volumes:
- data:/backend
- ./plasticome-backend/plasticome:/app/plasticome
- ./temp_genomes:/app/temp_genomes
networks:
- plasticome
# - internal

rabbitmq:
container_name: plasticome_rabbitmq
image: rabbitmq:management
ports:
- "5672:5672"
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_VHOST=
- RABBITMQ_DEFAULT_USER=guest
- RABBITMQ_DEFAULT_PASS=guest
depends_on:
- redis
networks:
- plasticome
# - internal
volumes:
- rabbitmq_data:/data

redis:
container_name: plasticome_redis
image: redis
ports:
- "6379:6379"
networks:
- plasticome
# - internal
volumes:
- redis_data:/data

postgres:
container_name: plasticome_postgres
image: postgres
volumes:
- ./pg_data:/var/lib/postgresql/data
- ./plasticome-metadata/scripts:/scripts
- ./plasticome-metadata/dump/plasticome-psql-v1.sql.lzo:/dump/plasticome-psql-v1.sql.lzo
environment:
POSTGRES_DB: ${DATABASE_NAME}
POSTGRES_USER: ${DATABASE_USER}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
ports:
- "33805:5432"
networks:
- plasticome
# - internal

networks:
plasticome:
driver: bridge
# internal:
# external: true
volumes:
data:
rabbitmq_data:
pg_data:
redis_data:


136 changes: 136 additions & 0 deletions plasticome-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
services:
metadata:
container_name: plasticome_metadata
# build:
# context: ./plasticome-metadata
# dockerfile: Dockerfile
image: correiaeduardo/plasticome-metadata:final-1
environment:
- C_FORCE_ROOT=true
- FLASK_RUN_HOST=metadata
- JWT_SECRET_KEY=${JWT_SECRET_KEY}
- DATABASE_NAME=${DATABASE_NAME}
- DATABASE_USER=${DATABASE_USER}
- DATABASE_PASSWORD=${DATABASE_PASSWORD}
- DATABASE_PORT=${DATABASE_PORT}
- DATABASE_HOST=${DATABASE_HOST}
restart: always
ports:
- "5001:5000"
volumes:
- data:/metadata
- ./plasticome-metadata:/app
depends_on:
- postgres
networks:
- plasticome
# - internal

backend:
container_name: plasticome_backend
build:
context: ./plasticome-backend
dockerfile: Dockerfile
privileged: true
environment:
- DOCKER_HOST=tcp://localhost:2375
- [email protected]
- RABBIT_MQ_URL=amqp://guest:guest@plasticome_rabbitmq:5672//
- CELERY_BROKER_URL=amqp://guest:guest@plasticome_rabbitmq:5672//
- RESULT_BACKEND=redis://plasticome_redis:6379/0
- PLASTICOME_METADATA_URL=http://metadata:5000/
- C_FORCE_ROOT=true
- FLASK_RUN_HOST=backend
- PLASTICOME_USER=${PLASTICOME_USER}
- PLASTICOME_PASSWORD=${PLASTICOME_PASSWORD}
- MAIL_USER=${MAIL_USER}
- MAIL_SERVER=${MAIL_SERVER}
- MAIL_SECRET=${MAIL_SECRET}
- MAIL_ACCESS_PORT=${MAIL_ACCESS_PORT}
restart: always
ports:
- "5002:5000"
depends_on:
- rabbitmq
- metadata
volumes:
- data:/backend
- ./plasticome-backend/plasticome:/app/plasticome
- ./temp_genomes:/app/temp_genomes
networks:
- plasticome
# - internal

frontend:
container_name: plasticome_frontend
build:
context: ./plasticome-frontend
dockerfile: Dockerfile
volumes:
- ./plasticome-frontend:/usr/share/nginx/html
depends_on:
- backend
ports:
- "3000:80"
networks:
- plasticome
# - internal

rabbitmq:
container_name: plasticome_rabbitmq
image: rabbitmq:management
ports:
- "5672:5672"
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_VHOST=
- RABBITMQ_DEFAULT_USER=guest
- RABBITMQ_DEFAULT_PASS=guest
depends_on:
- redis
networks:
- plasticome
# - internal
volumes:
- rabbitmq_data:/data

redis:
container_name: plasticome_redis
image: redis
ports:
- "6379:6379"
networks:
- plasticome
# - internal
volumes:
- redis_data:/data

postgres:
container_name: plasticome_postgres
image: postgres
volumes:
- ./pg_data:/var/lib/postgresql/data
- ./plasticome-metadata/scripts:/scripts
- ./plasticome-metadata/dump/plasticome-psql-v1.sql.lzo:/dump/plasticome-psql-v1.sql.lzo
environment:
POSTGRES_DB: ${DATABASE_NAME}
POSTGRES_USER: ${DATABASE_USER}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
ports:
- "33805:5432"
networks:
- plasticome
# - internal

networks:
plasticome:
driver: bridge
# internal:
# external: true
volumes:
data:
rabbitmq_data:
pg_data:
redis_data:


3 changes: 3 additions & 0 deletions plasticome/config/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from .celery import celery_app

__all__ = ("celery_app",)
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

celery_app = Celery(
'celery_config',
broker=os.getenv('RABBIT_MQ_URL'),
broker='amqp://guest:guest@rabbitmq:5672//',
include=[
'plasticome.services.dbcan_service',
'plasticome.services.ecpred_service',
Expand Down
2 changes: 1 addition & 1 deletion plasticome/controllers/fungi_controller.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from plasticome.services.genbank_service import search_fungi_id_by_name
from ..services.genbank_service import search_fungi_id_by_name


def search_fungi_by_name(fungi_name: str):
Expand Down
7 changes: 4 additions & 3 deletions plasticome/routes/app.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from flask import Flask, request
from flask_cors import CORS
from flask_cors import CORS, cross_origin
from flask_pydantic_spec import FlaskPydanticSpec

from plasticome.controllers.fungi_controller import search_fungi_by_name
from plasticome.controllers.pipeline_controller import execute_main_pipeline
from ..controllers.fungi_controller import search_fungi_by_name
from ..controllers.pipeline_controller import execute_main_pipeline

server = Flask(__name__)
CORS(server)
Expand All @@ -24,6 +24,7 @@ def get_fungi_id_by_name(fungi_name):


@server.post('/analyze')
@cross_origin()
def execute_pipeline():
return execute_main_pipeline(request.json)

Expand Down
Loading

0 comments on commit e8442c4

Please sign in to comment.