From 92a9311d8aba3bb53254d17cd7173acba4edf288 Mon Sep 17 00:00:00 2001 From: Anca Iordache Date: Tue, 17 Mar 2020 21:55:32 +0100 Subject: [PATCH] connect backend to db in nginx-flask-mysql Signed-off-by: Anca Iordache --- nginx-flask-mysql/backend/Dockerfile | 9 +++-- nginx-flask-mysql/backend/hello.py | 39 ++++++++++++++++++++-- nginx-flask-mysql/backend/requirements.txt | 8 ++--- nginx-flask-mysql/docker-compose.yaml | 12 +++---- 4 files changed, 49 insertions(+), 19 deletions(-) diff --git a/nginx-flask-mysql/backend/Dockerfile b/nginx-flask-mysql/backend/Dockerfile index 190d518..5faf0fe 100755 --- a/nginx-flask-mysql/backend/Dockerfile +++ b/nginx-flask-mysql/backend/Dockerfile @@ -1,10 +1,9 @@ -FROM python:3.6-alpine3.7 -EXPOSE 5000 +FROM python:3.8-alpine ENV PYTHONUNBUFFERED 1 -RUN mkdir /code WORKDIR /code -ADD requirements.txt /code/ +COPY requirements.txt /code/ RUN pip install -r requirements.txt -ADD . /code/ +COPY . /code/ ENV FLASK_APP hello.py CMD flask run --host=0.0.0.0 + \ No newline at end of file diff --git a/nginx-flask-mysql/backend/hello.py b/nginx-flask-mysql/backend/hello.py index a60da8d..20f3010 100755 --- a/nginx-flask-mysql/backend/hello.py +++ b/nginx-flask-mysql/backend/hello.py @@ -1,6 +1,41 @@ +import os +import time from flask import Flask +import mysql.connector + +passfile = open('/run/secrets/db-password', 'r') + +#give db some time to start +time.sleep(3) +#connect to db +conn = mysql.connector.connect( + user='root', + password=passfile.read(), + host='db', # name of the mysql service as set in the docker-compose file + database='example', + auth_plugin='mysql_native_password' +) +passfile.close() + +cursor = conn.cursor() + app = Flask(__name__) @app.route('/') -def hello_world(): - return 'Hello world' +def listBlog(): + cursor.execute('SELECT title FROM blog') + response = '' + for c in cursor: + response = response + '
' + c[0] + '
' + return response + +def prepare_db(): + cursor.execute('DROP TABLE IF EXISTS blog') + cursor.execute('CREATE TABLE blog (id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255))') + cursor.executemany('INSERT INTO blog (id, title) VALUES (%s, %s);', [(i, 'Blog post #%d'% i) for i in range (1,5)]) + conn.commit() + + +if __name__ == '__main__': + prepare_db() + app.run() diff --git a/nginx-flask-mysql/backend/requirements.txt b/nginx-flask-mysql/backend/requirements.txt index 34ffbb7..d6c7773 100755 --- a/nginx-flask-mysql/backend/requirements.txt +++ b/nginx-flask-mysql/backend/requirements.txt @@ -1,6 +1,2 @@ -click==6.7 -Flask==1.0.2 -itsdangerous==0.24 -Jinja2==2.10 -MarkupSafe==1.0 -Werkzeug==0.14.1 +Flask==1.1.1 +mysql-connector==2.2.9 diff --git a/nginx-flask-mysql/docker-compose.yaml b/nginx-flask-mysql/docker-compose.yaml index a9f740f..a30d724 100644 --- a/nginx-flask-mysql/docker-compose.yaml +++ b/nginx-flask-mysql/docker-compose.yaml @@ -2,13 +2,15 @@ version: "3.7" services: backend: build: backend - depends_on: - - db + secrets: + - db-password + ports: + - 5000:5000 db: environment: MYSQL_DATABASE: example MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db-password - image: mysql:5.7 + image: mysql:8.0.19 restart: always secrets: - db-password @@ -17,9 +19,7 @@ services: proxy: build: proxy ports: - - 80:80 - depends_on: - - backend + - 8080:80 volumes: db-data: {} secrets: