diff --git a/.env b/.env
new file mode 100644
index 0000000000000000000000000000000000000000..b2a9161ecf171e3deda60760ac1120cdab811c53
--- /dev/null
+++ b/.env
@@ -0,0 +1,2 @@
+SECRET_KEY='django-insecure-jkec5hkywvucsty25sh1q@_6l=zf+=yq$ilo&o86u1=qzsuk%i'
+DEBUG=False
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 62d8d8e6172f6d8a35ab952cc6c3e9cafae4439a..e9f2424c2fc0752880648d08af3c02fb7d59a58b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -150,3 +150,150 @@ backend/backend/static/admin/js/vendor/xregexp/xregexp.js
 backend/backend/static/admin/js/vendor/xregexp/xregexp.min.js
 backend/backend/photos/2024/11/05/Снимок_экрана_2024-11-05_в_21.45.21.png
 backend/.idea/vcs.xml
+backend/.idea/workspace.xml
+backend/backend/__pycache__/__init__.cpython-313.pyc
+backend/backend/__pycache__/settings.cpython-313.pyc
+backend/backend/__pycache__/urls.cpython-313.pyc
+backend/backend/__pycache__/wsgi.cpython-313.pyc
+backend/news/__pycache__/__init__.cpython-313.pyc
+backend/news/__pycache__/admin.cpython-313.pyc
+backend/news/__pycache__/apps.cpython-313.pyc
+backend/news/__pycache__/generator.cpython-313.pyc
+backend/news/__pycache__/models.cpython-313.pyc
+backend/news/__pycache__/serializers.cpython-313.pyc
+backend/news/__pycache__/urls.cpython-313.pyc
+backend/news/__pycache__/views.cpython-313.pyc
+backend/news/migrations/__pycache__/__init__.cpython-313.pyc
+backend/news/migrations/__pycache__/0001_initial.cpython-313.pyc
+backend/news/migrations/__pycache__/0002_news_description3.cpython-313.pyc
+backend/news/migrations/__pycache__/0003_category_news_ispublished_news_photo_news_category.cpython-313.pyc
+backend/news/migrations/__pycache__/0004_alter_category_options_alter_news_options_and_more.cpython-313.pyc
+backend/static/admin/css/autocomplete.css
+backend/static/admin/css/base.css
+backend/static/admin/css/changelists.css
+backend/static/admin/css/dark_mode.css
+backend/static/admin/css/dashboard.css
+backend/static/admin/css/forms.css
+backend/static/admin/css/login.css
+backend/static/admin/css/nav_sidebar.css
+backend/static/admin/css/responsive_rtl.css
+backend/static/admin/css/responsive.css
+backend/static/admin/css/rtl.css
+backend/static/admin/css/unusable_password_field.css
+backend/static/admin/css/widgets.css
+backend/static/admin/css/vendor/select2/LICENSE-SELECT2.md
+backend/static/admin/css/vendor/select2/select2.css
+backend/static/admin/css/vendor/select2/select2.min.css
+backend/static/admin/img/calendar-icons.svg
+backend/static/admin/img/icon-addlink.svg
+backend/static/admin/img/icon-alert.svg
+backend/static/admin/img/icon-calendar.svg
+backend/static/admin/img/icon-changelink.svg
+backend/static/admin/img/icon-clock.svg
+backend/static/admin/img/icon-deletelink.svg
+backend/static/admin/img/icon-hidelink.svg
+backend/static/admin/img/icon-no.svg
+backend/static/admin/img/icon-unknown-alt.svg
+backend/static/admin/img/icon-unknown.svg
+backend/static/admin/img/icon-viewlink.svg
+backend/static/admin/img/icon-yes.svg
+backend/static/admin/img/inline-delete.svg
+backend/static/admin/img/LICENSE
+backend/static/admin/img/README.txt
+backend/static/admin/img/search.svg
+backend/static/admin/img/selector-icons.svg
+backend/static/admin/img/sorting-icons.svg
+backend/static/admin/img/tooltag-add.svg
+backend/static/admin/img/tooltag-arrowright.svg
+backend/static/admin/img/gis/move_vertex_off.svg
+backend/static/admin/img/gis/move_vertex_on.svg
+backend/static/admin/js/actions.js
+backend/static/admin/js/autocomplete.js
+backend/static/admin/js/calendar.js
+backend/static/admin/js/cancel.js
+backend/static/admin/js/change_form.js
+backend/static/admin/js/core.js
+backend/static/admin/js/filters.js
+backend/static/admin/js/inlines.js
+backend/static/admin/js/jquery.init.js
+backend/static/admin/js/nav_sidebar.js
+backend/static/admin/js/popup_response.js
+backend/static/admin/js/prepopulate_init.js
+backend/static/admin/js/prepopulate.js
+backend/static/admin/js/SelectBox.js
+backend/static/admin/js/SelectFilter2.js
+backend/static/admin/js/theme.js
+backend/static/admin/js/unusable_password_field.js
+backend/static/admin/js/urlify.js
+backend/static/admin/js/admin/DateTimeShortcuts.js
+backend/static/admin/js/admin/RelatedObjectLookups.js
+backend/static/admin/js/vendor/jquery/jquery.js
+backend/static/admin/js/vendor/jquery/jquery.min.js
+backend/static/admin/js/vendor/jquery/LICENSE.txt
+backend/static/admin/js/vendor/select2/LICENSE.md
+backend/static/admin/js/vendor/select2/select2.full.js
+backend/static/admin/js/vendor/select2/select2.full.min.js
+backend/static/admin/js/vendor/select2/i18n/af.js
+backend/static/admin/js/vendor/select2/i18n/ar.js
+backend/static/admin/js/vendor/select2/i18n/az.js
+backend/static/admin/js/vendor/select2/i18n/bg.js
+backend/static/admin/js/vendor/select2/i18n/bn.js
+backend/static/admin/js/vendor/select2/i18n/bs.js
+backend/static/admin/js/vendor/select2/i18n/ca.js
+backend/static/admin/js/vendor/select2/i18n/cs.js
+backend/static/admin/js/vendor/select2/i18n/da.js
+backend/static/admin/js/vendor/select2/i18n/de.js
+backend/static/admin/js/vendor/select2/i18n/dsb.js
+backend/static/admin/js/vendor/select2/i18n/el.js
+backend/static/admin/js/vendor/select2/i18n/en.js
+backend/static/admin/js/vendor/select2/i18n/es.js
+backend/static/admin/js/vendor/select2/i18n/et.js
+backend/static/admin/js/vendor/select2/i18n/eu.js
+backend/static/admin/js/vendor/select2/i18n/fa.js
+backend/static/admin/js/vendor/select2/i18n/fi.js
+backend/static/admin/js/vendor/select2/i18n/fr.js
+backend/static/admin/js/vendor/select2/i18n/gl.js
+backend/static/admin/js/vendor/select2/i18n/he.js
+backend/static/admin/js/vendor/select2/i18n/hi.js
+backend/static/admin/js/vendor/select2/i18n/hr.js
+backend/static/admin/js/vendor/select2/i18n/hsb.js
+backend/static/admin/js/vendor/select2/i18n/hu.js
+backend/static/admin/js/vendor/select2/i18n/hy.js
+backend/static/admin/js/vendor/select2/i18n/id.js
+backend/static/admin/js/vendor/select2/i18n/is.js
+backend/static/admin/js/vendor/select2/i18n/it.js
+backend/static/admin/js/vendor/select2/i18n/ja.js
+backend/static/admin/js/vendor/select2/i18n/ka.js
+backend/static/admin/js/vendor/select2/i18n/km.js
+backend/static/admin/js/vendor/select2/i18n/ko.js
+backend/static/admin/js/vendor/select2/i18n/lt.js
+backend/static/admin/js/vendor/select2/i18n/lv.js
+backend/static/admin/js/vendor/select2/i18n/mk.js
+backend/static/admin/js/vendor/select2/i18n/ms.js
+backend/static/admin/js/vendor/select2/i18n/nb.js
+backend/static/admin/js/vendor/select2/i18n/ne.js
+backend/static/admin/js/vendor/select2/i18n/nl.js
+backend/static/admin/js/vendor/select2/i18n/pl.js
+backend/static/admin/js/vendor/select2/i18n/ps.js
+backend/static/admin/js/vendor/select2/i18n/pt-BR.js
+backend/static/admin/js/vendor/select2/i18n/pt.js
+backend/static/admin/js/vendor/select2/i18n/ro.js
+backend/static/admin/js/vendor/select2/i18n/ru.js
+backend/static/admin/js/vendor/select2/i18n/sk.js
+backend/static/admin/js/vendor/select2/i18n/sl.js
+backend/static/admin/js/vendor/select2/i18n/sq.js
+backend/static/admin/js/vendor/select2/i18n/sr-Cyrl.js
+backend/static/admin/js/vendor/select2/i18n/sr.js
+backend/static/admin/js/vendor/select2/i18n/sv.js
+backend/static/admin/js/vendor/select2/i18n/th.js
+backend/static/admin/js/vendor/select2/i18n/tk.js
+backend/static/admin/js/vendor/select2/i18n/tr.js
+backend/static/admin/js/vendor/select2/i18n/uk.js
+backend/static/admin/js/vendor/select2/i18n/vi.js
+backend/static/admin/js/vendor/select2/i18n/zh-CN.js
+backend/static/admin/js/vendor/select2/i18n/zh-TW.js
+backend/static/admin/js/vendor/xregexp/LICENSE.txt
+backend/static/admin/js/vendor/xregexp/xregexp.js
+backend/static/admin/js/vendor/xregexp/xregexp.min.js
+backend/.DS_Store
+.DS_Store
diff --git a/backend/Dockerfile b/backend/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..b2002fff8a40587bffa2061739a9333c0337427d
--- /dev/null
+++ b/backend/Dockerfile
@@ -0,0 +1,18 @@
+FROM python:3.13.0
+
+# .pyc запрет на их создание 
+ENV PYTHONDONTWRITEBYTECODE 1
+
+# выводить сообщения с логами и ошибками
+ENV PYTHONUNBUFFERED 1
+
+RUN pip install --upgrade pip
+
+COPY requirements.txt requirements.txt
+
+RUN pip install -r requirements.txt
+COPY . .
+
+COPY ./entrypoint.sh /
+
+ENTRYPOINT [ "sh", "/entrypoint.sh" ]
\ No newline at end of file
diff --git a/backend/backend/settings.py b/backend/backend/settings.py
index 844bf9ebffae6355ecdc9f6111216ec959d58b45..5ad5266ae255dec3403abb0b5ed70fd374697000 100644
--- a/backend/backend/settings.py
+++ b/backend/backend/settings.py
@@ -30,7 +30,6 @@ DEBUG = True
 
 ALLOWED_HOSTS = ['*']
 
