# 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](https://github.com/brave/go-sync)

#### ✅ **Was Brave Sync aktuell synchronisiert (Stand 2025):**

<div class="_tableContainer_80l1q_1" id="bkmrk-kategorie-synchronis"><div class="_tableWrapper_80l1q_14 group flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1689" data-start="286"><thead data-end="390" data-start="286"><tr data-end="390" data-start="286"><th data-col-size="sm" data-end="311" data-start="286">Kategorie</th><th data-col-size="sm" data-end="329" data-start="311">Synchronisiert?</th><th data-col-size="md" data-end="390" data-start="329">Beschreibung</th></tr></thead><tbody data-end="1689" data-start="497"><tr data-end="604" data-start="497"><td data-col-size="sm" data-end="524" data-start="497">🔖 **Lesezeichen**</td><td data-col-size="sm" data-end="543" data-start="524">✅ Ja</td><td data-col-size="md" data-end="604" data-start="543">Alle Lesezeichen inkl. Ordnerstruktur</td></tr><tr data-end="714" data-start="605"><td data-col-size="sm" data-end="642" data-start="605">📂 **Lesezeichen-Favoritenleiste**</td><td data-col-size="sm" data-end="653" data-start="642">✅ Ja</td><td data-col-size="md" data-end="714" data-start="653">Auch diese wird übernommen</td></tr><tr data-end="823" data-start="715"><td data-col-size="sm" data-end="743" data-start="715">📄 **Chronik (Verlauf)**</td><td data-col-size="sm" data-end="762" data-start="743">✅ Ja</td><td data-col-size="md" data-end="823" data-start="762">Browser-Historie</td></tr><tr data-end="930" data-start="824"><td data-col-size="sm" data-end="858" data-start="824">🧠 **Formulardaten (Autofill)**</td><td data-col-size="sm" data-end="869" data-start="858">✅ Ja</td><td data-col-size="md" data-end="930" data-start="869">Namen, Adressen, Telefonnummern, etc.</td></tr><tr data-end="1039" data-start="931"><td data-col-size="sm" data-end="959" data-start="931">🔐 **Passwörter**</td><td data-col-size="sm" data-end="978" data-start="959">✅ Ja</td><td data-col-size="md" data-end="1039" data-start="978">Gespeicherte Anmeldedaten</td></tr><tr data-end="1148" data-start="1040"><td data-col-size="sm" data-end="1068" data-start="1040">🎨 **Designs/Themes**</td><td data-col-size="sm" data-end="1087" data-start="1068">✅ Ja</td><td data-col-size="md" data-end="1148" data-start="1087">Farbthema des Browsers</td></tr><tr data-end="1256" data-start="1149"><td data-col-size="sm" data-end="1180" data-start="1149">🧩 **Erweiterungen/Add-ons**</td><td data-col-size="sm" data-end="1195" data-start="1180">✅ Ja</td><td data-col-size="md" data-end="1256" data-start="1195">Installierte Chrome-Extensions</td></tr><tr data-end="1365" data-start="1257"><td data-col-size="sm" data-end="1285" data-start="1257">⚙️ **Einstellungen**</td><td data-col-size="sm" data-end="1304" data-start="1285">✅ Ja</td><td data-col-size="md" data-end="1365" data-start="1304">Viele (nicht alle) Einstellungen werden übernommen</td></tr><tr data-end="1474" data-start="1366"><td data-col-size="sm" data-end="1394" data-start="1366">📱 **Offene Tabs**</td><td data-col-size="sm" data-end="1413" data-start="1394">✅ Ja</td><td data-col-size="md" data-end="1474" data-start="1413">Geräteübergreifender Tab-Verlauf</td></tr><tr data-end="1580" data-start="1475"><td data-col-size="sm" data-end="1512" data-start="1475">🧭 **Suchmaschinen-Einstellungen**</td><td data-col-size="sm" data-end="1519" data-start="1512">✅ Ja</td><td data-col-size="md" data-end="1580" data-start="1519">Eigene oder angepasste Suchanbieter</td></tr><tr data-end="1689" data-start="1581"><td data-col-size="sm" data-end="1609" data-start="1581">🔒 **Zahlungsmethoden**</td><td data-col-size="sm" data-end="1628" data-start="1609">✅ Ja</td><td data-col-size="md" data-end="1689" data-start="1628">Kreditkartendaten etc. (wenn aktiviert)</td></tr></tbody></table>

</div></div>#### 💾 Und wie viel Speicherplatz verbraucht das?

<div class="_tableContainer_80l1q_1" id="bkmrk-datentyp-typische-gr"><div class="_tableWrapper_80l1q_14 group flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="756" data-start="445"><thead data-end="488" data-start="445"><tr data-end="488" data-start="445"><th data-col-size="sm" data-end="464" data-start="445">Datentyp</th><th data-col-size="sm" data-end="488" data-start="464">Typische Größe</th></tr></thead><tbody data-end="756" data-start="533"><tr data-end="576" data-start="533"><td data-col-size="sm" data-end="552" data-start="533">Lesezeichen</td><td data-col-size="sm" data-end="576" data-start="552">ein paar KB</td></tr><tr data-end="621" data-start="577"><td data-col-size="sm" data-end="596" data-start="577">Passwörter</td><td data-col-size="sm" data-end="621" data-start="596">10–100 KB</td></tr><tr data-end="666" data-start="622"><td data-col-size="sm" data-end="641" data-start="622">Formulardaten</td><td data-col-size="sm" data-end="666" data-start="641">50–200 KB</td></tr><tr data-end="711" data-start="667"><td data-col-size="sm" data-end="686" data-start="667">Verlauf</td><td data-col-size="sm" data-end="711" data-start="686">einige 100 KB</td></tr><tr data-end="756" data-start="712"><td data-col-size="sm" data-end="731" data-start="712">Alles zusammen</td><td data-col-size="sm" data-end="756" data-start="731">&lt; 2 MB pro Nutzer</td></tr></tbody></table>

</div></div>### 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
    volumes:
      - ./brave-sync-logs:/var/log

  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/v2 %U
```

#### Überprüfen der Sync URL:

In der Browser Leiste eingeben:

```
brave://sync-internals
```

Dort steht die URL und viele weitere Dinge zum Sync Status

[![image.png](https://wiki.hacker-net.de/uploads/images/gallery/2025-07/scaled-1680-/0pkdibreSl4UFd7m-image.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-07/0pkdibreSl4UFd7m-image.png)

#### Schritt-für-Schritt: Brave Flatpak &amp; Startparameter

<div id="bkmrk-hinweis%3A-dies-ist-ei" style="border: 1px solid #ffc107; background-color: #fff3cd; padding: 15px; margin-bottom: 20px;">**Hinweis:** Ich habs mit Flatpak nie zum laufen bekommen deshalb Install deb via Terminal [hier](https://wiki.hacker-net.de/books/brave-browser-ein-chromium-fork-mit-datenschutz/page/brave-browser-installieren "Brave Browser installieren")</div>##### 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/v2
```

##### 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.