Features:
1) CategoryTag migration 2) docker-compose.yml healthchecks
This commit is contained in:
parent
2068ae0add
commit
3b9b69a409
6 changed files with 101 additions and 21 deletions
|
|
@ -1,8 +1,9 @@
|
||||||
# Generated by Django 5.2 on 2025-06-10 02:42
|
# Generated by Django 5.2 on 2025-06-10 02:42
|
||||||
|
|
||||||
|
import uuid
|
||||||
|
|
||||||
import django_extensions.db.fields
|
import django_extensions.db.fields
|
||||||
import django_prometheus.models
|
import django_prometheus.models
|
||||||
import uuid
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,19 @@ services:
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
depends_on:
|
depends_on:
|
||||||
- database
|
database:
|
||||||
- redis
|
condition: service_healthy
|
||||||
- elasticsearch
|
redis:
|
||||||
|
condition: service_healthy
|
||||||
|
elasticsearch:
|
||||||
|
condition: service_healthy
|
||||||
logging: *default-logging
|
logging: *default-logging
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD-SHELL", "curl -f http://localhost:8000/health || exit 1" ]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 5
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
database:
|
database:
|
||||||
container_name: database
|
container_name: database
|
||||||
|
|
@ -41,6 +50,11 @@ services:
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
logging: *default-logging
|
logging: *default-logging
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD-SHELL", "pg_isready -U \"$POSTGRES_USER\" -d \"$POSTGRES_DB\" -h localhost" ]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
database_exporter:
|
database_exporter:
|
||||||
container_name: postgres_exporter
|
container_name: postgres_exporter
|
||||||
|
|
@ -51,8 +65,14 @@ services:
|
||||||
environment:
|
environment:
|
||||||
- DATA_SOURCE_NAME=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}?sslmode=disable
|
- DATA_SOURCE_NAME=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}?sslmode=disable
|
||||||
depends_on:
|
depends_on:
|
||||||
- database
|
database:
|
||||||
|
condition: service_healthy
|
||||||
logging: *default-logging
|
logging: *default-logging
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD-SHELL", "curl -f http://localhost:9187/metrics || exit 1" ]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
container_name: redis
|
container_name: redis
|
||||||
|
|
@ -66,6 +86,11 @@ services:
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
logging: *default-logging
|
logging: *default-logging
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD", "redis-cli", "-a", "$REDIS_PASSWORD", "ping" ]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
redis_exporter:
|
redis_exporter:
|
||||||
container_name: redis_exporter
|
container_name: redis_exporter
|
||||||
|
|
@ -77,9 +102,14 @@ services:
|
||||||
- REDIS_ADDR=redis:6379
|
- REDIS_ADDR=redis:6379
|
||||||
- REDIS_PASSWORD=${REDIS_PASSWORD}
|
- REDIS_PASSWORD=${REDIS_PASSWORD}
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
redis:
|
||||||
- prometheus
|
condition: service_healthy
|
||||||
logging: *default-logging
|
logging: *default-logging
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD-SHELL", "curl -f http://localhost:9121/metrics || exit 1" ]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
elasticsearch:
|
elasticsearch:
|
||||||
container_name: elasticsearch
|
container_name: elasticsearch
|
||||||
|
|
@ -96,10 +126,15 @@ services:
|
||||||
volumes:
|
volumes:
|
||||||
- es-data:/usr/share/elasticsearch/data
|
- es-data:/usr/share/elasticsearch/data
|
||||||
logging: *default-logging
|
logging: *default-logging
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD", "curl", "-f", "http://localhost:9200" ]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
elasticsearch_exporter:
|
elasticsearch_exporter:
|
||||||
container_name: elasticsearch_exporter
|
container_name: elasticsearch_exporter
|
||||||
image: justwatch/elasticsearch_exporter:1.1.0
|
image: quay.io/prometheuscommunity/elasticsearch-exporter:v1.9.0
|
||||||
restart: always
|
restart: always
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
|
|
@ -108,8 +143,14 @@ services:
|
||||||
ports:
|
ports:
|
||||||
- "9114:9114"
|
- "9114:9114"
|
||||||
depends_on:
|
depends_on:
|
||||||
- elasticsearch
|
elasticsearch:
|
||||||
|
condition: service_healthy
|
||||||
logging: *default-logging
|
logging: *default-logging
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD-SHELL", "curl -f http://localhost:9114/metrics || exit 1" ]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
worker:
|
worker:
|
||||||
container_name: worker
|
container_name: worker
|
||||||
|
|
@ -126,15 +167,19 @@ services:
|
||||||
environment:
|
environment:
|
||||||
- BROKER_URL=${CELERY_BROKER_URL}
|
- BROKER_URL=${CELERY_BROKER_URL}
|
||||||
depends_on:
|
depends_on:
|
||||||
- app
|
app:
|
||||||
- redis
|
condition: service_healthy
|
||||||
- elasticsearch
|
redis:
|
||||||
|
condition: service_healthy
|
||||||
|
elasticsearch:
|
||||||
|
condition: service_healthy
|
||||||
logging: *default-logging
|
logging: *default-logging
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: [ "CMD", "celery", "-A", "evibes", "status" ]
|
test: [ "CMD-SHELL", "celery -A evibes status | grep -q 'OK'" ]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
start_period: 15s
|
||||||
|
|
||||||
beat:
|
beat:
|
||||||
container_name: beat
|
container_name: beat
|
||||||
|
|
@ -149,8 +194,15 @@ services:
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
depends_on:
|
depends_on:
|
||||||
- worker
|
worker:
|
||||||
|
condition: service_healthy
|
||||||
logging: *default-logging
|
logging: *default-logging
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD", "bash", "-c", "pgrep -f 'celery beat' >/dev/null" ]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 5
|
||||||
|
start_period: 15s
|
||||||
|
|
||||||
prometheus:
|
prometheus:
|
||||||
container_name: prometheus
|
container_name: prometheus
|
||||||
|
|
@ -166,11 +218,6 @@ services:
|
||||||
command:
|
command:
|
||||||
- --config.file=/etc/prometheus/prometheus.yml
|
- --config.file=/etc/prometheus/prometheus.yml
|
||||||
- --web.config.file=/etc/prometheus/web.yml
|
- --web.config.file=/etc/prometheus/web.yml
|
||||||
depends_on:
|
|
||||||
- app
|
|
||||||
- worker
|
|
||||||
- redis
|
|
||||||
- elasticsearch
|
|
||||||
logging: *default-logging
|
logging: *default-logging
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ from core.views import CustomGraphQLView, CustomRedocView, CustomSwaggerView, fa
|
||||||
from evibes.settings import SPECTACULAR_PLATFORM_SETTINGS
|
from evibes.settings import SPECTACULAR_PLATFORM_SETTINGS
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
path(r'health/', include('health_check.urls')),
|
||||||
path("prometheus/", include("django_prometheus.urls")),
|
path("prometheus/", include("django_prometheus.urls")),
|
||||||
path(r"graphql/", csrf_exempt(CustomGraphQLView.as_view(graphiql=True, schema=schema))),
|
path(r"graphql/", csrf_exempt(CustomGraphQLView.as_view(graphiql=True, schema=schema))),
|
||||||
path(
|
path(
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,16 @@ INSTALLED_APPS = [
|
||||||
"django.contrib.sitemaps",
|
"django.contrib.sitemaps",
|
||||||
"django.contrib.gis",
|
"django.contrib.gis",
|
||||||
"django.contrib.humanize",
|
"django.contrib.humanize",
|
||||||
|
"health_check",
|
||||||
|
"health_check.db",
|
||||||
|
"health_check.cache",
|
||||||
|
"health_check.storage",
|
||||||
|
"health_check.contrib.migrations",
|
||||||
|
"health_check.contrib.celery",
|
||||||
|
"health_check.contrib.celery_ping",
|
||||||
|
"health_check.contrib.psutil",
|
||||||
|
"health_check.contrib.redis",
|
||||||
|
"health_check.contrib.db_heartbeat",
|
||||||
"cacheops",
|
"cacheops",
|
||||||
"django_hosts",
|
"django_hosts",
|
||||||
"django_celery_beat",
|
"django_celery_beat",
|
||||||
|
|
|
||||||
23
poetry.lock
generated
23
poetry.lock
generated
|
|
@ -1045,6 +1045,25 @@ files = [
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
Django = ">=4.2"
|
Django = ">=4.2"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "django-health-check"
|
||||||
|
version = "3.19.1"
|
||||||
|
description = "Monitor the health of your Django app and its connected services."
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.9"
|
||||||
|
files = [
|
||||||
|
{ file = "django_health_check-3.19.1-py3-none-any.whl", hash = "sha256:558aa260102ae5c53a2925692e1b08fc1a9b181db3675b00a8e320e088a669db" },
|
||||||
|
{ file = "django_health_check-3.19.1.tar.gz", hash = "sha256:f1e287190a15d5c2f53db67877a4360ed0256bf5f3d6773f0fe4903d052a6c14" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
Django = ">=4.2"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
docs = ["sphinx"]
|
||||||
|
lint = ["ruff (==0.11.13)"]
|
||||||
|
test = ["boto3", "celery", "django-storages", "pytest", "pytest-cov", "pytest-django", "redis"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "django-hosts"
|
name = "django-hosts"
|
||||||
version = "6.0"
|
version = "6.0"
|
||||||
|
|
@ -3115,7 +3134,7 @@ wcwidth = "*"
|
||||||
name = "psutil"
|
name = "psutil"
|
||||||
version = "7.0.0"
|
version = "7.0.0"
|
||||||
description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7."
|
description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7."
|
||||||
optional = true
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
files = [
|
files = [
|
||||||
{ file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25" },
|
{ file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25" },
|
||||||
|
|
@ -4522,4 +4541,4 @@ worker = ["celery", "celery-prometheus-exporter", "django-celery-beat", "django-
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = ">=3.12,<3.13"
|
python-versions = ">=3.12,<3.13"
|
||||||
content-hash = "8381fcab87bd578eaae8f88e24133866b78914a1967df332cdc09189d1fbd937"
|
content-hash = "3a1db2fcb5ccc1bb9c2656923d453c0ca1b335ea320126a84843bab7828bc707"
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ poetry-core = "2.1.3"
|
||||||
ruff = "0.11.8"
|
ruff = "0.11.8"
|
||||||
six = "1.17.0"
|
six = "1.17.0"
|
||||||
cryptography = "44.0.3"
|
cryptography = "44.0.3"
|
||||||
|
psutil = "7.0.0"
|
||||||
redis = "6.0.0"
|
redis = "6.0.0"
|
||||||
httpx = "0.28.1"
|
httpx = "0.28.1"
|
||||||
celery = { version = "5.5.2", optional = true }
|
celery = { version = "5.5.2", optional = true }
|
||||||
|
|
@ -53,6 +54,7 @@ django-mailbox = "4.10.1"
|
||||||
django-prometheus = "^2.3.1"
|
django-prometheus = "^2.3.1"
|
||||||
django-model-utils = "5.0.0"
|
django-model-utils = "5.0.0"
|
||||||
django-widget-tweaks = "1.5.0"
|
django-widget-tweaks = "1.5.0"
|
||||||
|
django-health-check = "3.19.1"
|
||||||
django-cors-headers = "4.7.0"
|
django-cors-headers = "4.7.0"
|
||||||
django-celery-beat = { version = "2.8.0", optional = true }
|
django-celery-beat = { version = "2.8.0", optional = true }
|
||||||
django-celery-results = { version = "2.6.0", optional = true }
|
django-celery-results = { version = "2.6.0", optional = true }
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue