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_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 | ||||
|   | ||||
| @@ -37,7 +37,26 @@ export const bullConfig: BullModuleOptions = { | ||||
|  | ||||
| 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: [ | ||||
|       { | ||||
|         host: process.env.TYPESENSE_HOST || 'typesense', | ||||
| @@ -45,8 +64,8 @@ export const typesenseConfig: ConfigurationOptions = { | ||||
|         protocol: process.env.TYPESENSE_PROTOCOL || 'http', | ||||
|       }, | ||||
|     ], | ||||
|   apiKey: process.env.TYPESENSE_API_KEY as string, | ||||
|   numRetries: 15, | ||||
|   retryIntervalSeconds: 4, | ||||
|   connectionTimeoutSeconds: 10, | ||||
| }; | ||||
|     ...common, | ||||
|   }; | ||||
| } | ||||
|  | ||||
| export const typesenseConfig: ConfigurationOptions = parseTypeSenseConfig(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user