iOS app is in testing phase. Please help by testing via TestFlight 🙏🏻 Join the beta here

Voordat je begint

Wat je nodig hebt.

  • Een kleine machine

    Een Raspberry Pi, een NAS, een Proxmox-container of een kleine VPS is ruim genoeg voor een gezin of team. De image draait op amd64 en arm64.

  • Docker

    Docker met de Compose-plugin. Eén los programma met systemd kan ook.

  • Een domeinnaam

    Iets als kluis.voorbeeld.nl, zodat je apps de server via HTTPS kunnen bereiken.

  • Een kwartiertje

    Het grootste deel is wachten tot Docker de image heeft gedownload.

Voor wie het technisch wil weten

De server ziet nooit je hoofdwachtwoord, je geheime sleutel of de inhoud van je kluis in leesbare vorm. Behandel hem toch zoals elke dienst op internet: houd hem bijgewerkt, maak back-ups en gebruik HTTPS.

Aanbevolen

Docker Compose met Caddy en automatische HTTPS.

Caddy staat vóór de 2Secret-server en regelt automatisch een gratis HTTPS-certificaat voor je domein. In de map deploy van de repository staan kant-en-klare voorbeeldbestanden.

  1. Laat je domein naar de machine wijzen

    Maak een DNS-record (A of AAAA) voor je domein dat naar het publieke IP-adres van de machine wijst, en zorg dat poort 80 en 443 de machine bereiken.

  2. Haal de voorbeeldbestanden op

    bash
    git clone --depth 1 https://github.com/joostiphone/2Secret.git
    cd 2Secret/deploy
  3. Vul je domein en uitnodigingscode in

    Open het bestand Caddyfile en vervang vault.example.com door je eigen domein. Vervang in docker-compose.yml de voorbeeldwaarde van TWOSECRET_INVITE_CODES door een eigen, lange uitnodigingscode: aanmelden kan vanaf het begin alleen op uitnodiging. De andere instellingen staan in het overzicht van instellingen.

  4. Start de server

    bash
    docker compose up -d
    docker compose logs -f

    Zodra de logs laten zien dat Caddy een certificaat heeft, open je je domein in een browser: je ziet dan de webkluis van 2Secret.

  5. Maak je account aan

    Maak je account aan in de app of de webkluis, met je serveradres en de uitnodigingscode. Geef de code alleen aan mensen die je op je server wilt hebben; heeft iedereen een account, dan kun je de aanmeldingen sluiten.

Alleen Docker

Heb je al een reverse proxy?

Draai de container los en laat je bestaande proxy (nginx, Traefik, Nginx Proxy Manager, …) ernaar wijzen. Zet er altijd HTTPS voor.

Haal de image op

bash
docker pull ghcr.io/joostiphone/2secret:latest

Start hem met een blijvend datavolume

bash
docker run -d --name 2secret --restart unless-stopped \
  -p 127.0.0.1:8743:8743 \
  -v 2secret-data:/data \
  -e TWOSECRET_SIGNUPS=invite \
  -e TWOSECRET_INVITE_CODES=choose-a-long-secret-code \
  ghcr.io/joostiphone/2secret:latest

De poort luistert alleen op localhost; je proxy stuurt HTTPS-verkeer door. Zonder TWOSECRET_SIGNUPS kan iedereen die de server bereikt een account aanmaken.

Andere manieren

