You can self-host Signal if you want. It's not easy, or fun, and you'll need to replace the dependencies on cloud tools if you want to host it on bare metal, but it can be done (I have done it).
Bear in mind, the server is open source only in name, the state of documentation and configurability is extremely hostile towards running it yourself, to the point that the only way to configure it to run correctly requires reading the code to find the type, size, syntax and everything else about every piece of configuration because none of it is documented or clear.
Sadly the answer is not the one I'd like to give. Were it in my hands, I'd have documented it publicly already, as an advocate of open source and sharing.
I did this as part of my day job, which included, at the time, documenting it. It's impossible for me to share that documentation I did on company time. As for doing it again, I'd have to check my contract and/or discuss it with said employer.
Bear in mind, the server is open source only in name, the state of documentation and configurability is extremely hostile towards running it yourself, to the point that the only way to configure it to run correctly requires reading the code to find the type, size, syntax and everything else about every piece of configuration because none of it is documented or clear.