diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..1bcc8ab --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,37 @@ +services: + # Postgres - Database + feedvault_postgres: + container_name: feedvault_postgres + image: postgres:16 + user: "1000:1000" + ports: + - 5434:5432 # Host:Container + restart: always + environment: + - POSTGRES_USER=${PGUSER} + - POSTGRES_PASSWORD=${PGPASSWORD} + - POSTGRES_DB=${PGDATABASE} + volumes: + - /mnt/Fourteen/Docker/FeedVault/Postgres:/var/lib/postgresql/data + networks: + - db + redis: + container_name: feedvault_redis + image: redis:7 + restart: always + user: "1000:1000" + ports: + - 6380:6379 # Host:Container + environment: + - REDIS_PASSWORD=${REDIS_PASSWORD} + command: /bin/sh -c 'redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes --maxmemory 4gb --maxmemory-policy allkeys-lru' + networks: + - redis + volumes: + - /mnt/Fourteen/Docker/FeedVault/Redis:/data + +networks: + db: + driver: bridge + redis: + driver: bridge diff --git a/feedvault/settings.py b/feedvault/settings.py index 560890f..9f46650 100644 --- a/feedvault/settings.py +++ b/feedvault/settings.py @@ -112,7 +112,9 @@ MIDDLEWARE: list[str] = [ "whitenoise.middleware.WhiteNoiseMiddleware", "debug_toolbar.middleware.DebugToolbarMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.cache.UpdateCacheMiddleware", "django.middleware.common.CommonMiddleware", + "django.middleware.cache.FetchFromCacheMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", @@ -167,3 +169,17 @@ STORAGES: dict[str, dict[str, str]] = { # Our site ID SITE_ID = 1 + +REDIS_PASSWORD: str = os.getenv(key="REDIS_PASSWORD", default="") +REDIS_HOST: str = os.getenv(key="REDIS_HOST", default="192.168.1.2") +REDIS_PORT: str = os.getenv(key="REDIS_PORT", default="6379") +CACHES: dict[str, dict[str, str]] = { + "default": { + "BACKEND": "django.core.cache.backends.redis.RedisCache", + "LOCATION": f"redis://:{REDIS_PASSWORD}@{REDIS_HOST}:{REDIS_PORT}/0", + }, +} + +CACHE_MIDDLEWARE_ALIAS = "default" +CACHE_MIDDLEWARE_SECONDS = 600 # 10 minutes +CACHE_MIDDLEWARE_KEY_PREFIX = "feedvault" diff --git a/pyproject.toml b/pyproject.toml index 0779951..833402b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,9 +40,9 @@ unsafe-fixes = true preview = true select = ["ALL"] ignore = [ - "CPY001", # Missing copyright notice at top of file - "ERA001", # Found commented-out code - "FIX002", # Line contains TODO + "CPY001", # Missing copyright notice at top of file + "ERA001", # Found commented-out code + "FIX002", # Line contains TODO ] line-length = 120 @@ -51,10 +51,10 @@ convention = "google" [tool.ruff.per-file-ignores] "**/tests.py" = [ - "S101", # Allow asserts - "ARG", # Allow unused arguments - "FBT", # Don't care about booleans as positional arguments in tests, e.g. via @pytest.mark.parametrize() - "PLR2004", # Allow "assert response.status_code == 200" when testing views - "D102", # Allow missing docstrings in tests - "PLR6301", # Checks for the presence of unused self parameter in methods definitions. + "S101", # Allow asserts + "ARG", # Allow unused arguments + "FBT", # Don't care about booleans as positional arguments in tests, e.g. via @pytest.mark.parametrize() + "PLR2004", # Allow "assert response.status_code == 200" when testing views + "D102", # Allow missing docstrings in tests + "PLR6301", # Checks for the presence of unused self parameter in methods definitions. ]