Der Messenger Signal kann auch auf Android-Geräten ohne Google Play Services verwendet werden, dabei zieht die App aber ganz massiv am Akku. Das Problem ist beim Hersteller seit Jahren bekannt, es scheint aber leider keine Motivation zu geben, es zu beheben.
In diese Bresche springt seit einiger Zeit Molly, ein inoffizieller Fork von Signal, welcher eine Version anbietet, die UnifiedPush implementiert.
Zur Nutzung ist ein weiter Dienst namens MollySocket nötig, dessen Installation ich hier beschreibe.
Docker Setup
Das Setup via Docker ist recht einfach, Voraussetzung ist ein Linux-System (in meinem Fall ist das Debian 12) mit Docker. Auf die Installation von Docker selbst gehe ich hier nicht ein.
Folgende beiden Dateien auf dem System ablegen:
nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
listen [::]:80;
server_name molly.inittab.de;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name molly.inittab.de;
ssl_certificate /etc/letsencrypt/live/molly.inittab.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/molly.inittab.de/privkey.pem;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://mollysocket:8020;
}
}
}
Quelle: Codeberg
docker-compose.yml
services:
certbot:
restart: "no"
image: certbot/certbot:v3.0.1
command: certonly --standalone --noninteractive --email norbert@tretkowski.de --agree-tos --domains molly.inittab.de
volumes:
- $PWD/certs:/etc/letsencrypt
ports:
- "80:80"
- "443:443"
networks:
- external
- internal
nginx:
image: nginx:1.27.3-alpine-slim
restart: unless-stopped
depends_on:
- mollysocket
volumes:
- $PWD/certs:/etc/letsencrypt:ro
- $PWD/nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- "80:80"
- "443:443"
networks:
- external
- internal
mollysocket:
image: ghcr.io/mollyim/mollysocket:1.5.4-alpine
container_name: mollysocket
restart: always
volumes:
- ./data:/data
working_dir: /data
command: server
environment:
- MOLLY_DB="/data/mollysocket.db"
- MOLLY_ALLOWED_ENDPOINTS=["https://up.conversations.im/","https://ntfy.sh/"]
#- MOLLY_ALLOWED_UUIDS=["7d6ffb3e-6a0d-4335-8e6e-7acee0d20d34"]
#- MOLLY_VAPID_PRIVKEY="paste output of `docker compose mollysocket vapid gen` here"
- MOLLY_HOST=0.0.0.0
- MOLLY_PORT=8020
- RUST_LOG=info
ports:
- "127.0.0.1:8020:8020"
networks:
- external
- internal
networks:
external:
internal:
internal: true
Quelle: Codeberg
In der Datei nginx.conf
noch den Hostnamen und in der Datei docker-compose.yml
den Hostnamen und die E-Mail-Adresse anpassen und dann den certbot
Container starten:
# docker compose up certbot -d
[+] Running 1/1
✔ Container root-certbot-1 Started 0.3s
Der Container beendet sich nach erfolgreich erstelltem SSL Zertifikat direkt wieder und es können dann die beiden für MollySocket nötigen Container mollysocket
und nginx
gestartet werden:
# docker compose up nginx mollysocket -d
[+] Running 2/2
✔ Container mollysocket Started 0.3s
✔ Container root-nginx-1 Started 0.6s
Für die Aktualisierung der SSL Zertifikate sollte der Let’s Encrypt Container regelmäßig gestartet werden, da die Zertifikate nur drei Monate gültig sind.
Molly für UnifiedPush
In F-Droid muss dann das Molly F-Droid Repo eingebunden und daraufhin die Molly (UnifiedPush) App installiert werden.
Neben Molly ist auch noch ntfy oder Conversations nötig, beide können ebenfalls über den F-Droid Store installiert werden. Für Conversations muss auch noch ein XMPP Account vorhanden sein, daher konzentrieren wir uns hier auf die Nutzung von ntfy. Diese App muss nach der Installation einmalig gestartet werden.
Nach der initialen Einrichtung von Molly muss noch in den Einstellungen unter Benachrichtigungen beim Punkt “Push Strategy” von “WebSocket” auf UnifiedPush umgestellt und die Server URL eingetragen werden:
Im Logfile des MollySocket Containers taucht dann die neue Verbindung auf:
# docker logs mollysocket -f
[...]
[2024-05-25T10:32:17Z INFO rocket::server] POST / application/json:
[2024-05-25T10:32:17Z INFO rocket::server::_] Matched: (register) POST / application/json
[2024-05-25T10:32:17Z INFO rocket::server::_] Outcome: Success(200 OK)
[2024-05-25T10:32:17Z INFO mollysocket::server::connections] Starting connection for 7d6ffb3e-6a0d-4335-8e6e-7acee0d20d34
[2024-05-25T10:32:17Z INFO rocket::server::_] Response succeeded.
[2024-05-25T10:32:18Z INFO mollysocket::ws::websocket_connection] WebSocket handshake has been successfully completed
Wenn der MollySocket Server nur für die eigenen Molly Installationen genutzt werden soll, können die erlaubten UUIDs in der docker-compose.yml
unter services.mollysocket.environment
noch explizit aufgeführt werden:
services:
mollysocket:
environment:
- MOLLY_ALLOWED_UUIDS=["7d6ffb3e-6a0d-4335-8e6e-7acee0d20d34"]
Für ntfy muss dann noch die Batterieoptimierung deaktiviert werden, die App weist beim nächsten Start darauf hin und listet auch die UnifiedPush Verbindung für Molly:
Zum Testen der Verbindung kann nach der Einrichtung ein ping
abgesetzt werden:
# docker exec mollysocket mollysocket connection ping 7d6ffb3e-6a0d-4335-8e6e-7acee0d20d34
[2024-05-25T10:57:54Z INFO mollysocket::config] No config file supplied
Dies sollte auf dem Smartphone zu einer Benachrichtigung führen:
Und weil Molly die Möglichkeit zur Spende an Signal aus der App entfernt hat sei noch der Hinweis erlaubt, dass man Signal auch über deren Webseite Spenden zukommen lassen kann…