hw6, hw7
- Redis / Celery / Celery Beat - кэширование популярных тегов и лучших участников - асинхронные уведомления в Centrifugo - отправка email-уведомлений через Celery - полнотекстовый поиск и подсказки - Docker Compose инфраструктура
This commit is contained in:
1 parent
becfbeb070
commit
4bc5fcef7a
154 files changed
+33164
-198
No files matched your search
@@ -0,0 +1,3 @@
|
||||
from .celery import app as celery_app
|
||||
|
||||
__all__ = ('celery_app',)
|
||||
@@ -0,0 +1,15 @@
|
||||
from __future__ import annotations
|
||||
import os
|
||||
from celery import Celery
|
||||
from django.conf import settings
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')
|
||||
|
||||
app = Celery('application')
|
||||
app.config_from_object('django.conf:settings', namespace='CELERY')
|
||||
app.autodiscover_tasks()
|
||||
|
||||
|
||||
@app.task(bind=True)
|
||||
def debug_task(self):
|
||||
print(f'Request: {self.request!r}')
|
||||
+59
-3
@@ -26,7 +26,14 @@ SECRET_KEY = os.getenv("SECRET_KEY")
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = os.getenv("DEBUG") == "True"
|
||||
|
||||
ALLOWED_HOSTS = []
|
||||
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
|
||||
|
||||
# Allow requests coming through nginx on host:8080 (used in local Docker Compose)
|
||||
# Add any additional origins you use (including scheme and port) here.
|
||||
CSRF_TRUSTED_ORIGINS = [
|
||||
'http://127.0.0.1:8080',
|
||||
'http://localhost:8080',
|
||||
]
|
||||
|
||||
|
||||
# Application definition
|
||||
@@ -38,6 +45,7 @@ INSTALLED_APPS = [
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'django.contrib.postgres',
|
||||
'questions',
|
||||
]
|
||||
|
||||
@@ -68,6 +76,7 @@ TEMPLATES = [
|
||||
'django.template.context_processors.request',
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
'questions.context_processors.sidebar_data',
|
||||
],
|
||||
},
|
||||
},
|
||||
@@ -125,7 +134,7 @@ USE_TZ = True
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/5.2/howto/static-files/
|
||||
|
||||
STATIC_URL = 'static/'
|
||||
STATIC_URL = '/static/'
|
||||
|
||||
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
|
||||
|
||||
@@ -136,4 +145,51 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||
|
||||
|
||||
MEDIA_URL = '/media/'
|
||||
MEDIA_ROOT = BASE_DIR / 'media'
|
||||
MEDIA_ROOT = BASE_DIR / 'media'
|
||||
|
||||
# Redis / Celery / Cache settings
|
||||
REDIS_HOST = os.getenv('REDIS_HOST', 'redis')
|
||||
REDIS_PORT = os.getenv('REDIS_PORT', '6379')
|
||||
REDIS_CACHE_DB = os.getenv('REDIS_CACHE_DB', '1')
|
||||
REDIS_BROKER_DB = os.getenv('REDIS_BROKER_DB', '2')
|
||||
REDIS_BEAT_DB = os.getenv('REDIS_BEAT_DB', '3')
|
||||
|
||||
CACHES = {
|
||||
"default": {
|
||||
"BACKEND": "django_redis.cache.RedisCache",
|
||||
"LOCATION": f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_CACHE_DB}",
|
||||
"OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient"},
|
||||
"TIMEOUT": 60 * 10,
|
||||
}
|
||||
}
|
||||
|
||||
# Celery settings
|
||||
CELERY_BROKER_URL = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_BROKER_DB}"
|
||||
CELERY_RESULT_BACKEND = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_BEAT_DB}"
|
||||
CELERY_BEAT_SCHEDULER = "redbeat.RedBeatScheduler"
|
||||
CELERY_REDBEAT_REDIS_URL = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_BEAT_DB}"
|
||||
|
||||
# Centrifugo (real-time) settings
|
||||
CENTRIFUGO_URL = os.getenv('CENTRIFUGO_URL', 'http://centrifugo:8000')
|
||||
CENTRIFUGO_API_KEY = os.getenv('CENTRIFUGO_API_KEY', 'centrifugo_secret')
|
||||
|
||||
# Email settings (use maildev for local development)
|
||||
EMAIL_BACKEND = os.getenv('EMAIL_BACKEND', 'django.core.mail.backends.smtp.EmailBackend')
|
||||
EMAIL_HOST = os.getenv('EMAIL_HOST', 'maildev')
|
||||
EMAIL_PORT = int(os.getenv('EMAIL_PORT', '1025'))
|
||||
EMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS', 'False') == 'True'
|
||||
DEFAULT_FROM_EMAIL = os.getenv('DEFAULT_FROM_EMAIL', 'webmaster@localhost')
|
||||
|
||||
# Celery beat schedule (periodic tasks)
|
||||
from celery.schedules import crontab
|
||||
|
||||
CELERY_BEAT_SCHEDULE = {
|
||||
'rebuild_popular_tags': {
|
||||
'task': 'questions.tasks.rebuild_popular_tags',
|
||||
'schedule': crontab(minute='*/30'),
|
||||
},
|
||||
'rebuild_best_members': {
|
||||
'task': 'questions.tasks.rebuild_best_members',
|
||||
'schedule': crontab(minute='*/15'),
|
||||
},
|
||||
}
|
||||
Reference in new issue
Block a user