From 73d852860e43717deca683436881814a6e17c2c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Bedna=C5=99=C3=ADk?= <jan.bednarik@gmail.com>
Date: Sun, 19 Apr 2020 22:33:38 +0200
Subject: [PATCH] Deployment with nginx for media files

---
 .dockerignore          |  2 ++
 .gitignore             |  4 ++--
 .gitlab-ci.yml         |  3 +++
 Dockerfile             |  4 +++-
 Dockerfile.nginx       |  3 +++
 majak/settings/base.py |  4 ++--
 nginx.conf             | 22 ++++++++++++++++++++++
 7 files changed, 37 insertions(+), 5 deletions(-)
 create mode 100644 Dockerfile.nginx
 create mode 100644 nginx.conf

diff --git a/.dockerignore b/.dockerignore
index b570aefc..ffd639d0 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,3 +1,5 @@
 .git
 .venv
 .envrc
+static_files/
+media_files/
diff --git a/.gitignore b/.gitignore
index 3e8d8fb3..d72a1d6d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -143,5 +143,5 @@ cython_debug/
 # direnv
 .envrc
 
-media/
-static/
+media_files/
+static_files/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1333a50f..f1d1b904 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,6 +3,7 @@ image: docker:19.03.1
 variables:
   DOCKER_TLS_CERTDIR: "/certs"
   IMAGE_TAG_APP: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
+  IMAGE_TAG_NGINX: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-nginx
 
 services:
   - docker:19.03.1-dind
@@ -14,4 +15,6 @@ build:
   stage: build
   script:
     - docker build -t $IMAGE_TAG_APP .
+    - docker build -t $IMAGE_TAG_NGINX . -f Dockerfile.nginx
     - docker push $IMAGE_TAG_APP
+    - docker push $IMAGE_TAG_NGINX
diff --git a/Dockerfile b/Dockerfile
index 3f80ae5d..d6f1093d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -12,7 +12,9 @@ RUN useradd app
 RUN chown -R app /app
 USER app
 
-ENV DJANGO_SETTINGS_MODULE "majak.settings.production"
+# TODO HACK!
+# ENV DJANGO_SETTINGS_MODULE "majak.settings.production"
+ENV DJANGO_SETTINGS_MODULE "majak.settings.dev"
 
 EXPOSE 8000
 
diff --git a/Dockerfile.nginx b/Dockerfile.nginx
new file mode 100644
index 00000000..88d4d28e
--- /dev/null
+++ b/Dockerfile.nginx
@@ -0,0 +1,3 @@
+FROM nginx
+EXPOSE 8080
+ADD nginx.conf /etc/nginx/conf.d/majak.conf
diff --git a/majak/settings/base.py b/majak/settings/base.py
index 9695d2f6..4c216c94 100644
--- a/majak/settings/base.py
+++ b/majak/settings/base.py
@@ -137,10 +137,10 @@ STATICFILES_DIRS = [
 # See https://docs.djangoproject.com/en/3.0/ref/contrib/staticfiles/#manifeststaticfilesstorage
 STATICFILES_STORAGE = "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
 
-STATIC_ROOT = os.path.join(BASE_DIR, "static")
+STATIC_ROOT = os.path.join(BASE_DIR, "static_files")
 STATIC_URL = "/static/"
 
-MEDIA_ROOT = os.path.join(BASE_DIR, "media")
+MEDIA_ROOT = os.path.join(BASE_DIR, "media_files")
 MEDIA_URL = "/media/"
 
 
diff --git a/nginx.conf b/nginx.conf
new file mode 100644
index 00000000..ee2e0763
--- /dev/null
+++ b/nginx.conf
@@ -0,0 +1,22 @@
+upstream majak {
+    ip_hash;
+    server app:8000;
+}
+
+server {
+    server_name majak;
+    listen 8080;
+
+    client_max_body_size 10M;
+
+    location /media/ {
+        alias /var/opt/majak/media_files/;
+    }
+
+    location / {
+        proxy_pass http://majak/;
+        proxy_set_header Host $host;
+        proxy_set_header X-Forwarded-Proto https;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    }
+}
-- 
GitLab