Brave browser sync server

Ο διακομιστής Brave go-sync v2 στοχεύει να δημιουργήσει ένα συμβατό πρωτόκολο που κατανοεί τα συστατικά στοιχεία /sync/protocol/sync.proto που χρησιμοποιούνται από την επίσημη υπηρεσία συγχρονισμού στον chromium της Google.

Διαφορές από το chrome sync

  • Επιβολή κρυπτογράφησης από την πλευρά του πελάτη

  • Δεν απαιτεί σύνδεση για τη χρήση του συγχρονισμού (Χρησιμοποιεί το “Sync Chain” concept )

  • Open source αυτονομος διακομιστής συγχρονισμού που λειτουργεί με τον Brave, ώστε να μην αποστέλλονται δεδομένα στους διακομιστές της Google

Αυθεντικοποίηση

Μια “αλυσίδα συγχρονισμού” διαμορφώνεται χρησιμοποιώντας έναν τυχαίο seed 32 byte που δημιουργείται από τον αρχικό πελάτη. Στη συνέχεια, το seeda κωδικοποιείται χρησιμοποιώντας BIP39. Εάν κάποιος άλλος πελάτης θέλει να συμμετάσχει στην αλυσίδα συγχρονισμού, μπορεί να εισαγάγει τη φράση-κλειδί BIP39 από τον αρχικό πελάτη εισάγοντας τις λέξεις με μη αυτόματο τρόπο ή σαρώνοντας έναν κωδικό QR.

  • Το source code ειναι διαθέσιμο στο GitHub

Dynamo.Dockerfile

ARG DB_LOCATION=/home/dynamodblocal/db

FROM  amazon/dynamodb-local:1.12.0 AS install

USER root

RUN yum -y install awscli

USER dynamodblocal

ENV AWS_ACCESS_KEY_ID=#

ENV AWS_SECRET_ACCESS_KEY=#

ARG AWS_ENDPOINT=http://localhost:8000

ARG AWS_REGION=us-west-2

ARG DB_LOCATION

ARG TABLE_NAME=client-entity-dev

COPY schema/dynamodb/ .

RUN mkdir -p ${DB_LOCATION} && \

      java -jar DynamoDBLocal.jar -sharedDb -dbPath ${DB_LOCATION} & \

      DYNAMO_PID=$! && \

      aws dynamodb create-table --cli-input-json file://table.json \

      --endpoint-url ${AWS_ENDPOINT} --region ${AWS_REGION} && \

      kill $DYNAMO_PID

FROM amazon/dynamodb-local:1.12.0

ARG DB_LOCATION

COPY --chown=dynamodblocal:dynamodblocal --from=install ${DB_LOCATION} /db

CMD ["-jar", "DynamoDBLocal.jar", "-sharedDb", "-dbPath", "/db"]

Dockerfile

FROM bitnami/golang:1.18 as builder

ARG VERSION

ARG BUILD_TIME

ARG COMMIT

WORKDIR /src

COPY go.mod go.sum ./

RUN go mod download

COPY . .

RUN CGO_ENABLED=0 GOOS=linux go build \

    -ldflags "-X github.com/brave/go-sync/server.version=${VERSION} -X github.com/brave/go-sync/server.buildTime=${BUILD_TIME} -X github.com/brave/go-sync/server.commit=${COMMIT}" \

    -o main .

FROM alpine:3.6 as artifact

RUN apk add --update ca-certificates # Certificates for SSL

COPY --from=builder /src/main main

EXPOSE 8295

CMD ["./main"]

docker-compose.yml

---
networks:

  sync:

    driver: bridge

services:

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

      - AWS_SECRET_ACCESS_KEY=#

      - 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"

    networks:

      - sync

  redis:

    image: public.ecr.aws/ubuntu/redis:latest

    ports:

      - "6379:6379"

    environment:

      - ALLOW_EMPTY_PASSWORD=yes

    networks:

      - sync   

Tips and Tricks

Dynamodb image για ARM

  • Το dynamo.Dockerfile χρησιμοποιεί το image amazon/dynamodb-local:1.12.0 για την dynamo db. Αν και κανει build μια χαρά για επεξεργαστές x86, και υπάρχει image για επεξεργαστες ARM64 το συγκεκριμένο version κανει “exit” σε ARM (δοκιμασμένο σε raspberry pi 400) .
    To docker image amazon/dynamodb-local:1.13.5@sha256:d39583bcf1a5aab6e9276e15ff681c83f2dac055e1d6604bc0dcd0092c305911 κανει build και τρέχει μια χαρά στο ARM.
    Πιο πρόσφατες εικόνες μπορεί επίσης να λειτουργήσουν.

Πώς να επιλέξετε τον αυτοφιλοξενούμενο διακομιστή συγχρονισμού

  • Ακολουθήστε το “Run Chromium with command-line switches” στο wiki του chromium

Στο android Ενεργοποιήστε τη “command line on non-rooted devices” στο brave://flags και, στη συνέχεια, δημιουργήστε το αρχείο /data/local/tmp/chrome-command-line μέσω του adb.

adb shell

echo "_ --sync-url=192.168.1.24:8295/v2" > /data/local/tmp/chrome-command-line

Λάβετε υπόψη ότι το πρώτο στοιχείο της γραμμής εντολών θα πρέπει να είναι ένα “_” (underscore) ακολουθούμενο από τα switches που χρειάζεστε. Το “/v2” θα πρέπει να ακολουθεί τη διαδρομή URL σας.

  • Τέλος, επανεκκινήστε χειροκίνητα το Brave

Επαληθεύστε την κατάσταση συγχρονισμού

  • Επισκεφτείτε το brave://sync-internals

Προειδοποιητικό μήνυμα

  • Το Brave εμφανίζει ένα προειδοποιητικό μήνυμα σε κάθε νέα καρτέλα για μερικά δευτερόλεπτα αφού ενεργοποιησουμε τα commands line switches που λέει ότι δεν υποστηρίζεται.
    Μπορείτε να το αγνοήσετε.
    Δεν βρήκα τρόπο να το απενεργοποιήσω.

docker compose services

  • Έχω αφαιρέσει το Dev service και κράτησα μονο τα web,dynamo,redis

Πως να δημιουργήσετε τα docker images

git clone https://github.com/brave/go-sync.git

cd go-sync

Κάνουμε αν θέλουμε τις ανωτέρω αλλαγές στα Dockerfile,dynamo.Dockerfile,docker-compose

docker compose up -d

O server τρέχει στην localhost:8295/v2

4 «Μου αρέσει»