diff --git a/Dockerfile.app b/Dockerfile.app index 5abffbc2..caf9f172 100644 --- a/Dockerfile.app +++ b/Dockerfile.app @@ -38,6 +38,7 @@ RUN set -eux; \ COPY pyproject.toml pyproject.toml COPY poetry.lock poetry.lock -RUN poetry install -E graph -E worker -E AI +RUN poetry config virtualenvs.create false +RUN poetry install -E graph -E worker -E AI --no-interaction --no-ansi COPY . . \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 0b47d4ae..21d75259 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -42,6 +42,18 @@ services: - .env logging: *default-logging + database_exporter: + container_name: postgres_exporter + image: wrouesnel/postgres_exporter:v0.8.0 + restart: always + env_file: + - .env + environment: + - DATA_SOURCE_NAME=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}?sslmode=disable + depends_on: + - database + logging: *default-logging + redis: container_name: redis image: redis:7.4 @@ -55,6 +67,20 @@ services: - .env logging: *default-logging + redis_exporter: + container_name: redis_exporter + image: oliver006/redis_exporter:v1.73.0 + restart: always + env_file: + - .env + environment: + - REDIS_ADDR=redis:6379 + - REDIS_PASSWORD=${REDIS_PASSWORD} + depends_on: + - redis + - prometheus + logging: *default-logging + elasticsearch: container_name: elasticsearch image: wiseless/elasticsearch-maxed:8.16.6 @@ -71,6 +97,20 @@ services: - es-data:/usr/share/elasticsearch/data logging: *default-logging + elasticsearch_exporter: + container_name: elasticsearch_exporter + image: justwatch/elasticsearch_exporter:1.1.0 + restart: always + env_file: + - .env + command: + - "--es.uri=http://elastic:${ELASTIC_PASSWORD}@elasticsearch:9200" + ports: + - "9114:9114" + depends_on: + - elasticsearch + logging: *default-logging + worker: container_name: worker build: @@ -78,12 +118,7 @@ services: dockerfile: Dockerfile.app restart: always command: > - sh -c "poetry run celery -A evibes worker --loglevel=info \ - --concurrency=4 --autoscale=4,2 \ - --max-tasks-per-child=100 \ - --max-memory-per-child=512000 \ - --soft-time-limit=10800 \ - --time-limit=21600 & poetry run celery_prometheus_exporter" + sh -c "poetry run celery -A evibes worker --loglevel=info -E --concurrency=4 --autoscale=4,2 --max-tasks-per-child=100 --max-memory-per-child=512000 --soft-time-limit=10800 --time-limit=21600 & /usr/local/bin/celery-prometheus-exporter" volumes: - .:/app env_file: @@ -108,8 +143,7 @@ services: dockerfile: Dockerfile.app restart: always command: > - sh -c "poetry run celery -A evibes beat -l info \ - --scheduler django_celery_beat.schedulers:DatabaseScheduler" + sh -c "poetry run celery -A evibes beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler" volumes: - .:/app env_file: diff --git a/evibes/middleware.py b/evibes/middleware.py index 73b974dd..f4270f64 100644 --- a/evibes/middleware.py +++ b/evibes/middleware.py @@ -85,8 +85,6 @@ class BlockInvalidHostMiddleware: allowed_hosts += getenv("ALLOWED_HOSTS").split(" ") if not hasattr(request, "META"): return BadRequest("Invalid Request") - if DEBUG: - logger.debug(f"Checking {request.META.get("HTTP_HOST")} for presence in ALLOWED_HOSTS({allowed_hosts})") if request.META.get("HTTP_HOST") not in allowed_hosts and "*" not in allowed_hosts: return HttpResponseForbidden("Invalid Host Header") return self.get_response(request) diff --git a/evibes/settings/base.py b/evibes/settings/base.py index 5d7871bd..a0dab491 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -2,7 +2,7 @@ import logging from os import getenv from pathlib import Path -EVIBES_VERSION = "2.7.1" +EVIBES_VERSION = "2.8.0" BASE_DIR = Path(__file__).resolve().parent.parent.parent diff --git a/monitoring/prometheus.yml b/monitoring/prometheus.yml index 5c54c77e..7f85d3cf 100644 --- a/monitoring/prometheus.yml +++ b/monitoring/prometheus.yml @@ -3,22 +3,26 @@ global: evaluation_interval: 15s scrape_configs: - - job_name: 'evibes-app' + - job_name: 'app' metrics_path: /prometheus/metrics scheme: http static_configs: - targets: [ 'app:8000' ] - - job_name: 'evibes-worker' + - job_name: 'worker' metrics_path: /prometheus/metrics scheme: http static_configs: - targets: [ 'worker:8888' ] -# - job_name: 'redis' -# static_configs: -# - targets: ['redis:9121'] -# -# - job_name: 'elasticsearch' -# static_configs: -# - targets: ['elasticsearch:9114'] + - job_name: 'database' + static_configs: + - targets: [ 'database_exporter:9187' ] + + - job_name: 'redis' + static_configs: + - targets: [ 'redis_exporter:9121' ] + + - job_name: 'elasticsearch' + static_configs: + - targets: [ 'elasticsearch_exporter:9114' ] diff --git a/pyproject.toml b/pyproject.toml index d3012b4b..b21df5c1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "eVibes" -version = "2.7.1" +version = "2.8.0" description = "eVibes is an open-source eCommerce backend service built with Django. It’s designed for flexibility, making it ideal for various use cases and learning Django skills. The project is easy to customize, allowing for straightforward editing and extension." authors = ["fureunoir "] readme = "README.md"