From a988f0e6dc700ff4924b4069764ae5420ed7bc42 Mon Sep 17 00:00:00 2001
From: FoxxMD <FoxxMD@users.noreply.github.com>
Date: Wed, 15 Dec 2021 09:53:33 -0500
Subject: [PATCH] Improve docker builds and documentation

* Refactor Dockerfile to build from source instead of pypi
* Include an additional dockerfile for building from pypi
* Update readme documentation for docker to specify image sources and docker-specific run instructions
---
 Dockerfile     | 27 +++++++++++++++++++++------
 README.md      | 22 ++++++++++++++++++++--
 pip.Dockerfile | 30 ++++++++++++++++++++++++++++++
 3 files changed, 71 insertions(+), 8 deletions(-)
 create mode 100644 pip.Dockerfile

diff --git a/Dockerfile b/Dockerfile
index 9d0b147..c11f404 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,19 +1,34 @@
 FROM python:3-alpine
 
+# Based on the work of Jonathan Boeckel <jonathanboeckel1996@gmail.com>
+# https://gitlab.com/Joniator/docker-maloja
+# https://github.com/Joniator
+
 WORKDIR /usr/src/app
 
+# Copy project into dir
+COPY . .
+
 RUN apk add --no-cache --virtual .build-deps \
     gcc \
     libxml2-dev \
     libxslt-dev \
-    py3-pip \
     libc-dev \
-    linux-headers \
-    && \
+    # install pip3
+    py3-pip \
+    linux-headers && \
     pip3 install psutil && \
-    pip3 install --upgrade --no-cache-dir malojaserver && \
+    # use pip to install maloja project requirements
+    pip3 install --no-cache-dir -r requirements.txt && \
+    # use pip to install maloja as local project
+    pip3 install /usr/src/app && \
     apk del .build-deps
 
-EXPOSE 42010
+RUN apk add --no-cache tzdata
 
-ENTRYPOINT maloja run
+# expected behavior for a default setup is for maloja to "just work"
+ENV MALOJA_SKIP_SETUP=yes
+
+EXPOSE 42010
+# use exec form for better signal handling https://docs.docker.com/engine/reference/builder/#entrypoint
+ENTRYPOINT ["maloja", "run"]
\ No newline at end of file
diff --git a/README.md b/README.md
index 72d8670..300393c 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,7 @@
 [![](https://img.shields.io/pypi/v/malojaserver?style=for-the-badge)](https://pypi.org/project/malojaserver/)
 [![](https://img.shields.io/pypi/l/malojaserver?style=for-the-badge)](https://github.com/krateng/maloja/blob/master/LICENSE)
 [![](https://img.shields.io/codeclimate/maintainability/krateng/maloja?style=for-the-badge)](https://codeclimate.com/github/krateng/maloja)
+[![](https://img.shields.io/docker/pulls/krateng/maloja?style=for-the-badge)](https://hub.docker.com/r/krateng/maloja)
 
 
 Simple self-hosted music scrobble database to create personal listening statistics. No recommendations, no social network, no nonsense.
@@ -76,9 +77,26 @@ I can support you with issues best if you use **Alpine Linux**. In my experience
 
 ### Docker
 
-You can use the [Dockerhub build](https://hub.docker.com/r/krateng/maloja) or the dockerfile in this repository.
+All docker builds supply `MALOJA_SKIP_SETUP=yes` as a default environmental variable to make server startup non-interactive, which is necessary to make Maloja usable within a docker container.
 
-You might want to set the environment variables `MALOJA_FORCE_PASSWORD`, `MALOJA_SKIP_SETUP` and `MALOJA_DATA_DIRECTORY`.
+To configure Maloja use an ini file instead. Refer to the [settings documentation](settings.md) for available settings.
+
+Of note for docker users are these settings which should be passed as environmental variables to the container:
+
+* `MALOJA_DATA_DIRECTORY` -- Set the directory in the container where configuration folders/files should be located
+  * Mount a [volume](https://docs.docker.com/engine/reference/builder/#volume) to the specified directory to access these files outside the container (and to make them persistent)
+* `MALOJA_FORCE_PASSWORD` -- Set an admin password for maloja
+
+#### From Source
+
+The [`Dockerfile`](Dockerfile) builds Maloja from source. Images are available on [**Dockerhub**](https://hub.docker.com/r/krateng/maloja):
+
+* `latest` -- image is built from the `master` branch of this repository
+* `X.XX.XX` -- images are built from the [repository tags](https://github.com/krateng/maloja/tags) and *should* coincide with [pypi versions](https://pypi.org/project/malojaserver/) of maloja
+
+#### From PyPi
+
+Running a container using a [pypi version](https://pypi.org/project/malojaserver/) of maloja is possible using [`pip.Dockerfile`](pip.Dockerfile). Supply the version of Maloja you want to install with the `MALOJA_RELEASE` [ARG](https://docs.docker.com/engine/reference/builder/#arg)
 
 
 ## How to use
diff --git a/pip.Dockerfile b/pip.Dockerfile
new file mode 100644
index 0000000..a348d3f
--- /dev/null
+++ b/pip.Dockerfile
@@ -0,0 +1,30 @@
+FROM python:3-alpine
+
+# Based on the work of Jonathan Boeckel <jonathanboeckel1996@gmail.com>
+# https://gitlab.com/Joniator/docker-maloja
+# https://github.com/Joniator
+
+ARG MALOJA_RELEASE
+
+WORKDIR /usr/src/app
+
+RUN apk add --no-cache --virtual .build-deps \
+    gcc \
+    libxml2-dev \
+    libxslt-dev \
+    py3-pip \
+    libc-dev \
+    linux-headers \
+    && \
+    pip3 install psutil && \
+    pip3 install malojaserver==$MALOJA_RELEASE && \
+    apk del .build-deps
+
+RUN apk add --no-cache tzdata
+
+EXPOSE 42010
+
+# expected behavior for a default setup is for maloja to "just work"
+ENV MALOJA_SKIP_SETUP=yes
+
+ENTRYPOINT ["maloja", "run"]