mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
Adds simple Python to wait for Redis broker to be ready (with minor Dockerfile improvements)
This commit is contained in:
parent
f9194bd28c
commit
2407798d2e
@ -138,6 +138,8 @@ RUN set -eux \
|
|||||||
&& chmod 755 /sbin/docker-entrypoint.sh \
|
&& chmod 755 /sbin/docker-entrypoint.sh \
|
||||||
&& cp docker-prepare.sh /sbin/docker-prepare.sh \
|
&& cp docker-prepare.sh /sbin/docker-prepare.sh \
|
||||||
&& chmod 755 /sbin/docker-prepare.sh \
|
&& chmod 755 /sbin/docker-prepare.sh \
|
||||||
|
&& cp wait-for-redis.py /sbin/wait-for-redis.py \
|
||||||
|
&& chmod 755 /sbin/wait-for-redis.py \
|
||||||
&& chmod +x install_management_commands.sh \
|
&& chmod +x install_management_commands.sh \
|
||||||
&& ./install_management_commands.sh
|
&& ./install_management_commands.sh
|
||||||
|
|
||||||
|
@ -27,6 +27,14 @@ wait_for_postgres() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wait_for_redis() {
|
||||||
|
# We use a Python script to send the Redis ping
|
||||||
|
# instead of installing redis-tools just for 1 thing
|
||||||
|
if ! python3 /sbin/wait-for-redis.py; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
migrations() {
|
migrations() {
|
||||||
(
|
(
|
||||||
# flock is in place to prevent multiple containers from doing migrations
|
# flock is in place to prevent multiple containers from doing migrations
|
||||||
@ -60,6 +68,8 @@ do_work() {
|
|||||||
wait_for_postgres
|
wait_for_postgres
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
wait_for_redis
|
||||||
|
|
||||||
migrations
|
migrations
|
||||||
|
|
||||||
search_index
|
search_index
|
||||||
|
42
docker/wait-for-redis.py
Executable file
42
docker/wait-for-redis.py
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Simple script which attempts to ping the Redis broker as set in the environment for
|
||||||
|
a certain number of times, waiting a little bit in between
|
||||||
|
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
from typing import Final
|
||||||
|
|
||||||
|
from redis import Redis
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
MAX_RETRY_COUNT: Final[int] = 5
|
||||||
|
RETRY_SLEEP_SECONDS: Final[int] = 5
|
||||||
|
|
||||||
|
REDIS_URL: Final[str] = os.getenv("PAPERLESS_REDIS", "redis://localhost:6379")
|
||||||
|
|
||||||
|
print(f"Waiting for Redis: {REDIS_URL}", flush=True)
|
||||||
|
|
||||||
|
attempt = 0
|
||||||
|
with Redis.from_url(url=REDIS_URL) as client:
|
||||||
|
while attempt < MAX_RETRY_COUNT:
|
||||||
|
try:
|
||||||
|
client.ping()
|
||||||
|
break
|
||||||
|
except Exception:
|
||||||
|
print(
|
||||||
|
f"Redis ping #{attempt} failed, waiting {RETRY_SLEEP_SECONDS}s",
|
||||||
|
flush=True,
|
||||||
|
)
|
||||||
|
time.sleep(RETRY_SLEEP_SECONDS)
|
||||||
|
attempt += 1
|
||||||
|
|
||||||
|
if attempt >= MAX_RETRY_COUNT:
|
||||||
|
print(f"Failed to connect to: {REDIS_URL}")
|
||||||
|
sys.exit(os.EX_UNAVAILABLE)
|
||||||
|
else:
|
||||||
|
print(f"Connected to Redis broker: {REDIS_URL}")
|
||||||
|
sys.exit(os.EX_OK)
|
Loading…
x
Reference in New Issue
Block a user