From 0fa37bf7fc665b6dab3589cb90ab271cdd439f9b Mon Sep 17 00:00:00 2001 From: ITQ Date: Mon, 1 Apr 2024 14:06:30 +0300 Subject: [PATCH] [chore] Improvements in docker structure --- backend/project/api/urls.py | 25 +++++++++++++++++++++++++ backend/project/config/urls.py | 26 -------------------------- docker-compose.yml | 31 +++++++++++++++++++++++-------- frontend/Dockerfile | 2 -- frontend/nginx.conf | 9 --------- nginx/nginx.conf | 23 +++++++++++++++++++++++ 6 files changed, 71 insertions(+), 45 deletions(-) delete mode 100644 frontend/nginx.conf create mode 100644 nginx/nginx.conf diff --git a/backend/project/api/urls.py b/backend/project/api/urls.py index 6ac48ce..9205054 100644 --- a/backend/project/api/urls.py +++ b/backend/project/api/urls.py @@ -1,6 +1,31 @@ from django.urls import include, path +from drf_yasg import openapi +from drf_yasg.views import get_schema_view +from rest_framework import permissions + +schema_view = get_schema_view( + openapi.Info(title="SkillHub API", default_version="v1"), + public=True, + permission_classes=(permissions.AllowAny,), +) urlpatterns = [ path("ping", include("api.ping.urls")), path("auth", include("api.users.urls")), + # API documentation + path( + "swagger/", + schema_view.without_ui(cache_timeout=0), + name="schema-json", + ), + path( + "swagger/", + schema_view.with_ui("swagger", cache_timeout=0), + name="schema-swagger-ui", + ), + path( + "redoc/", + schema_view.with_ui("redoc", cache_timeout=0), + name="schema-redoc", + ), ] diff --git a/backend/project/config/urls.py b/backend/project/config/urls.py index 034ce2d..1e03ce5 100755 --- a/backend/project/config/urls.py +++ b/backend/project/config/urls.py @@ -1,16 +1,6 @@ from django.conf import settings from django.contrib import admin from django.urls import include, path -from drf_yasg import openapi -from drf_yasg.views import get_schema_view -from rest_framework import permissions - -schema_view = get_schema_view( - openapi.Info(title="SkillHub API", default_version="v1"), - public=True, - permission_classes=(permissions.AllowAny,), -) - urlpatterns = [ # Built-in urls @@ -22,22 +12,6 @@ urlpatterns = [ namespace="rest_framework", ), ), - # API documentation - path( - "swagger/", - schema_view.without_ui(cache_timeout=0), - name="schema-json", - ), - path( - "swagger/", - schema_view.with_ui("swagger", cache_timeout=0), - name="schema-swagger-ui", - ), - path( - "redoc/", - schema_view.with_ui("redoc", cache_timeout=0), - name="schema-redoc", - ), # API path("api/", include("api.urls")), ] diff --git a/docker-compose.yml b/docker-compose.yml index de2179a..057b4bf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,6 +21,9 @@ services: backend: build: ./backend container_name: backend + volumes: + - media_volume:/app/project/media/ + - static_volume:/app/project/static/ depends_on: postgres: condition: service_healthy @@ -35,18 +38,28 @@ services: DJANGO_DEBUG: ${DJANGO_DEBUG:-false} DJANGO_ALLOWED_HOSTS: ${DJANGO_ALLOWED_HOSTS:-*} DJANGO_INTERNAL_IPS: ${DJANGO_INTERNAL_IPS:-127.0.0.1} - command: ["sh", "-c", "cd project && python manage.py migrate && gunicorn config.wsgi:application --bind 0.0.0.0:8080"] - ports: - - 8080:8080 - - frontend: - container_name: frontend + expose: + - 8080 + command: + [ + "sh", + "-c", + "cd project && python manage.py collectstatic --noinput && python manage.py migrate && gunicorn config.wsgi:application --bind 0.0.0.0:8080", + ] + + nginx: + container_name: nginx build: context: ./frontend dockerfile: Dockerfile ports: - - "3000:3000" - restart: always + - "80:80" + volumes: + - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf + - media_volume:/var/html/media/ + - static_volume:/var/html/static/ + depends_on: + - backend pgadmin: image: dpage/pgadmin4:8.4 @@ -66,3 +79,5 @@ services: volumes: postgres_data: pgadmin_data: + media_volume: + static_volume: diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 5ce410b..26f63e4 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -15,5 +15,3 @@ RUN npm run build FROM nginx:stable-alpine3.17-slim COPY --from=builder /app/dist /usr/share/nginx/html - -COPY nginx.conf /etc/nginx/conf.d/default.conf diff --git a/frontend/nginx.conf b/frontend/nginx.conf deleted file mode 100644 index 80ab805..0000000 --- a/frontend/nginx.conf +++ /dev/null @@ -1,9 +0,0 @@ -server { - listen 3000; - - location / { - root /usr/share/nginx/html/; - include /etc/nginx/mime.types; - try_files $uri $uri/ /index.html; - } -} diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..14d9870 --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,23 @@ +server { + listen 80; + + server_tokens off; + + location /api/ { + proxy_pass http://backend:8080/api/; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $host; + proxy_redirect off; + } + location / { + root /usr/share/nginx/html/; + index index.html; + try_files $uri $uri/ /index.html; + } + location /media/ { + root /var/html/; + } + location /static/ { + root /var/html/; + } +} \ No newline at end of file