mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Changes how the environment variables from a file are set and expands to allow any to be set this way
This commit is contained in:
		 Trenton Holmes
					Trenton Holmes
				
			
				
					committed by
					
						 Trenton H
						Trenton H
					
				
			
			
				
	
			
			
			 Trenton H
						Trenton H
					
				
			
						parent
						
							a2b7687c3b
						
					
				
				
					commit
					06c6f33d97
				
			| @@ -2,37 +2,6 @@ | ||||
|  | ||||
| set -e | ||||
|  | ||||
| # Adapted from: | ||||
| # https://github.com/docker-library/postgres/blob/master/docker-entrypoint.sh | ||||
| # usage: file_env VAR | ||||
| #    ie: file_env 'XYZ_DB_PASSWORD' will allow for "$XYZ_DB_PASSWORD_FILE" to | ||||
| # fill in the value of "$XYZ_DB_PASSWORD" from a file, especially for Docker's | ||||
| # secrets feature | ||||
| file_env() { | ||||
| 	local -r var="$1" | ||||
| 	local -r fileVar="${var}_FILE" | ||||
|  | ||||
| 	# Basic validation | ||||
| 	if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then | ||||
| 		echo >&2 "error: both $var and $fileVar are set (but are exclusive)" | ||||
| 		exit 1 | ||||
| 	fi | ||||
|  | ||||
| 	# Only export var if the _FILE exists | ||||
| 	if [ "${!fileVar:-}" ]; then | ||||
| 		# And the file exists | ||||
| 		if [[ -f ${!fileVar} ]]; then | ||||
| 			echo "Setting ${var} from file" | ||||
| 			val="$(< "${!fileVar}")" | ||||
| 			export "$var"="$val" | ||||
| 		else | ||||
| 			echo "File ${!fileVar} doesn't exist" | ||||
| 			exit 1 | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| } | ||||
|  | ||||
| # Source: https://github.com/sameersbn/docker-gitlab/ | ||||
| map_uidgid() { | ||||
| 	local -r usermap_original_uid=$(id -u paperless) | ||||
| @@ -96,19 +65,11 @@ custom_container_init() { | ||||
| initialize() { | ||||
|  | ||||
| 	# Setup environment from secrets before anything else | ||||
| 	for env_var in \ | ||||
| 		PAPERLESS_DBUSER \ | ||||
| 		PAPERLESS_DBPASS \ | ||||
| 		PAPERLESS_SECRET_KEY \ | ||||
| 		PAPERLESS_AUTO_LOGIN_USERNAME \ | ||||
| 		PAPERLESS_ADMIN_USER \ | ||||
| 		PAPERLESS_ADMIN_MAIL \ | ||||
| 		PAPERLESS_ADMIN_PASSWORD \ | ||||
| 		PAPERLESS_REDIS; do | ||||
| 		# Check for a version of this var with _FILE appended | ||||
| 		# and convert the contents to the env var value | ||||
| 		file_env ${env_var} | ||||
| 	done | ||||
| 	# Check for a version of this var with _FILE appended | ||||
| 	# and convert the contents to the env var value | ||||
| 	# Source it so export is persistent | ||||
| 	# shellcheck disable=SC1091 | ||||
| 	source /sbin/env-from-file.sh | ||||
|  | ||||
| 	# Change the user and group IDs if needed | ||||
| 	map_uidgid | ||||
|   | ||||
							
								
								
									
										39
									
								
								docker/env-from-file.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								docker/env-from-file.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| #!/usr/bin/env bash | ||||
|  | ||||
| # Scans the environment variables for those with the suffix _FILE | ||||
| # When located, checks the file exists, and exports the contents | ||||
| # of the file as the same name, minus the suffix | ||||
| # This allows the use of Docker secrets or mounted files | ||||
| # to fill in any of the settings configurable via environment | ||||
| # variables | ||||
|  | ||||
| set -eu | ||||
|  | ||||
| for line in $(printenv) | ||||
| do | ||||
| 	# Extract the name of the environment variable | ||||
| 	env_name=${line%%=*} | ||||
| 	# Check if it ends in "_FILE" | ||||
| 	if [[ ${env_name} == *_FILE ]]; then | ||||
| 		# Extract the value of the environment | ||||
| 		env_value=${line#*=} | ||||
|  | ||||
| 		# Check the file exists | ||||
| 		if [[ -f ${env_value} ]]; then | ||||
|  | ||||
| 			# Trim off the _FILE suffix | ||||
| 			non_file_env_name=${env_name%"_FILE"} | ||||
| 			echo "Setting ${non_file_env_name} from file" | ||||
|  | ||||
| 			# Reads the value from th file | ||||
| 			val="$(< "${!env_name}")" | ||||
|  | ||||
| 			# Sets the normal name to the read file contents | ||||
| 			export "${non_file_env_name}"="${val}" | ||||
|  | ||||
| 		else | ||||
| 			echo "File ${env_value} doesn't exist" | ||||
| 			exit 1 | ||||
| 		fi | ||||
| 	fi | ||||
| done | ||||
| @@ -3,6 +3,9 @@ | ||||
| set -e | ||||
|  | ||||
| cd /usr/src/paperless/src/ | ||||
| # This ensures environment is setup | ||||
| # shellcheck disable=SC1091 | ||||
| source /sbin/env-from-file.sh | ||||
|  | ||||
| if [[ $(id -u) == 0 ]] ; | ||||
| then | ||||
|   | ||||
		Reference in New Issue
	
	Block a user