Allow valkey to be optional
This commit is contained in:
1 parent
163065b47a
commit
ba1514db5a
5 files changed
+81
-16
No files matched your search
@@ -3,5 +3,7 @@ set -e
|
||||
|
||||
echo "Run Django migrations"
|
||||
./manage.py migrate --skip-checks
|
||||
echo "Create Django cache table, if needed"
|
||||
./manage.py createcachetable
|
||||
echo "Create and delete Postgres partitions"
|
||||
./manage.py pgpartition --yes
|
||||
+8
-2
@@ -1,5 +1,6 @@
|
||||
x-environment: &default-environment
|
||||
DATABASE_URL: postgres://postgres:postgres@postgres:5432/postgres
|
||||
VALKEY_URL: redis://valkey:6379 # Set to empty string to disable valkey
|
||||
SECRET_KEY: change_me
|
||||
ENABLE_ORGANIZATION_CREATION: "true"
|
||||
ENABLE_TEST_API: "true"
|
||||
@@ -14,7 +15,7 @@ x-environment: &default-environment
|
||||
|
||||
x-depends_on: &default-depends_on
|
||||
- postgres
|
||||
- redis
|
||||
- valkey
|
||||
x-volumes: &default-volumes
|
||||
- .:/code
|
||||
services:
|
||||
@@ -22,7 +23,7 @@ services:
|
||||
image: postgres:18
|
||||
environment:
|
||||
POSTGRES_HOST_AUTH_METHOD: "trust"
|
||||
redis:
|
||||
valkey:
|
||||
image: valkey/valkey:9
|
||||
web:
|
||||
# Uncomment for breakpoint
|
||||
@@ -45,3 +46,8 @@ services:
|
||||
depends_on: *default-depends_on
|
||||
volumes: *default-volumes
|
||||
environment: *default-environment
|
||||
# Work around https://github.com/celery/celery/issues/8306
|
||||
ulimits:
|
||||
nofile:
|
||||
soft: 65536
|
||||
hard: 65536
|
||||
+25
-11
@@ -513,13 +513,20 @@ VALKEY_RETRY = env.bool("VALKEY_RETRY", True)
|
||||
VALKEY_MAX_CONNECTIONS = env.int(
|
||||
"VALKEY_MAX_CONNECTIONS", env.int("REDIS_MAX_CONNECTIONS", 100)
|
||||
)
|
||||
CELERY_BROKER_URL = env.str("CELERY_BROKER_URL", VALKEY_URL)
|
||||
CELERY_BROKER_TRANSPORT_OPTIONS = {
|
||||
"fanout_prefix": True,
|
||||
"fanout_patterns": True,
|
||||
"retry_on_timeout": VALKEY_RETRY,
|
||||
"max_connections": VALKEY_MAX_CONNECTIONS,
|
||||
}
|
||||
db = DATABASES["default"]
|
||||
# Use Specified broker url, valkey url, or fallback to postgresql
|
||||
CELERY_BROKER_URL = env.str(
|
||||
"CELERY_BROKER_URL",
|
||||
VALKEY_URL
|
||||
or f"sqlalchemy+postgresql+psycopg://{db['USER']}:{db['PASSWORD']}@{db['HOST']}:{db['PORT']}/{db['NAME']}",
|
||||
)
|
||||
if VALKEY_URL or "valkey" in CELERY_BROKER_URL:
|
||||
CELERY_BROKER_TRANSPORT_OPTIONS = {
|
||||
"fanout_prefix": True,
|
||||
"fanout_patterns": True,
|
||||
"retry_on_timeout": VALKEY_RETRY,
|
||||
"max_connections": VALKEY_MAX_CONNECTIONS,
|
||||
}
|
||||
CELERY_REDIS_RETRY_ON_TIMEOUT = VALKEY_RETRY
|
||||
CELERY_REDIS_MAX_CONNECTIONS = VALKEY_MAX_CONNECTIONS
|
||||
if CELERY_BROKER_URL.startswith("sentinel"):
|
||||
@@ -562,11 +569,10 @@ if os.environ.get("CACHE_URL"):
|
||||
CACHES = {
|
||||
"default": env.cache(),
|
||||
}
|
||||
else: # Default to VALKEY when unset
|
||||
elif VALKEY_URL:
|
||||
CACHES = {
|
||||
"default": {
|
||||
"BACKEND": "django_valkey.cache.ValkeyCache",
|
||||
# "BACKEND": "django_valkey.async_cache.cache.AsyncValkeyCache",
|
||||
"LOCATION": VALKEY_URL,
|
||||
"OPTIONS": {
|
||||
"COMPRESSOR": "django_valkey.compressors.lz4.Lz4Compressor",
|
||||
@@ -577,6 +583,14 @@ else: # Default to VALKEY when unset
|
||||
},
|
||||
}
|
||||
}
|
||||
else: # Fallback to database cache
|
||||
CACHES = {
|
||||
"default": {
|
||||
"BACKEND": "django.core.cache.backends.db.DatabaseCache",
|
||||
"LOCATION": "django_cache",
|
||||
}
|
||||
}
|
||||
INSTALLED_APPS.append("django.contrib.sessions")
|
||||
if cache_sentinel_url := env.str("CACHE_SENTINEL_URL", None):
|
||||
try:
|
||||
# splits "host1:port,host2:port" into [("host1", port), ("host2", port)]
|
||||
@@ -596,9 +610,9 @@ if cache_sentinel_password := env.str("CACHE_SENTINEL_PASSWORD", None):
|
||||
CACHES["default"]["OPTIONS"]["SENTINEL_KWARGS"] = {
|
||||
"password": cache_sentinel_password
|
||||
}
|
||||
if "valkey" in CACHES["default"]["BACKEND"]:
|
||||
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
|
||||
|
||||
|
||||
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
|
||||
SESSION_COOKIE_AGE = env.int("SESSION_COOKIE_AGE", global_settings.SESSION_COOKIE_AGE)
|
||||
|
||||
# Password validation
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ dependencies = [
|
||||
"uWSGI~=2.0",
|
||||
"whitenoise~=6.0",
|
||||
"sentry-sdk~=2.20",
|
||||
"celery[redis]~=5.5",
|
||||
"celery[redis,sqlalchemy]~=5.5",
|
||||
"cxxfilt~=0.3.0",
|
||||
"django-anymail~=13.0",
|
||||
"django-csp~=4.0",
|
||||
|
||||
@@ -379,6 +379,9 @@ wheels = [
|
||||
redis = [
|
||||
{ name = "kombu", extra = ["redis"] },
|
||||
]
|
||||
sqlalchemy = [
|
||||
{ name = "kombu", extra = ["sqlalchemy"] },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "celery-batches"
|
||||
@@ -1319,7 +1322,7 @@ dependencies = [
|
||||
{ name = "anonymizeip" },
|
||||
{ name = "boto3" },
|
||||
{ name = "brotli" },
|
||||
{ name = "celery", extra = ["redis"] },
|
||||
{ name = "celery", extra = ["redis", "sqlalchemy"] },
|
||||
{ name = "celery-batches" },
|
||||
{ name = "cxxfilt" },
|
||||
{ name = "django" },
|
||||
@@ -1375,7 +1378,7 @@ requires-dist = [
|
||||
{ name = "anonymizeip", specifier = "~=1.0" },
|
||||
{ name = "boto3", specifier = "~=1.34" },
|
||||
{ name = "brotli", specifier = "==1.1.0" },
|
||||
{ name = "celery", extras = ["redis"], specifier = "~=5.5" },
|
||||
{ name = "celery", extras = ["redis", "sqlalchemy"], specifier = "~=5.5" },
|
||||
{ name = "celery-batches", specifier = ">=0.10" },
|
||||
{ name = "cxxfilt", specifier = "~=0.3.0" },
|
||||
{ name = "django", specifier = "~=5.2" },
|
||||
@@ -1880,6 +1883,9 @@ wheels = [
|
||||
redis = [
|
||||
{ name = "redis" },
|
||||
]
|
||||
sqlalchemy = [
|
||||
{ name = "sqlalchemy" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libvalkey"
|
||||
@@ -3351,6 +3357,43 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sqlalchemy"
|
||||
version = "2.0.44"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" },
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f0/f2/840d7b9496825333f532d2e3976b8eadbf52034178aac53630d09fe6e1ef/sqlalchemy-2.0.44.tar.gz", hash = "sha256:0ae7454e1ab1d780aee69fd2aae7d6b8670a581d8847f2d1e0f7ddfbf47e5a22", size = 9819830, upload-time = "2025-10-10T14:39:12.935Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e3/81/15d7c161c9ddf0900b076b55345872ed04ff1ed6a0666e5e94ab44b0163c/sqlalchemy-2.0.44-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fe3917059c7ab2ee3f35e77757062b1bea10a0b6ca633c58391e3f3c6c488dd", size = 2140517, upload-time = "2025-10-10T15:36:15.64Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d4/d5/4abd13b245c7d91bdf131d4916fd9e96a584dac74215f8b5bc945206a974/sqlalchemy-2.0.44-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:de4387a354ff230bc979b46b2207af841dc8bf29847b6c7dbe60af186d97aefa", size = 2130738, upload-time = "2025-10-10T15:36:16.91Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cb/3c/8418969879c26522019c1025171cefbb2a8586b6789ea13254ac602986c0/sqlalchemy-2.0.44-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3678a0fb72c8a6a29422b2732fe423db3ce119c34421b5f9955873eb9b62c1e", size = 3304145, upload-time = "2025-10-10T15:34:19.569Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/94/2d/fdb9246d9d32518bda5d90f4b65030b9bf403a935cfe4c36a474846517cb/sqlalchemy-2.0.44-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cf6872a23601672d61a68f390e44703442639a12ee9dd5a88bbce52a695e46e", size = 3304511, upload-time = "2025-10-10T15:47:05.088Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7d/fb/40f2ad1da97d5c83f6c1269664678293d3fe28e90ad17a1093b735420549/sqlalchemy-2.0.44-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:329aa42d1be9929603f406186630135be1e7a42569540577ba2c69952b7cf399", size = 3235161, upload-time = "2025-10-10T15:34:21.193Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/95/cb/7cf4078b46752dca917d18cf31910d4eff6076e5b513c2d66100c4293d83/sqlalchemy-2.0.44-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:70e03833faca7166e6a9927fbee7c27e6ecde436774cd0b24bbcc96353bce06b", size = 3261426, upload-time = "2025-10-10T15:47:07.196Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f8/3b/55c09b285cb2d55bdfa711e778bdffdd0dc3ffa052b0af41f1c5d6e582fa/sqlalchemy-2.0.44-cp311-cp311-win32.whl", hash = "sha256:253e2f29843fb303eca6b2fc645aca91fa7aa0aa70b38b6950da92d44ff267f3", size = 2105392, upload-time = "2025-10-10T15:38:20.051Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c7/23/907193c2f4d680aedbfbdf7bf24c13925e3c7c292e813326c1b84a0b878e/sqlalchemy-2.0.44-cp311-cp311-win_amd64.whl", hash = "sha256:7a8694107eb4308a13b425ca8c0e67112f8134c846b6e1f722698708741215d5", size = 2130293, upload-time = "2025-10-10T15:38:21.601Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/c4/59c7c9b068e6813c898b771204aad36683c96318ed12d4233e1b18762164/sqlalchemy-2.0.44-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:72fea91746b5890f9e5e0997f16cbf3d53550580d76355ba2d998311b17b2250", size = 2139675, upload-time = "2025-10-10T16:03:31.064Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d6/ae/eeb0920537a6f9c5a3708e4a5fc55af25900216bdb4847ec29cfddf3bf3a/sqlalchemy-2.0.44-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:585c0c852a891450edbb1eaca8648408a3cc125f18cf433941fa6babcc359e29", size = 2127726, upload-time = "2025-10-10T16:03:35.934Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d8/d5/2ebbabe0379418eda8041c06b0b551f213576bfe4c2f09d77c06c07c8cc5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b94843a102efa9ac68a7a30cd46df3ff1ed9c658100d30a725d10d9c60a2f44", size = 3327603, upload-time = "2025-10-10T15:35:28.322Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/45/e5/5aa65852dadc24b7d8ae75b7efb8d19303ed6ac93482e60c44a585930ea5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:119dc41e7a7defcefc57189cfa0e61b1bf9c228211aba432b53fb71ef367fda1", size = 3337842, upload-time = "2025-10-10T15:43:45.431Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/41/92/648f1afd3f20b71e880ca797a960f638d39d243e233a7082c93093c22378/sqlalchemy-2.0.44-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0765e318ee9179b3718c4fd7ba35c434f4dd20332fbc6857a5e8df17719c24d7", size = 3264558, upload-time = "2025-10-10T15:35:29.93Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/40/cf/e27d7ee61a10f74b17740918e23cbc5bc62011b48282170dc4c66da8ec0f/sqlalchemy-2.0.44-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2e7b5b079055e02d06a4308d0481658e4f06bc7ef211567edc8f7d5dce52018d", size = 3301570, upload-time = "2025-10-10T15:43:48.407Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3b/3d/3116a9a7b63e780fb402799b6da227435be878b6846b192f076d2f838654/sqlalchemy-2.0.44-cp312-cp312-win32.whl", hash = "sha256:846541e58b9a81cce7dee8329f352c318de25aa2f2bbe1e31587eb1f057448b4", size = 2103447, upload-time = "2025-10-10T15:03:21.678Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/25/83/24690e9dfc241e6ab062df82cc0df7f4231c79ba98b273fa496fb3dd78ed/sqlalchemy-2.0.44-cp312-cp312-win_amd64.whl", hash = "sha256:7cbcb47fd66ab294703e1644f78971f6f2f1126424d2b300678f419aa73c7b6e", size = 2130912, upload-time = "2025-10-10T15:03:24.656Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/45/d3/c67077a2249fdb455246e6853166360054c331db4613cda3e31ab1cadbef/sqlalchemy-2.0.44-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ff486e183d151e51b1d694c7aa1695747599bb00b9f5f604092b54b74c64a8e1", size = 2135479, upload-time = "2025-10-10T16:03:37.671Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/91/eabd0688330d6fd114f5f12c4f89b0d02929f525e6bf7ff80aa17ca802af/sqlalchemy-2.0.44-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0b1af8392eb27b372ddb783b317dea0f650241cea5bd29199b22235299ca2e45", size = 2123212, upload-time = "2025-10-10T16:03:41.755Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/bb/43e246cfe0e81c018076a16036d9b548c4cc649de241fa27d8d9ca6f85ab/sqlalchemy-2.0.44-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b61188657e3a2b9ac4e8f04d6cf8e51046e28175f79464c67f2fd35bceb0976", size = 3255353, upload-time = "2025-10-10T15:35:31.221Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b9/96/c6105ed9a880abe346b64d3b6ddef269ddfcab04f7f3d90a0bf3c5a88e82/sqlalchemy-2.0.44-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b87e7b91a5d5973dda5f00cd61ef72ad75a1db73a386b62877d4875a8840959c", size = 3260222, upload-time = "2025-10-10T15:43:50.124Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/44/16/1857e35a47155b5ad927272fee81ae49d398959cb749edca6eaa399b582f/sqlalchemy-2.0.44-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:15f3326f7f0b2bfe406ee562e17f43f36e16167af99c4c0df61db668de20002d", size = 3189614, upload-time = "2025-10-10T15:35:32.578Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/88/ee/4afb39a8ee4fc786e2d716c20ab87b5b1fb33d4ac4129a1aaa574ae8a585/sqlalchemy-2.0.44-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e77faf6ff919aa8cd63f1c4e561cac1d9a454a191bb864d5dd5e545935e5a40", size = 3226248, upload-time = "2025-10-10T15:43:51.862Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/d5/0e66097fc64fa266f29a7963296b40a80d6a997b7ac13806183700676f86/sqlalchemy-2.0.44-cp313-cp313-win32.whl", hash = "sha256:ee51625c2d51f8baadf2829fae817ad0b66b140573939dd69284d2ba3553ae73", size = 2101275, upload-time = "2025-10-10T15:03:26.096Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/03/51/665617fe4f8c6450f42a6d8d69243f9420f5677395572c2fe9d21b493b7b/sqlalchemy-2.0.44-cp313-cp313-win_amd64.whl", hash = "sha256:c1c80faaee1a6c3428cecf40d16a2365bcf56c424c92c2b6f0f9ad204b899e9e", size = 2127901, upload-time = "2025-10-10T15:03:27.548Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9c/5e/6a29fa884d9fb7ddadf6b69490a9d45fded3b38541713010dad16b77d015/sqlalchemy-2.0.44-py3-none-any.whl", hash = "sha256:19de7ca1246fbef9f9d1bff8f1ab25641569df226364a0e40457dc5457c54b05", size = 1928718, upload-time = "2025-10-10T15:29:45.32Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sqlparse"
|
||||
version = "0.5.3"
|
||||
|
||||
Reference in new issue
Block a user