Initial commit

This commit is contained in:
Norbert Tretkowski 2025-05-15 07:15:57 +02:00
commit ee1d292475
Signed by: norbert
GPG key ID: EAA31A3693AAB231
159 changed files with 4867 additions and 0 deletions

View file

@ -0,0 +1,182 @@
---
author: "Norbert Tretkowski"
title: "MollySocket Installation"
date: "2024-03-15"
tags: ['Android', 'Conversations', 'Docker', 'Messenger', 'Molly', 'MollySocket', 'Ntfy', 'Signal', 'UnifiedPush', 'XMPP']
cover: "/uploads/2024/mollysocket.jpg"
---
Der Messenger [Signal](https://signal.org/) 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](https://github.com/signalapp/Signal-Android/issues/9729), es scheint aber leider keine Motivation zu geben, es zu beheben.
In diese Bresche springt seit einiger Zeit [Molly](https://molly.im), ein inoffizieller Fork von Signal, welcher eine Version anbietet, die [UnifiedPush](https://unifiedpush.org/) implementiert.
Zur Nutzung ist ein weiter Dienst namens [MollySocket](https://github.com/mollyim/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](https://docs.docker.com/engine/install/debian/) selbst gehe ich hier nicht ein.
Folgende beiden Dateien auf dem System ablegen:
### nginx.conf
```nginx
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](https://codeberg.org/tretkowski/mollysocket/raw/branch/main/nginx.conf)
### docker-compose.yml
```Dockerfile
services:
certbot:
restart: "no"
image: certbot/certbot:v3.2.0
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.4-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.6.0-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 run 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](https://codeberg.org/tretkowski/mollysocket/raw/branch/main/docker-compose.yml)
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:
```bash
# 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:
```bash
# 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](https://molly.im/fdroid/foss/repo/) eingebunden und daraufhin die Molly (UnifiedPush) App installiert werden.
![Molly F-Droid Repo](/uploads/2024/molly1.png "Molly F-Droid Repo")
Neben Molly ist auch noch [ntfy](https://ntfy.sh/) oder [Conversations](https://conversations.im/) 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:
![Molly UnifiedPush Einstellungen](/uploads/2024/molly3.png "Molly UnifiedPush Einstellungen")
Im Logfile des MollySocket Containers taucht dann die neue Verbindung auf:
```bash
# 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:
```Dockerfile
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:
![Batterieoptimierung](/uploads/2024/molly4.png "Batterieoptimierung Ntfy")
Zum Testen der Verbindung kann nach der Einrichtung ein `ping` abgesetzt werden:
```bash
# 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:
![Molly Test Notification](/uploads/2024/molly5.png "Molly Test Notification")
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](https://signal.org/de/donate/) zukommen lassen kann...