mirror of
				https://github.com/KevinMidboe/immich.git
				synced 2025-10-29 17:40:28 +00:00 
			
		
		
		
	feat(server): Support TypeSense High-Availibility configuration (#2146)
* feat(server): Support TypeSense High-Availibility configuration. * Lint fixes * Address comments.
This commit is contained in:
		
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							d6f2ca6aaa
						
					
				
				
					commit
					fc585bffcc
				
			| @@ -47,6 +47,14 @@ UPLOAD_LOCATION=absolute_location_on_your_machine_where_you_want_to_store_the_ba | |||||||
| ################################################################################### | ################################################################################### | ||||||
| TYPESENSE_API_KEY=some-random-text | TYPESENSE_API_KEY=some-random-text | ||||||
| # TYPESENSE_ENABLED=false | # TYPESENSE_ENABLED=false | ||||||
|  | # TYPESENSE_URL uses base64 encoding for the nodes json. | ||||||
|  | # Example JSON that was used: | ||||||
|  | # [ | ||||||
|  | #      { 'host': 'typesense-1.example.net', 'port': '443', 'protocol': 'https' }, | ||||||
|  | #      { 'host': 'typesense-2.example.net', 'port': '443', 'protocol': 'https' }, | ||||||
|  | #      { 'host': 'typesense-3.example.net', 'port': '443', 'protocol': 'https' }, | ||||||
|  | #  ] | ||||||
|  | # TYPESENSE_URL=ha://WwogICAgeyAnaG9zdCc6ICd0eXBlc2Vuc2UtMS5leGFtcGxlLm5ldCcsICdwb3J0JzogJzQ0MycsICdwcm90b2NvbCc6ICdodHRwcycgfSwKICAgIHsgJ2hvc3QnOiAndHlwZXNlbnNlLTIuZXhhbXBsZS5uZXQnLCAncG9ydCc6ICc0NDMnLCAncHJvdG9jb2wnOiAnaHR0cHMnIH0sCiAgICB7ICdob3N0JzogJ3R5cGVzZW5zZS0zLmV4YW1wbGUubmV0JywgJ3BvcnQnOiAnNDQzJywgJ3Byb3RvY29sJzogJ2h0dHBzJyB9LApd | ||||||
|  |  | ||||||
| ################################################################################### | ################################################################################### | ||||||
| # Reverse Geocoding | # Reverse Geocoding | ||||||
|   | |||||||
| @@ -37,7 +37,26 @@ export const bullConfig: BullModuleOptions = { | |||||||
|  |  | ||||||
| export const bullQueues: BullModuleOptions[] = Object.values(QueueName).map((name) => ({ name })); | export const bullQueues: BullModuleOptions[] = Object.values(QueueName).map((name) => ({ name })); | ||||||
|  |  | ||||||
| export const typesenseConfig: ConfigurationOptions = { | function parseTypeSenseConfig(): ConfigurationOptions { | ||||||
|  |   const typesenseURL = process.env.TYPESENSE_URL; | ||||||
|  |   const common = { | ||||||
|  |     apiKey: process.env.TYPESENSE_API_KEY as string, | ||||||
|  |     numRetries: 15, | ||||||
|  |     retryIntervalSeconds: 4, | ||||||
|  |     connectionTimeoutSeconds: 10, | ||||||
|  |   }; | ||||||
|  |   if (typesenseURL && typesenseURL.startsWith('ha://')) { | ||||||
|  |     try { | ||||||
|  |       const decodedString = Buffer.from(typesenseURL.slice(5), 'base64').toString(); | ||||||
|  |       return { | ||||||
|  |         nodes: JSON.parse(decodedString), | ||||||
|  |         ...common, | ||||||
|  |       }; | ||||||
|  |     } catch (error) { | ||||||
|  |       throw new Error(`Failed to decode typesense options: ${error}`); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return { | ||||||
|     nodes: [ |     nodes: [ | ||||||
|       { |       { | ||||||
|         host: process.env.TYPESENSE_HOST || 'typesense', |         host: process.env.TYPESENSE_HOST || 'typesense', | ||||||
| @@ -45,8 +64,8 @@ export const typesenseConfig: ConfigurationOptions = { | |||||||
|         protocol: process.env.TYPESENSE_PROTOCOL || 'http', |         protocol: process.env.TYPESENSE_PROTOCOL || 'http', | ||||||
|       }, |       }, | ||||||
|     ], |     ], | ||||||
|   apiKey: process.env.TYPESENSE_API_KEY as string, |     ...common, | ||||||
|   numRetries: 15, |   }; | ||||||
|   retryIntervalSeconds: 4, | } | ||||||
|   connectionTimeoutSeconds: 10, |  | ||||||
| }; | export const typesenseConfig: ConfigurationOptions = parseTypeSenseConfig(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user