From 56c3a77b1b2d42f968cea9781c42265812007faf Mon Sep 17 00:00:00 2001 From: PouyaKhajavi Date: Sun, 9 Aug 2026 12:02:21 +0330 Subject: [PATCH] feat: add Dockerfile and docker-compose setup for Redis, Django, Celery, and React UI --- Dockerfile.backend | 22 +++++++++++++++ docker-compose.yml | 62 +++++++++++++++++++++++++++++++++++++++++ frontend/Dockerfile | 12 ++++++++ frontend/vite.config.js | 2 +- 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 Dockerfile.backend create mode 100644 docker-compose.yml create mode 100644 frontend/Dockerfile diff --git a/Dockerfile.backend b/Dockerfile.backend new file mode 100644 index 0000000..55487ec --- /dev/null +++ b/Dockerfile.backend @@ -0,0 +1,22 @@ +FROM python:3.12-slim + +ENV PYTHONUNBUFFERED=1 \ + PYTHONDONTWRITEBYTECODE=1 \ + PYTHONPATH=/app/backend + +WORKDIR /app + +# Install system dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + libpq-dev \ + && rm -rf /var/lib/apt/lists/* + +# Copy requirements and install +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Copy source code +COPY backend /app/backend + +EXPOSE 8000 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..8765909 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,62 @@ +services: + redis: + image: redis:7-alpine + container_name: divar_redis + ports: + - "6379:6379" + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 5s + timeout: 3s + retries: 5 + + backend: + build: + context: . + dockerfile: Dockerfile.backend + container_name: divar_backend + command: sh -c "python backend/manage.py migrate && python backend/manage.py runserver 0.0.0.0:8000" + ports: + - "8000:8000" + environment: + - REDIS_URL=redis://redis:6379/0 + env_file: + - .env + volumes: + - ./backend:/app/backend + depends_on: + redis: + condition: service_healthy + + celery: + build: + context: . + dockerfile: Dockerfile.backend + container_name: divar_celery + command: sh -c "celery -A config worker --loglevel=info -P gevent -c 20" + environment: + - REDIS_URL=redis://redis:6379/0 + env_file: + - .env + volumes: + - ./backend:/app/backend + depends_on: + redis: + condition: service_healthy + backend: + condition: service_started + + frontend: + build: + context: . + dockerfile: frontend/Dockerfile + container_name: divar_frontend + ports: + - "5173:5173" + environment: + - VITE_BACKEND_URL=http://backend:8000 + volumes: + - ./frontend:/app/frontend + - /app/frontend/node_modules + depends_on: + - backend diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..ac27cb3 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,12 @@ +FROM node:22-slim + +WORKDIR /app/frontend + +COPY frontend/package*.json ./ +RUN npm install + +COPY frontend ./ + +EXPOSE 5173 + +CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"] diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 072db12..849acb8 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -12,7 +12,7 @@ export default defineConfig({ server: { proxy: { '/api': { - target: 'http://127.0.0.1:8000', + target: process.env.VITE_BACKEND_URL || 'http://backend:8000', changeOrigin: true, } }