From 70657e165013c665d709b19abd7122d345d31016 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Fri, 16 Feb 2024 01:57:00 +0100 Subject: [PATCH] [backend/configuration] Allow connecting to redis unix sockets, document connecting to postgres unix sockets (ISH-76) --- Iceshrimp.Backend/Core/Configuration/Config.cs | 3 ++- .../Core/Extensions/ServiceExtensions.cs | 11 ++++++++--- Iceshrimp.Backend/configuration.ini | 4 ++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Iceshrimp.Backend/Core/Configuration/Config.cs b/Iceshrimp.Backend/Core/Configuration/Config.cs index 485207c1..1ed596e6 100644 --- a/Iceshrimp.Backend/Core/Configuration/Config.cs +++ b/Iceshrimp.Backend/Core/Configuration/Config.cs @@ -33,7 +33,7 @@ public sealed class Config { public int ListenPort { get; init; } = 3000; public string ListenHost { get; init; } = "localhost"; - public string? ListenSocket { get; init; } = null; + public string? ListenSocket { get; init; } public string WebDomain { get; init; } = null!; public string AccountDomain { get; init; } = null!; public int CharacterLimit { get; init; } = 8192; @@ -59,6 +59,7 @@ public sealed class Config { public sealed class RedisSection { public string Host { get; init; } = "localhost"; public int Port { get; init; } = 6379; + public string? UnixDomainSocket { get; init; } public string? Prefix { get; init; } public string? Username { get; init; } public string? Password { get; init; } diff --git a/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs b/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs index b2496d34..463e0e23 100644 --- a/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs +++ b/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs @@ -1,3 +1,4 @@ +using System.Net.Sockets; using System.Threading.RateLimiting; using Iceshrimp.Backend.Controllers.Mastodon.Renderers; using Iceshrimp.Backend.Controllers.Schemas; @@ -96,16 +97,20 @@ public static class ServiceExtensions { var redis = configuration.GetSection("Redis").Get(); if (redis == null || instance == null) throw new Exception("Failed to initialize redis: Failed to load configuration"); + var redisOptions = new ConfigurationOptions { User = redis.Username, Password = redis.Password, DefaultDatabase = redis.Database, - EndPoints = new EndPointCollection { - { redis.Host, redis.Port } - } + EndPoints = new EndPointCollection() }; + if (redis.UnixDomainSocket != null) + redisOptions.EndPoints.Add(new UnixDomainSocketEndPoint(redis.UnixDomainSocket)); + else + redisOptions.EndPoints.Add(redis.Host, redis.Port); + services.AddSingleton(_ => ConnectionMultiplexer.Connect(redisOptions)); services.AddStackExchangeRedisCache(options => { diff --git a/Iceshrimp.Backend/configuration.ini b/Iceshrimp.Backend/configuration.ini index bdaacff1..71b8177d 100644 --- a/Iceshrimp.Backend/configuration.ini +++ b/Iceshrimp.Backend/configuration.ini @@ -39,6 +39,7 @@ ExposeFederationList = Registered ExposeBlockReasons = Registered [Database] +;; Hostname, IP address or path to unix socket directory (specifying port is required even for unix sockets) Host = localhost Port = 5432 Database = iceshrimp @@ -53,6 +54,9 @@ Port = 6379 ;;Password = ;;Database = 0 +;; If you prefer connecting to your redis instance via a unix socket, uncomment the line below & specify the socket path +;;UnixDomainSocket = + [Storage] ;; Where to store media attachments ;; Options: [Local, ObjectStorage]