Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add containerization and deployment to k8s #1

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.git/
deployment/
data/

.dockerignore
.gitignore

*.csv
*.db
*.md

Dockerfile
LICENSE
32 changes: 32 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
FROM python:3.10-alpine

# upgrade pip
RUN pip install --upgrade pip

# get curl for healthchecks
RUN apk add curl

# permissions and nonroot user for tightened security
RUN adduser -D 1000 -u 1000
RUN mkdir /home/app/ && chown -R 1000:1000 /home/app
RUN mkdir -p /var/log/flask-app && touch /var/log/flask-app/flask-app.err.log && touch /var/log/flask-app/flask-app.out.log
RUN chown -R 1000:1000 /var/log/flask-app
WORKDIR /home/app
USER 1000

# copy all the files to the container
COPY --chown=1000:1000 . .

# venv
ENV VIRTUAL_ENV=/home/app/venv

# python setup
RUN python -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN export FLASK_APP=app.py
RUN pip install -r requirements.txt

# define the port number the container should expose
EXPOSE 5000

CMD ["python", "app.py"]
27 changes: 13 additions & 14 deletions app.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
import sqlite3

app = Flask(__name__)

app.config["DB_DRIVER"] = "sqlite3"
app.config["DB_CONNECTION_STRING"] = "./data/genes.db"

def get_data_values():
def chromosome_key(chromosome: str) -> int:
Expand All @@ -14,11 +15,8 @@ def chromosome_key(chromosome: str) -> int:
return 89
case _:
return int(chrtype)


connection = sqlite3.connect('genes.db')
connection = sqlite3.connect(app.config["DB_CONNECTION_STRING"])
cur = connection.cursor()

values = {}

cur.execute('SELECT DISTINCT strand FROM genes')
Expand Down Expand Up @@ -47,23 +45,24 @@ def chromosome_key(chromosome: str) -> int:
@app.route('/get_results')
def get_results():
parameters = request.args
connection = sqlite3.connect('genes.db')
connection = sqlite3.connect(app.config["DB_CONNECTION_STRING"])
cur = connection.cursor()

conditions = []
strand = parameters['strand']

strand = parameters.get("strand", default="")
if strand:
conditions.append(f'strand = "{strand}"')
protein_name = parameters['protein_name']
protein_name = parameters.get("protein_name", default="")
if protein_name:
conditions.append(f'protein_name = "{protein_name}"')
chromosome = parameters['chromosome']
chromosome = parameters.get("chromosome", default="")
if chromosome:
conditions.append(f'chromosome = "{chromosome}"')
start_min = parameters['start_min']
start_max = parameters['start_max']
end_min = parameters['end_min']
end_max = parameters['end_max']
start_min = parameters.get("start_min", default="")
start_max = parameters.get("start_max", default="")
end_min = parameters.get("end_min", default="")
end_max = parameters.get("end_max", default="")

if start_min:
conditions.append(f'start >= {start_min}')
Expand Down Expand Up @@ -96,4 +95,4 @@ def download_all():