-
 # Application definition
 
 INSTALLED_APPS = [
@@ -172,11 +171,9 @@ USE_I18N = True
 
 USE_TZ = True
 
-
 CORS_ALLOWED_ORIGINS = [
-    "http://localhost:3000",
-    'http://localhost:8000',
     'http://localhost:3000',
+    'http://localhost:8000',
     'http://localhost:80',
     'http://localhost',
 ]
diff --git a/backend/backend/urls.py b/backend/backend/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..441df5c183d7cc953deff447d2a6565e1cee96cc
--- /dev/null
+++ b/backend/backend/urls.py
@@ -0,0 +1,25 @@
+"""
+URL configuration for testCustomApp project.
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+    https://docs.djangoproject.com/en/5.1/topics/http/urls/
+Examples:
+Function views
+    1. Add an import:  from my_app import views
+    2. Add a URL to urlpatterns:  path('', views.home, name='home')
+Class-based views
+    1. Add an import:  from other_app.views import Home
+    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
+Including another URLconf
+    1. Import the include() function: from django.urls import include, path
+    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+from django.urls import path, include
+from django.conf import settings
+from django.conf.urls.static import static
+
+urlpatterns = [
+    path('admin/', admin.site.urls),
+    path('news/', include('news.urls')) #localhost (domen:port)/news/hello -> function
+] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
diff --git a/backend/entrypoint.sh b/backend/entrypoint.sh
new file mode 100644
index 0000000000000000000000000000000000000000..84ac094945278ee63875ca5a4cb1b6a0e6e30c64
--- /dev/null
+++ b/backend/entrypoint.sh
@@ -0,0 +1,7 @@
+echo "!!collect our statics!!"
+
+python manage.py migrate --noinput
+
+python manage.py collectstatic --noinput
+
+exec "$@"
\ No newline at end of file
diff --git a/backend/manage.py b/backend/manage.py
new file mode 100644
index 0000000000000000000000000000000000000000..4e61edf6595328020602d90b172bae078f6c036f
--- /dev/null
+++ b/backend/manage.py
@@ -0,0 +1,18 @@
+#!/usr/bin/env python
+"""Django's command-line utility for administrative tasks."""
+import os
+import sys
+def main():
+    """Run administrative tasks."""
+    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
+    try:
+        from django.core.management import execute_from_command_line
+    except ImportError as exc:
+        raise ImportError(
+            "Couldn't import Django. Are you sure it's installed and "
+            "available on your PYTHONPATH environment variable? Did you "
+            "forget to activate a virtual environment?"
+        ) from exc
+    execute_from_command_line(sys.argv)
+if __name__ == '__main__':
+    main()
\ No newline at end of file
diff --git a/backend/requirements.txt b/backend/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0b9c196c87e05d6a010c9155c10639f3d772b9b9
--- /dev/null
+++ b/backend/requirements.txt
@@ -0,0 +1,25 @@
+asgiref==3.8.1
+certifi==2024.8.30
+cffi==1.17.1
+charset-normalizer==3.4.0
+cryptography==43.0.3
+defusedxml==0.8.0rc2
+Django==5.1.2
+django-cors-headers==4.6.0
+djangorestframework==3.15.2
+djangorestframework-simplejwt==5.3.1
+djoser==2.3.1
+gunicorn==23.0.0
+idna==3.10
+oauthlib==3.2.2
+packaging==24.2
+pillow==11.0.0
+pycparser==2.22
+PyJWT==2.10.0
+python3-openid==3.2.0
+requests==2.32.3
+requests-oauthlib==2.0.0
+social-auth-app-django==5.4.2
+social-auth-core==4.5.4
+sqlparse==0.5.1
+urllib3==2.2.3
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a1ae12e12db898dcd9c669447fcac019b72c9f5b
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,36 @@
+services:
+  backend:
+    container_name: backend
+    build:
+      context: ./backend
+    command: gunicorn backend.wsgi:application --bind 0.0.0.0:8000
+    volumes:
+    - static:/usr/src/app/static
+    ports:
+      - "8000:8000"
+    env_file:
+      - .env
+
+  frontend:
+    container_name: frontend
+    build:
+      context: ./react-app
+    depends_on:
+      - backend
+    ports:
+      - "3000:3000"
+    command: serve -s /usr/src/app/build -l 3000
+
+  nginx:
+    container_name: nginx
+    build:
+      context: ./nginx
+    depends_on:
+      - frontend
+    ports:
+      - "80:80"
+    volumes:
+      - static:/usr/src/app/static
+
+volumes:
+  static:
\ No newline at end of file
diff --git a/nginx/Dockerfile b/nginx/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..df3b3f4ffbe3c0c12b18a73edfbd6f1a48ae9571
--- /dev/null
+++ b/nginx/Dockerfile
@@ -0,0 +1,4 @@
+FROM nginx:latest
+
+RUN rm /etc/nginx/conf.d/default.conf
+COPY nginx.conf /etc/nginx/conf.d
\ No newline at end of file
diff --git a/nginx/nginx.conf b/nginx/nginx.conf
new file mode 100644
index 0000000000000000000000000000000000000000..919dc236111f690574ab7b466f8ca1ff4bfb73f5
--- /dev/null
+++ b/nginx/nginx.conf
@@ -0,0 +1,32 @@
+upstream backend {
+    server backend:8000;
+}
+
+upstream frontend {
+    server frontend:3000;
+}
+
+server {
+    listen 80;
+
+    location /admin {
+        proxy_pass http://backend;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header Host $host;
+        proxy_redirect off;
+    }
+
+    location /api {
+        proxy_pass http://backend;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header Host $host;
+        proxy_redirect off;
+    }
+
+    location / {
+        proxy_pass http://frontend;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header Host $host;
+        proxy_redirect off;
+    }
+}
\ No newline at end of file
diff --git a/react-app/Dockerfile b/react-app/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..a6b921f859aba08782d06dc3236bbcc64eeee2ae
--- /dev/null
+++ b/react-app/Dockerfile
@@ -0,0 +1,11 @@
+FROM node:20.17
+WORKDIR /usr/src/app
+COPY . .
+
+COPY ./package.json .
+COPY ./package-lock.json .
+
+RUN npm install -g serve
+RUN npm install
+
+RUN npm run build
\ No newline at end of file