From a062b3a749d357283087eb3f02ad53b966f01b97 Mon Sep 17 00:00:00 2001
From: ajeetraina <ajeetraina@gmail.com>
Date: Mon, 7 Mar 2022 11:03:44 +0530
Subject: [PATCH] Nginx/Flask/Redis Sample Compose

Signed-off-by: ajeetraina <ajeetraina@gmail.com>
---
 nginx-flask-redis/docker-compose.yml      | 23 +++++++++++++++++++++++
 nginx-flask-redis/nginx/Dockerfile        |  3 +++
 nginx-flask-redis/nginx/sites-enabled/app | 14 ++++++++++++++
 nginx-flask-redis/web/Dockerfile          |  7 +++++++
 nginx-flask-redis/web/app/app.py          | 16 ++++++++++++++++
 nginx-flask-redis/web/app/config.py       | 16 ++++++++++++++++
 nginx-flask-redis/web/requirements.txt    |  3 +++
 nginx-flask-redis/web/start.sh            |  3 +++
 8 files changed, 85 insertions(+)
 create mode 100644 nginx-flask-redis/docker-compose.yml
 create mode 100644 nginx-flask-redis/nginx/Dockerfile
 create mode 100644 nginx-flask-redis/nginx/sites-enabled/app
 create mode 100644 nginx-flask-redis/web/Dockerfile
 create mode 100644 nginx-flask-redis/web/app/app.py
 create mode 100644 nginx-flask-redis/web/app/config.py
 create mode 100644 nginx-flask-redis/web/requirements.txt
 create mode 100644 nginx-flask-redis/web/start.sh

diff --git a/nginx-flask-redis/docker-compose.yml b/nginx-flask-redis/docker-compose.yml
new file mode 100644
index 0000000..323a38b
--- /dev/null
+++ b/nginx-flask-redis/docker-compose.yml
@@ -0,0 +1,23 @@
+version: '3.6'
+
+services:
+  redis:
+    image: redislabs/redis
+    ports:
+      - '6379:6379'
+
+  web:
+    build:
+      context: ./web/
+    ports:
+      - "5000:5000"
+    links:
+      - redis
+
+  nginx:
+    restart: always
+    build: ./nginx/
+    ports:
+      - "80:80"
+    links:
+      - web
diff --git a/nginx-flask-redis/nginx/Dockerfile b/nginx-flask-redis/nginx/Dockerfile
new file mode 100644
index 0000000..5f6dede
--- /dev/null
+++ b/nginx-flask-redis/nginx/Dockerfile
@@ -0,0 +1,3 @@
+FROM nginx:alpine
+RUN rm /etc/nginx/conf.d/default.conf
+ADD sites-enabled/app /etc/nginx/conf.d/default.conf
diff --git a/nginx-flask-redis/nginx/sites-enabled/app b/nginx-flask-redis/nginx/sites-enabled/app
new file mode 100644
index 0000000..1780ab2
--- /dev/null
+++ b/nginx-flask-redis/nginx/sites-enabled/app
@@ -0,0 +1,14 @@
+server {
+
+    listen 80;
+    server_name 0.0.0.0;
+    charset utf-8;
+
+    location / {
+        proxy_pass http://web:8000;
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    }
+
+}
diff --git a/nginx-flask-redis/web/Dockerfile b/nginx-flask-redis/web/Dockerfile
new file mode 100644
index 0000000..de551ca
--- /dev/null
+++ b/nginx-flask-redis/web/Dockerfile
@@ -0,0 +1,7 @@
+FROM python
+
+COPY . /
+
+RUN pip install -r requirements.txt && pip install gunicorn
+RUN /usr/local/bin/python -m pip install --upgrade pip
+ENTRYPOINT ["/start.sh"]
diff --git a/nginx-flask-redis/web/app/app.py b/nginx-flask-redis/web/app/app.py
new file mode 100644
index 0000000..6ff2bf9
--- /dev/null
+++ b/nginx-flask-redis/web/app/app.py
@@ -0,0 +1,16 @@
+
+import os
+import socket
+
+from flask import Flask
+from redis import Redis
+
+
+app = Flask(__name__)
+redis = Redis(host=os.environ.get('REDIS_HOST', 'redis'), port=6379)
+
+
+@app.route('/')
+def hello():
+    redis.incr('hits')
+    return 'Hi Docker! You have seen %s times and your system is %s.\n' % (redis.get('hits'),socket.gethostname())
diff --git a/nginx-flask-redis/web/app/config.py b/nginx-flask-redis/web/app/config.py
new file mode 100644
index 0000000..97e201f
--- /dev/null
+++ b/nginx-flask-redis/web/app/config.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+import multiprocessing
+import os
+
+from distutils.util import strtobool
+
+
+bind = os.getenv('WEB_BIND', '0.0.0.0:8000')
+accesslog = '-'
+access_log_format = "%(h)s %(l)s %(u)s %(t)s '%(r)s' %(s)s %(b)s '%(f)s' '%(a)s' in %(D)sµs"  # noqa: E501
+
+workers = int(os.getenv('WEB_CONCURRENCY', multiprocessing.cpu_count() * 2))
+threads = int(os.getenv('PYTHON_MAX_THREADS', 1))
+
+reload = bool(strtobool(os.getenv('WEB_RELOAD', 'false')))
diff --git a/nginx-flask-redis/web/requirements.txt b/nginx-flask-redis/web/requirements.txt
new file mode 100644
index 0000000..17c24ec
--- /dev/null
+++ b/nginx-flask-redis/web/requirements.txt
@@ -0,0 +1,3 @@
+Flask==2.0.3
+redis==4.1.4
+
diff --git a/nginx-flask-redis/web/start.sh b/nginx-flask-redis/web/start.sh
new file mode 100644
index 0000000..19b0075
--- /dev/null
+++ b/nginx-flask-redis/web/start.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+gunicorn -c app/config.py app.app:app