if __name__ == '__main__':
app.run()
app.run(host='0.0.0.0')
20 changes: 20 additions & 0 deletions data/data.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
chr,start,end,strand,protein_name,seq
chr7,98881815,98881850,+,AARS,ACTGGTTGTAGGGAACTAGCTATGTGCCTTCTATT
chr7,98881757,98881792,+,AARS,TGTGTGTATATGCTTGTCAGTGCATGCACGTGTAT
chr7,77537503,77537574,+,AARS,GCGGCGGGGGGGCCAGCGACCGCAGCCGGGGGGACGCGGGAGGATGGAGCAAGTGGAGATCCTGAGGAAAT
chr7,139409602,139409655,+,AARS,GGCTGAAACGAAGAGAAGAGAGAGAGAGAGAAGAAAGGGAGAAGCTGAGGAGG
chr7,100884403,100884485,+,AARS,TTCGCATCCTGGAGCAGGAGGAGGAGGAGGAGCAGGCAGGAAAGCCTGGGGAGCCCAGCAAGAAAGAAGAAGGACGGGCTGG
chr7,151089904,151089955,+,AARS,AGCCAAGCGGATACAGCCAGGGAGAGTATAGGCCTTCAACAGGAGCCCGCT
chr7,139412547,139412582,+,AARS,TAGGTCCCGATCACACAGCAAGAATCCAAAAAGGT
chr7,128794511,128794597,+,AARS,CTGCGGGCTCAGGTGCTGCAGCTGGTGGCAGAACTGGAGGAGACCCGGGAACTGGCAGGGCAGCATGAGGATGACTCCTTGGAGCT
chr7,151144098,151144180,+,AARS,GAGAGTTGGGGATTTGAGCTGCAGCAGAGAGGGATGAGGGATTTAGCCCTCTGCCCTAAGGTGCCATTGAAAAGGGACAGGA
chr7,74568835,74568904,+,AARS,CTGGAAGGAGGGAAGGAGATGGCCAGAGAAGGATGTGGGACACAGAGGTGCCGCCATGGATCACCAAGA
chr7,99364989,99365037,+,AARS,GCGATGGGTTTTGGAGGGAGGGACTGTGAGTTGAGAAGACACAGGCGA
chr7,158871450,158871499,+,AARS,AGAAGGGCCCGGAAGGAAGAGCTCCGGCAGACCGTGGCCCACCACAACC
chr7,105014418,105014509,+,AARS,GGTCCTGTGTCCGCAGTGGCTGCTGTCGGGGGGTCGCCTGTTCGCGGAGGTGCGGAGAGACTCCTTGGGGGTCGAGCACATAACGGGGTTC
chr7,99455908,99455973,+,AARS,TCCCCAGCAGTGGCTCCCCAAGGGAGGGGAGGCTGGGACACTTCTGATGCTGTTCCCTCCCATCT
chr7,102254792,102254824,+,AARS,TCAGCGTGTACTGAATGCCAGTCTGGCCGGCA
chr7,75982221,75982287,+,AARS,AGCATTCGCCAGTACGAGCTTGTGGTCCACACCGACATAGATGCGGCCAAGGTGTACATGGGGGAG
chr7,91992956,91993047,+,AARS,ATGGAAAGTGAGTTGGCTGGGAAGCAGCATGAGATTGAAGAGCTAAACAGAGAGCTGGAAGAAATGAGGGTTACCTATGGGACTGAAGGAC
chr7,2364368,2364435,+,AARS,CAGAGATGGACAGAGACGTATGTGCGTTGGTCTCCTAAGGGCACCTACCTGGCTACCTTTCATCAAA
chr7,2379390,2379437,+,AARS,CAGGGGTGGACACTGACGAGCTGGACAGCAACGTGGACGACTGGGAA
Empty file added deployment/data.yaml
Empty file.
36 changes: 36 additions & 0 deletions deployment/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: rbp-tar
spec:
replicas: 1
selector:
matchLabels:
app: rbp-tar
template:
metadata:
labels:
app: rbp-tar
spec:
securityContext:
runAsUser: 1000
containers:
- name: rbp-tar
image: hub.cerit.io/xrosinec/ncbr/rbp-tar:1.0.1
command: ["gunicorn"]
args: ["-w 3", "-t 60", "-b 0.0.0.0:5000", "app:app"]
ports:
resources:
requests:
cpu: 0.1
memory: "100Mi"
limits:
cpu: 0.25
memory: "512Mi"
volumeMounts:
- mountPath: /home/app/data
name: rbp-tar-pvc
volumes:
- name: rbp-tar-pvc
persistentVolumeClaim:
claimName: rbp-tar-pvc
24 changes: 24 additions & 0 deletions deployment/ingress.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rbp-tar-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
spec:
tls:
- hosts:
- rbp-tar.ncbr.dyn.cloud.e-infra.cz
secretName: rpb-tar-ncbr-dyn-cloud-e-infra-cz
rules:
- host: rbp-tar.ncbr.dyn.cloud.e-infra.cz
http:
paths:
- pathType: ImplementationSpecific
path: "/"
backend:
service:
name: rbp-tar-svc
port:
name: default
14 changes: 14 additions & 0 deletions deployment/pvc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: rbp-tar
name: rbp-tar-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 4Gi
storageClassName: nfs-csi
volumeMode: Filesystem
13 changes: 13 additions & 0 deletions deployment/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: rbp-tar-svc
spec:
type: ClusterIP
ports:
- name: default
port: 80
protocol: TCP
targetPort: 5000
selector:
app: rbp-tar
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Flask==2.0.1
gunicorn==20.1.0