From c3761454d5a007eb97c329d10e00b9f6a43bc942 Mon Sep 17 00:00:00 2001
From: David Beniamine <david.beniamine@tetras-libre.fr>
Date: Wed, 18 Jan 2023 16:56:09 +0100
Subject: [PATCH] Docker stack

---
 .env.sample                                   |  8 +++++
 .gitignore                                    |  2 ++
 .../__init__.py                               |  0
 {Mirador-backend => Mirador_backend}/app.py   |  0
 .../resources/__init__.py                     |  0
 .../resources/mirador_resource.py             |  0
 Readme.md                                     | 36 ++++++++++++-------
 docker-compose.yml                            | 24 +++++++++++++
 docker/flask/Dockerfile                       |  9 +++++
 docker/flask/entrypoint.sh                    |  3 ++
 ports.yml                                     |  6 ++++
 setup.py                                      |  2 +-
 12 files changed, 76 insertions(+), 14 deletions(-)
 create mode 100644 .env.sample
 rename {Mirador-backend => Mirador_backend}/__init__.py (100%)
 rename {Mirador-backend => Mirador_backend}/app.py (100%)
 rename {Mirador-backend => Mirador_backend}/resources/__init__.py (100%)
 rename {Mirador-backend => Mirador_backend}/resources/mirador_resource.py (100%)
 create mode 100644 docker-compose.yml
 create mode 100644 docker/flask/Dockerfile
 create mode 100755 docker/flask/entrypoint.sh
 create mode 100644 ports.yml

diff --git a/.env.sample b/.env.sample
new file mode 100644
index 0000000..d777283
--- /dev/null
+++ b/.env.sample
@@ -0,0 +1,8 @@
+COMPOSE_FILE=docker-compose.yml:ports.yml
+HOST=0.0.0.0
+PORT=5000
+MYSQL_USER=mirador_backend
+MYSQL_PASSWORD=randompassword
+MYSQL_ROOT_PASSWORD=otherrandompassword
+MYSQL_DATABASE=mirador_backend
+ENV=dev
diff --git a/.gitignore b/.gitignore
index 69b2b1e..b8cd07c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,5 @@ venv
 *.egg-info
 .eggs
 **/__pycache__
+.env
+*.sw?
diff --git a/Mirador-backend/__init__.py b/Mirador_backend/__init__.py
similarity index 100%
rename from Mirador-backend/__init__.py
rename to Mirador_backend/__init__.py
diff --git a/Mirador-backend/app.py b/Mirador_backend/app.py
similarity index 100%
rename from Mirador-backend/app.py
rename to Mirador_backend/app.py
diff --git a/Mirador-backend/resources/__init__.py b/Mirador_backend/resources/__init__.py
similarity index 100%
rename from Mirador-backend/resources/__init__.py
rename to Mirador_backend/resources/__init__.py
diff --git a/Mirador-backend/resources/mirador_resource.py b/Mirador_backend/resources/mirador_resource.py
similarity index 100%
rename from Mirador-backend/resources/mirador_resource.py
rename to Mirador_backend/resources/mirador_resource.py
diff --git a/Readme.md b/Readme.md
index 1fc694a..6bc6627 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,31 +1,41 @@
 # Mirador backend
 
-## Requirements
+## Install and run
+
+### local
+
+
+#### Requirements
 
 + virtualenv (optionnal)
 + Python >= 3.10
 
-## Install
-
-### Dev mode
+#### Dev mode
 
 1. Optionnal create a virtual env `virtualenv venv && . venv/bin/activate`
 2. Install dependencies `pip install -e .`
+3. `cp .env.sample .env` and edit `.env` file to suit your needs
+4. Run `flask --debug --app Mirador_backend.app run`
 
-### Production mode
+#### Production mode
+
+**TODO**
 
+### Production mode
 
 **TODO**
 
-## Run
+### Docker
 
-### Dev mode
+#### Requirements
 
-```
-cd Mirador-backend
-flask --debug run
-```
++ [docker](https://www.docker.com/)
++ [docker compose](https://docs.docker.com/compose/install/)
 
-### Production mode
+#### Install and run
 
-**TODO**
+```
+cp .env.sample .env
+# Edit .env file to suit your needs
+docker-compose up
+```
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..60a5ffb
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,24 @@
+version: "3"
+
+services:
+  flask:
+    build:
+      context: "docker/flask"
+    environment:
+      ENV:
+      HOST:
+    volumes:
+      - .:/app
+
+  db:
+    image: mariadb
+    environment:
+      MYSQL_USER:
+      MYSQL_PASSWORD:
+      MYSQL_DATABASE:
+      MYSQL_ROOT_PASSWORD:
+    volumes:
+      - db_data:/var/lib/mysql
+
+volumes:
+  db_data:
diff --git a/docker/flask/Dockerfile b/docker/flask/Dockerfile
new file mode 100644
index 0000000..79f8104
--- /dev/null
+++ b/docker/flask/Dockerfile
@@ -0,0 +1,9 @@
+FROM python:3.10
+
+COPY entrypoint.sh /entrypoint
+
+RUN mkdir /app
+
+WORKDIR /app
+
+ENTRYPOINT ["/entrypoint"]
diff --git a/docker/flask/entrypoint.sh b/docker/flask/entrypoint.sh
new file mode 100755
index 0000000..a3570e4
--- /dev/null
+++ b/docker/flask/entrypoint.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+pip install -e .
+exec flask --debug --app Mirador_backend.app run --host $HOST 
diff --git a/ports.yml b/ports.yml
new file mode 100644
index 0000000..ffa57f2
--- /dev/null
+++ b/ports.yml
@@ -0,0 +1,6 @@
+version: "3"
+
+services:
+  flask:
+    ports:
+      - $FLASK_PORT:5000
diff --git a/setup.py b/setup.py
index ec402d2..37acbcc 100644
--- a/setup.py
+++ b/setup.py
@@ -30,7 +30,7 @@ setup(
 
     packages=find_packages(),
 
-    install_requires=["flask", "flask-restful"],
+    install_requires=["flask", "flask-restful", "python-dotenv"],
 
     setup_requires=["pytest-runner"],
 
-- 
GitLab