Kies de opzet die bij je hardware past.

  1. Programma met systemd

    Elke release bevat 2secret-server voor Linux (x86_64-unknown-linux-gnu), en de webkluis als apart archief. Download ze via de downloadpagina, controleer de SHA-256-controlesommen en draai de server als gebruiker zonder extra rechten onder systemd. In de map deploy van de repository staat een kant-en-klaar unit-bestand, 2secret-server.service; de technische documentatie loopt het met je door.

  2. Proxmox LXC

    Maak een kleine unprivileged Debian-container aan en zet nesting en keyctl aan, die Docker nodig heeft. Installeer daarin Docker en volg de stappen voor Docker Compose.

    bash
    pct set <ID> --features nesting=1,keyctl=1
  3. Raspberry Pi

    De image is ook voor arm64 gebouwd. Gebruik een 64-bits Raspberry Pi OS (bijvoorbeeld op een Pi 4 of 5), installeer Docker en volg de stappen voor Docker Compose.

    bash
    curl -fsSL https://get.docker.com | sh

    Zet het datavolume liever op een SSD dan op een SD-kaart, en maak er back-ups van.

  4. Synology- of QNAP-NAS

    Installeer Container Manager (Synology) of Container Station (QNAP). Maak een project van het voorbeeldbestand docker-compose.yml, maar laat de dienst caddy weg en publiceer in plaats daarvan poort 8743 van de dienst 2secret. Koppel het datavolume aan een gedeelde map die in je NAS-back-ups zit, en gebruik de reverse proxy van de NAS of een Cloudflare Tunnel voor HTTPS.

  5. Achter een Cloudflare Tunnel

    Geen open poorten op je router: cloudflared maakt een uitgaande verbinding met Cloudflare, en Cloudflare levert je domein via HTTPS.

    1. Maak in Cloudflare Zero Trust een tunnel aan en installeer cloudflared op de machine met de opdracht die je te zien krijgt.
    2. Voeg een publieke hostnaam toe (bijvoorbeeld kluis.voorbeeld.nl) met als service http://localhost:8743.
    3. Caddy is niet nodig: Cloudflare regelt HTTPS. Start de container zoals bij Alleen Docker.

    De apps versleutelen je kluizen nog steeds end-to-end. Cloudflare ontsleutelt wel de HTTPS-verbinding en kan dus e-mailadressen, inlogverzoeken en andere metadata zien, maar nooit de inhoud van je kluizen.

Aanmelden op uitnodiging

Jouw server, jouw gastenlijst.

Met TWOSECRET_SIGNUPS=invite kunnen nieuwe mensen alleen een account aanmaken met een van de codes uit TWOSECRET_INVITE_CODES (gescheiden door komma’s). Geef een code dus alleen aan je gezin of je team. Heeft iedereen een account, zet dan TWOSECRET_SIGNUPS=closed. De standaardwaarde is open, dus stel altijd een van de twee in. Alle instellingen staan in het overzicht van instellingen.

Instellingen

Elke instelling, uitgelegd.

De server stel je in met omgevingsvariabelen of opdrachtregelopties, zoals TWOSECRET_BIND, TWOSECRET_DATA_DIR, TWOSECRET_WEB_DIR, TWOSECRET_SIGNUPS, TWOSECRET_INVITE_CODES, TWOSECRET_SESSION_DAYS en TWOSECRET_CORS_ORIGINS. De technische documentatie heeft de volledige, actuele tabel met standaardwaarden.

Onderhoud

Back-ups, updates en gezondheid.

  1. Maak back-ups van het datavolume

    Alles wat de server bewaart, staat in zijn datavolume, in de SQLite-database 2secret.db. De kluizen daarin zijn versleuteld, maar een back-up beschermt je toch tegen een kapotte schijf. Stop de server terwijl je hem kopieert:

    bash
    docker compose stop 2secret
    docker run --rm -v deploy_2secret-data:/data:ro -v "$PWD":/backup debian:trixie-slim \
      tar czf /backup/2secret-backup-$(date +%F).tar.gz -C /data .
    docker compose start 2secret

    deploy_2secret-data is het volume dat Compose in de map deploy aanmaakt; docker volume ls toont de precieze naam. Behandel back-ups als gevoelig en bewaar minstens één kopie op een andere machine. Je apparaten hebben bovendien een volledige versleutelde kopie van de kluizen die ze gebruiken.

  2. Bijwerken

    Lees eerst de wijzigingen, maak een back-up, en dan:

    bash
    docker compose pull
    docker compose up -d

    Databasemigraties draaien automatisch.

  3. Controleer of alles goed gaat

    bash
    docker compose ps
    docker compose logs --tail=50
    curl https://kluis.voorbeeld.nl/api/v1/health

    Het health-check-adres /api/v1/health antwoordt met {"status":"ok","version":"…","signups_open":…}, handig voor monitoringtools.

Verbinden

Verbind je apps, extensie en CLI.

  1. Apps

    Vul bij het aanmaken van een account (met Synchroniseren met een 2Secret-server aan) of bij het inloggen het adres van je server in, bijvoorbeeld https://kluis.voorbeeld.nl. Een lokale kluis koppel je later via Instellingen → Verbinden met server.

  2. Browserextensie

    Log in op de extensie met hetzelfde serveradres, e-mailadres, hoofdwachtwoord en dezelfde geheime sleutel.

  3. CLI

    Log één keer in met 2secret account signin --server https://kluis.voorbeeld.nl --email [email protected]; zie de handleiding voor de CLI.