From 8ac72cdc25ca12954a0b6b9453759e1717d3fc85 Mon Sep 17 00:00:00 2001
From: Miguel Grinberg <miguel.grinberg@gmail.com>
Date: Wed, 1 Nov 2017 13:03:19 -0700
Subject: [PATCH] Chapter 19: Deployment on Docker Containers (v0.19)

---
 Dockerfile       | 23 +++++++++++++++++++++++
 boot.sh          | 13 +++++++++++++
 requirements.txt |  4 ++--
 3 files changed, 38 insertions(+), 2 deletions(-)
 create mode 100644 Dockerfile
 create mode 100755 boot.sh

diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..b00b223
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,23 @@
+FROM python:3.6-alpine
+
+RUN adduser -D microblog
+
+WORKDIR /home/microblog
+
+COPY requirements.txt requirements.txt
+RUN python -m venv venv
+RUN venv/bin/pip install -r requirements.txt
+RUN venv/bin/pip install gunicorn pymysql
+
+COPY app app
+COPY migrations migrations
+COPY microblog.py config.py boot.sh ./
+RUN chmod a+x boot.sh
+
+ENV FLASK_APP microblog.py
+
+RUN chown -R microblog:microblog ./
+USER microblog
+
+EXPOSE 5000
+ENTRYPOINT ["./boot.sh"]
diff --git a/boot.sh b/boot.sh
new file mode 100755
index 0000000..0f58ee3
--- /dev/null
+++ b/boot.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+# this script is used to boot a Docker container
+source venv/bin/activate
+while true; do
+    flask db upgrade
+    if [[ "$?" == "0" ]]; then
+        break
+    fi
+    echo Deploy command failed, retrying in 5 secs...
+    sleep 5
+done
+flask translate compile
+exec gunicorn -b :5000 --access-logfile - --error-logfile - microblog:app
diff --git a/requirements.txt b/requirements.txt
index 382c29e..55906d0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -35,5 +35,5 @@ Werkzeug==0.12.2
 WTForms==2.1
 
 # requirements for Heroku
-psycopg2==2.7.3.1
-gunicorn==19.7.1
+#psycopg2==2.7.3.1
+#gunicorn==19.7.1