Brave Sync Server
Beschreibung:
Mann kann den Brave Sync Server.
Auch selbst betreiben, gibt ein Projekt auf Github im docker-container dafür.
https://github.com/brave/go-sync
✅ Was Brave Sync aktuell synchronisiert (Stand 2025):
| Kategorie | Synchronisiert? | Beschreibung |
|---|---|---|
| 🔖 Lesezeichen | ✅ Ja | Alle Lesezeichen inkl. Ordnerstruktur |
| 📂 Lesezeichen-Favoritenleiste | ✅ Ja | Auch diese wird übernommen |
| 📄 Chronik (Verlauf) | ✅ Ja | Browser-Historie |
| 🧠 Formulardaten (Autofill) | ✅ Ja | Namen, Adressen, Telefonnummern, etc. |
| 🔐 Passwörter | ✅ Ja | Gespeicherte Anmeldedaten |
| 🎨 Designs/Themes | ✅ Ja | Farbthema des Browsers |
| 🧩 Erweiterungen/Add-ons | ✅ Ja | Installierte Chrome-Extensions |
| ⚙️ Einstellungen | ✅ Ja | Viele (nicht alle) Einstellungen werden übernommen |
| 📱 Offene Tabs | ✅ Ja | Geräteübergreifender Tab-Verlauf |
| 🧭 Suchmaschinen-Einstellungen | ✅ Ja | Eigene oder angepasste Suchanbieter |
| 🔒 Zahlungsmethoden | ✅ Ja | Kreditkartendaten etc. (wenn aktiviert) |
💾 Und wie viel Speicherplatz verbraucht das?
| Datentyp | Typische Größe |
|---|---|
| Lesezeichen | ein paar KB |
| Passwörter | 10–100 KB |
| Formulardaten | 50–200 KB |
| Verlauf | einige 100 KB |
| Alles zusammen | < 2 MB pro Nutzer |
Vorrausetzung:
Public IP
Installation:
apt install docker.io docker-compose curl
Verzeichnis erstellen
mkdir /root/bravesync
Nun in das Verzeichnis gehen und Repo clonen
cd /root/bravesync/
git clone https://github.com/brave/go-sync
nun die .env Datei erstellen
nano /root/bravesync/go-sync/.env
Inhalt
PUBLIC_URL ="http://localhost:5000"
# ändere auf https://sync.example.com bei Proxy: "http://localhost:5000" # ändere auf https://sync.example.com bei Proxy
Nun die Docker-compose Dateiersetzen
rm /root/bravesync/go-sync/docker-compose.yml
nano /root/bravesync/go-sync/docker-compose.yml
Inhalt
networks:
sync:
driver: bridge
services:
dev:
build:
context: .
target: builder
args:
VERSION: "${VERSION}"
COMMIT: "${COMMIT}"
BUILD_TIME: "${BUILD_TIME}"
depends_on:
- dynamo-local
- redis
networks:
- sync
environment:
- PPROF_ENABLED=true
- SENTRY_DSN
- ENV=local
- DEBUG=1
- AWS_ACCESS_KEY_ID=GOSYNC
- AWS_SECRET_ACCESS_KEY=GOSYNC
- AWS_REGION=us-west-2
- AWS_ENDPOINT=http://dynamo-local:8000
- REDIS_URL=redis:6379
web:
build:
context: .
target: artifact
args:
VERSION: "${VERSION}"
COMMIT: "${COMMIT}"
BUILD_TIME: "${BUILD_TIME}"
ports:
- "8295:8295"
depends_on:
- dynamo-local
- redis
networks:
- sync
environment:
- PPROF_ENABLED=true
- SENTRY_DSN
- ENV=local
- DEBUG=1
- AWS_ACCESS_KEY_ID=GOSYNC
- AWS_SECRET_ACCESS_KEY=GOSYNC
- AWS_REGION=us-west-2
- AWS_ENDPOINT=http://dynamo-local:8000
- TABLE_NAME=client-entity-dev
- REDIS_URL=redis:6379
dynamo-local:
build:
context: .
dockerfile: dynamo.Dockerfile
ports:
- "8000:8000"
volumes:
- ./data/dynamodb:/home/dynamodblocal/data
networks:
- sync
redis:
image: public.ecr.aws/docker/library/redis:6.2
ports:
- "6379:6379"
environment:
- ALLOW_EMPTY_PASSWORD=yes
volumes:
- ./data/redis:/data
networks:
- sync
caddy:
image: caddy:latest
restart: always
ports:
- "80:80"
- "443:443"
command: caddy reverse-proxy --from ${PUBLIC_URL} --to web:8295
volumes:
- ./data/caddy/data:/data
- ./data/caddy/config:/config
networks:
- sync
Die Makefile anpassen
nano /root/bravesync/go-sync/Makefile
Inhalt
...
docker:
COMMIT=$(GIT_COMMIT) VERSION=$(GIT_VERSION) BUILD_TIME=$(BUILD_TIME) docker compose build
docker-up:
COMMIT=$(GIT_COMMIT) VERSION=$(GIT_VERSION) BUILD_TIME=$(BUILD_TIME) docker compose up
docker-test:
COMMIT=$(GIT_COMMIT) VERSION=$(GIT_VERSION) BUILD_TIME=$(BUILD_TIME) docker compose -f docker-compose.yml run --rm dev ma>
...
alle docker compose in docker-compose abändern
...
docker:
COMMIT=$(GIT_COMMIT) VERSION=$(GIT_VERSION) BUILD_TIME=$(BUILD_TIME) docker-compose build
docker-up:
COMMIT=$(GIT_COMMIT) VERSION=$(GIT_VERSION) BUILD_TIME=$(BUILD_TIME) docker-compose up
docker-test:
COMMIT=$(GIT_COMMIT) VERSION=$(GIT_VERSION) BUILD_TIME=$(BUILD_TIME) docker-compose -f docker-compose.yml run --rm dev ma>
...
Nun die container starten
docker-compose up -d
Nun noch die ufw Firewall regeln anpassen.
Da hier der Docker container sowieso von außen erreichbar sein soll, brauchen wir hier keine Anspassung für docker.
Aber ssh soll nur auf der lokalen Netzwerkkarte zur Verfügung stehen
ufw installieren
apt install ufw
Nun die Regeln setzten
ufw allow in on enp6s18 to any port 22
ufw enable
Brave konfigurieren:
🧪 Browser starten mit eigenem Sync-Server
Auf dem Gerät, das Brave nutzt, musst du Brave mit dem Custom-Sync-Server starten:
Du musst Brave mit dem Startparameter ausführen:
brave --sync-url=https://dein.sync.server
Unter Windows z. B. in der Verknüpfung hinter "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe"
🛠️ Dauerhaft unter Linux:
Bearbeite z. B. den Desktop-Starter:
nano ~/.local/share/applications/brave-browser.desktop
Finde die Zeile:
Exec=/usr/bin/brave-browser-stable %U
Und ergänze:
Exec=/usr/bin/brave-browser-stable --sync-url=https://dein.sync.server %U
Schritt-für-Schritt: Brave Flatpak & Startparameter
1. Standard-Flatpak-Pfad prüfen
Der Brave-Flatpak wird in der Regel als:
org.brave.Browser
ausgeführt. Um zu prüfen, ob das bei dir stimmt:
flatpak list | grep Brave
2. .desktop-Datei anpassen (nur für dich)
Die Desktop-Startverknüpfung liegt für Benutzerinstallationen meistens hier:
~/.local/share/flatpak/exports/share/applications/org.brave.Browser.desktop
Wenn sie dort nicht liegt, dann:
find ~/.local/share -name "org.brave.Browser.desktop"
3. Datei editieren
Öffne sie z. B. mit Nano oder einem Editor:
nano ~/.local/share/flatpak/exports/share/applications/org.brave.Browser.desktop
Suche die Zeile:
Exec=flatpak run org.brave.Browser
Und ergänze sie:
Exec=flatpak run org.brave.Browser --sync-url=https://dein.sync.server
4. Desktop neu einlesen (optional)
Manchmal musst du die Desktop-Datenbank neu laden:
update-desktop-database ~/.local/share/applications/
Oder einfach ab- und wieder anmelden.
Dashboard
Im go-sync Verzeichnis solch eine Struktur erstellen
dashboard/
│ ├── server.js
│ └── public/
│ └── index.html
mkdir -p /root/bravesync/go-sync/dashboard/public
Die docker-compose Datei ums Dashboard erweitern
nano /root/bravesync/go-sync/docker-compose.yml
Inhat / ergänzung
...
dashboard:
build: ./dashboard
container_name: brave-dashboard
volumes:
- ./brave-sync-dashboard-logs:/var/log
ports:
- "3000:3000"
networks:
- sync
restart: unless-stopped
Die Dockerfile erstellen
nano /root/bravesync/go-sync/dashboard/Dockerfile
Inhalt
FROM node:20
WORKDIR /app
COPY server.js .
COPY public ./public
RUN npm install express tail
EXPOSE 3000
CMD ["node", "server.js"]
Die Server.js
nano /root/bravesync/go-sync/dashboard/server.js
Inhalt
const express = require('express');
const Tail = require('tail').Tail;
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
const LOG_FILE = '/var/log/brave-sync.log';
app.use(express.static('public'));
io.on('connection', (socket) => {
const tail = new Tail(LOG_FILE);
tail.on('line', (line) => {
socket.emit('log', line);
});
tail.on('error', (err) => {
console.error("Tail error:", err);
});
socket.on('disconnect', () => {
tail.unwatch();
});
});
http.listen(3000, () => {
console.log('Dashboard läuft auf http://localhost:3000');
});
Die Public index html
nano /root/bravesync/go-sync/dashboard/public/index.html
Inhalt
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Brave Sync Dashboard</title>
<style>
body { font-family: sans-serif; background: #111; color: #0f0; padding: 1em; }
pre { white-space: pre-wrap; word-wrap: break-word; }
</style>
</head>
<body>
<h1>📡 Brave Sync Live Logs</h1>
<pre id="log"></pre>
<script src="https://cdn.socket.io/4.7.2/socket.io.min.js"></script>
<script>
const socket = io();
const logElem = document.getElementById("log");
socket.on("log", line => {
logElem.textContent += line + "\n";
logElem.scrollTop = logElem.scrollHeight;
});
</script>
</body>
</html>