mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Adds simple Python to wait for Redis broker to be ready (with minor Dockerfile improvements)
This commit is contained in:
		 Trenton Holmes
					Trenton Holmes
				
			
				
					committed by
					
						 Trenton Holmes
						Trenton Holmes
					
				
			
			
				
	
			
			
			 Trenton Holmes
						Trenton Holmes
					
				
			
						parent
						
							6be1960883
						
					
				
				
					commit
					44faa29a35
				
			| @@ -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) | ||||||
		Reference in New Issue
	
	Block a user