Używałem NextCloud i dawał radę na tyle, na ile NextCloud może dawać radę (ogólnie nie jestem jego fanem, bo mam wrażenie że to straszna kobyła i próbuje mieć wszystko co tylko się da, jednocześnie każdą funkcjonalność mając jako-tako po łebkach, ale no kalendarz nie był gorszy od reszty).
https://github.com/awesome-selfhosted/awesome-selfhosted?tab=readme-ov-file#calendar--contacts - tutaj jest kilka ciekawych sugestii, ale żadnej nie testowałem.