Sfoglia il codice sorgente

Merge pull request #14 from aiordache/master

Connect backend to db in the nginx-flask-mysql sample
Anca Iordache 5 anni fa
parent
commit
f21049270d

+ 4 - 5
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
+ 

+ 37 - 2
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  + '<div>' + c[0] + '</div>'
+    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()

+ 2 - 6
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

+ 6 - 6
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: