Passbolt na Ubuntu 26.04 Server Docker

Passbolt je open-source správca hesiel určený najmä pre tímy a firmy. Umožňuje bezpečne ukladať, zdieľať a spravovať prihlasovacie údaje pomocou OpenPGP šifrovania, pričom každý používateľ pracuje s vlastným privátnym kľúčom a passphrase.

Technické požiadavky Passbolt

CPU2 jadrá2–4 jadrá
RAM2 GB4 GB
Disk20 GB30–50 GB podľa počtu používateľov a backupov
Sieť10 Mbps100 Mbps alebo viac
InternetÁnoÁno
Čas/NTPVyžadovanýNTP musí byť funkčné
SMTPPotrebný pre notifikácie a recoveryOdporúčaný
HTTPSOdporúčaný / produkčne nutnýTLS certifikát + FQDN

Kde je možné Passbolt nainštalovať

Passbolt aktuálne poskytuje oficiálne inštalačné postupy pre:

PlatformaPodpora
Docker / Docker ComposeCE / Pro
Ubuntu 24.04CE / Pro
Debian 13CE / Pro
Red Hat Enterprise Linux 9CE / Pro
AlmaLinux 9CE / Pro
Rocky Linux 9CE / Pro
Oracle Linux 9CE / Pro
OpenSUSE Leap 15CE / Pro
SUSE Linux Enterprise Server 15 SP6CE / Pro
Raspberry PiCE / Pro
Kubernetes / Helm ChartCE / Pro
AWS AMICE / Pro
DigitalOceanCE
Virtual AppliancePro
Inštalácia zo zdrojového kóduCE

Poznámka: Oficiálny balíčkový návod Passbolt je aktuálne dostupný pre Ubuntu 24.04. V tomto návode používame Ubuntu 26.04 ako Docker host, pričom samotný Passbolt beží v oficiálnom Docker kontajneri. Preto nie sme závislí od balíčkovej inštalácie Passbolt určenej pre konkrétnu verziu Ubuntu.

Čo budeme potrebovať?

Na inštaláciu budeme potrebovať Linux server s nainštalovaným Dockerom a Docker Compose, vlastnú doménu, DNS záznam smerujúci na reverse proxy, SMTP server pre odosielanie notifikácií a správne nastavený systémový čas.

V tomto návode používam samostatný príkaz:

docker-compose

Ak používate novší Docker Compose plugin, môžete namiesto neho používať:

docker compose

Pre produkčné prostredie je vhodné použiť konkrétnu verziu Passbolt image namiesto pohyblivého tagu latest. Passbolt to odporúča aj vo svojej dokumentácii.

Predpríprava

Vytvoríme pracovný adresár:

mkdir passbolt
cd passbolt

Vygenerujeme náhodné 64-znakové heslo pre databázového používateľa:

DBPASS="$(openssl rand -hex 32)"

Uložíme ho do skrytého súboru .env:

printf 'PASSBOLT_DB_PASSWORD=%s\n' "$DBPASS" > .env

Dočasnú premennú odstránime zo shellu:

unset DBPASS

Nastavíme práva:

chmod 600 .env
echo '.env' >> .gitignore

Bezpečnostné upozornenie: Súbor .env obsahuje databázové a SMTP heslo. Nastavte mu práva 600, nevkladajte ho do verejného Git repozitára a jeho obsah nezverejňujte.

Správnosť môžeme skontrolovať bez vypísania hesla:

awk -F= '/^PASSBOLT_DB_PASSWORD=/{print "Heslo v .env ma dlzku:", length($2)}' .env

Výsledok:

Heslo v .env ma dlzku: 64

Súbor .env je skrytý. Zobrazíme ho napríklad:

ls -la

SMTP heslo

Ak chceme používať e-mailové notifikácie, pridáme do .env ešte SMTP heslo alebo App Password:

PASSBOLT_DB_PASSWORD=<VYGENEROVANE_DB_HESLO>
PASSBOLT_SMTP_PASSWORD=<SMTP_APP_PASSWORD>

Skutočné heslá nikdy nevkladajte do verejnej dokumentácie alebo Git repozitára.

Passbolt podporuje SMTP konfiguráciu pomocou environment premenných vrátane hosta, portu, používateľa, hesla, odosielateľa a TLS.

Docker-compose.yml

Príklad verejnej konfigurácie:

nano docker-compose.yml
services:
  passbolt-db:
    image: mariadb:10.11
    container_name: passbolt-db
    restart: unless-stopped

    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "true"
      MYSQL_DATABASE: "passbolt"
      MYSQL_USER: "passbolt"
      MYSQL_PASSWORD: "${PASSBOLT_DB_PASSWORD}"

    volumes:
      - passbolt_database:/var/lib/mysql

    networks:
      - passbolt-network


  passbolt:
    image: passbolt/passbolt:5.15.0-1-ce
    container_name: passbolt
    restart: unless-stopped

    depends_on:
      - passbolt-db

    environment:
      # URL aplikácie
      APP_FULL_BASE_URL: "https://passbolt.example.com"

      # Reverse proxy
      PASSBOLT_SECURITY_PROXIES_ACTIVE: "true"

      # Databáza
      DATASOURCES_DEFAULT_HOST: "passbolt-db"
      DATASOURCES_DEFAULT_USERNAME: "passbolt"
      DATASOURCES_DEFAULT_PASSWORD: "${PASSBOLT_DB_PASSWORD}"
      DATASOURCES_DEFAULT_DATABASE: "passbolt"

      # SMTP
      EMAIL_DEFAULT_FROM_NAME: "Passbolt"
      EMAIL_DEFAULT_FROM: "passbolt@example.com"

      EMAIL_TRANSPORT_DEFAULT_HOST: "mail.example.com"
      EMAIL_TRANSPORT_DEFAULT_PORT: "587"
      EMAIL_TRANSPORT_DEFAULT_USERNAME: "passbolt@example.com"
      EMAIL_TRANSPORT_DEFAULT_PASSWORD: "${PASSBOLT_SMTP_PASSWORD}"
      EMAIL_TRANSPORT_DEFAULT_TLS: "true"

      # GPG
      PASSBOLT_KEY_NAME: "Passbolt Server"
      PASSBOLT_KEY_EMAIL: "passbolt@example.com"

      TZ: "Europe/Bratislava"

    volumes:
      - passbolt_gpg:/etc/passbolt/gpg
      - passbolt_jwt:/etc/passbolt/jwt

    command:
      [
        "/usr/bin/wait-for.sh",
        "-t",
        "0",
        "passbolt-db:3306",
        "--",
        "/docker-entrypoint.sh"
      ]

    ports:
      - "192.0.2.10:8088:80"

    networks:
      - passbolt-network


volumes:
  passbolt_database:
  passbolt_gpg:
  passbolt_jwt:


networks:
  passbolt-network:
    driver: bridge

Nastavenie IP adresy

V ukážkovej konfigurácii používame adresu:

192.0.2.10

Túto adresu je potrebné nahradiť LAN IP adresou servera, na ktorom beží Passbolt.

Ak reverse proxy beží na rovnakom serveri ako Passbolt, odporúčame publikovať port iba na localhost:

ports:
  - "127.0.0.1:8088:80"

Ak reverse proxy beží na inom serveri, musí byť použitá LAN IP Passbolt servera.

PASSBOLT_SECURITY_PROXIES_ACTIVE=true aktivuje podporu reverse proxy a Passbolt ju odporúča, ak je aplikácia umiestnená za proxy/load balancerom.

Kontrola konfigurácie

sudo docker-compose config >/dev/null && echo "COMPOSE OK"

Správny výsledok:

COMPOSE OK

Stiahnutie Docker images

Príkaz:

sudo docker-compose pull

stiahne images definované v docker-compose.yml, ale ešte samotné kontajnery nespustí.

Napríklad:

[+] pull 22/22
 ✔ Image mariadb:10.11                 Pulled                                                                                                                                     11.9s
 ✔ Image passbolt/passbolt:5.15.0-1-ce Pulled     

Spustenie Passbolt

sudo docker-compose up -d

Stav skontrolujeme:

sudo docker-compose ps

Mali by sme vidieť oba kontajnery:

Výstup:

passbolt       Up
passbolt-db    Up

Port Passbolt servera bude mapovaný napríklad:

192.0.2.10:8088 -> 80/tcp

Test webovej aplikácie

Namiesto:

curl -I http://192.0.2.10:8088

je vhodnejšie použiť normálny HTTP GET:

curl -v http://192.0.2.10:8088/

Pri funkčnom Passbolte môžeme dostať:

HTTP/1.1 302 Found
location: /auth/login?redirect=%2F

Login stránku môžeme otestovať:

curl -v http://192.0.2.10:8088/auth/login

Správna odpoveď:

HTTP/1.1 200 OK

Dôležitá poznámka: Passbolt používa hodnotu APP_FULL_BASE_URL, preto môže pri priamom otvorení cez IP adresu vyzerať stránka nesprávne alebo zostať biela. Finálny prístup má prebiehať cez adresu:

https://passbolt.example.com

SMTP konfigurácia

V našom príklade používame:

SMTP server: mail.example.com
Port: 587
Encryption: STARTTLS
Username: passbolt@example.com

Port 587 s EMAIL_TRANSPORT_DEFAULT_TLS=true je podporovaný Passbolt konfiguráciou pre STARTTLS.

Po úprave .env alebo docker-compose.yml je potrebné Passbolt kontajner znova vytvoriť:

sudo docker-compose up -d --force-recreate passbolt

Overíme, či Passbolt premenné načítal bez zobrazenia hesla:

sudo docker exec passbolt sh -c '
echo "FROM=$EMAIL_DEFAULT_FROM"
echo "HOST=$EMAIL_TRANSPORT_DEFAULT_HOST"
echo "PORT=$EMAIL_TRANSPORT_DEFAULT_PORT"
echo "USER=$EMAIL_TRANSPORT_DEFAULT_USERNAME"
echo "TLS=$EMAIL_TRANSPORT_DEFAULT_TLS"

if [ -n "$EMAIL_TRANSPORT_DEFAULT_PASSWORD" ]; then
  echo "SMTP PASSWORD=SET"
else
  echo "SMTP PASSWORD=EMPTY"
fi
'

Výsledok môže byť:

FROM=passbolt@example.com
HOST=mail.example.com
PORT=587
USER=passbolt@example.com
TLS=true
SMTP PASSWORD=SET

Test odoslania e-mailu

sudo docker exec passbolt \
  su -s /bin/bash -c \
  "source /etc/environment && cd /usr/share/php/passbolt && ./bin/cake passbolt send_test_email --recipient=admin@example.com" \
  www-data

Ak sa namiesto nakonfigurovaného SMTP servera zobrazí localhost, port 25 alebo SMTP PASSWORD=EMPTY, skontrolujte, či sú SMTP premenné umiestnené pod službou passbolt v časti environment: a či je PASSBOLT_SMTP_PASSWORD správne definovaný v súbore .env.

Passbolt poskytuje send_test_email práve na diagnostiku SMTP konfigurácie.

Ak je konfigurácia správna, testovací e-mail príde z adresy:

passbolt@example.com

Reverse proxy

Ak používame napríklad Mailcow Nginx ako reverse proxy na inom serveri, backend bude smerovať na:

http://192.0.2.10:8088

Príklad Nginx konfigurácie:

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name passbolt.example.com;

    ssl_certificate /etc/ssl/mail/cert.pem;
    ssl_certificate_key /etc/ssl/mail/key.pem;

    client_max_body_size 0;

    location ^~ /.well-known/acme-challenge/ {
        allow all;
        default_type "text/plain";
        root /web;
    }

    if ($scheme = http) {
        return 301 https://$host$request_uri;
    }

    location / {
        proxy_pass http://192.0.2.10:8088;

        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_redirect off;
    }
}

Mailcow umožňuje vytvárať persistentné vlastné Nginx konfigurácie v data/conf/nginx/ a používať ich ako reverse proxy na vzdialený backend.

Kontrola Nginx konfigurácie

Po vytvorení alebo úprave reverse proxy konfigurácie skontrolujeme syntax Nginx:

cd /opt/mailcow-dockerized

sudo docker-compose exec nginx-mailcow nginx -t

Správny výsledok:

syntax is ok
test is successful

Ak je konfigurácia v poriadku, reštartujeme Nginx kontajner:

sudo docker-compose restart nginx-mailcow

SSL certifikát v Mailcow

Doménu Passbolt pridáme do:

ADDITIONAL_SAN=passbolt.example.com

Ak už ADDITIONAL_SAN obsahuje ďalšie domény:

ADDITIONAL_SAN=video.example.com,jelly.example.com,passbolt.example.com

Bez medzier a bez úvodzoviek. Mailcow tým pridá hostname do SAN certifikátu.

Aplikujeme konfiguráciu:

Po úspešnom nastavení reverse proxy a SSL certifikátu by sme už mali na adrese https://passbolt.example.com vidieť úvodnú obrazovku Passbolt. Prvého administrátora však ešte najskôr vytvoríme pomocou CLI.

sudo docker-compose up -d

V prípade potreby môžeme vynútiť obnovenie certifikátu:

sudo touch data/assets/ssl/force_renew
sudo docker-compose restart acme-mailcow

Log:

sudo docker-compose logs --tail=200 -f acme-mailcow

Pri samostatnom custom webe/reverse proxy nie je potrebné automaticky pridávať hostname do ADDITIONAL_SERVER_NAMES; Mailcow na to pri custom web root konfiguráciách výslovne upozorňuje.

Kontrola Passbolt – Healthcheck

Pred vytvorením prvého administrátora môžeme skontrolovať celkový stav Passbolt:

sudo docker exec passbolt \
  su -s /bin/bash -c \
  "source /etc/environment && cd /usr/share/php/passbolt && ./bin/cake passbolt healthcheck --hide-pass" \
  www-data

Healthcheck pomôže odhaliť problémy s databázou, GPG kľúčmi, konfiguráciou, URL aplikácie alebo ďalšími komponentmi Passbolt.

Vytvorenie prvého administrátora

Keď už funguje:

https://passbolt.example.com

vytvoríme prvého administrátora:

sudo docker-compose exec passbolt \
  su -m -c "/usr/share/php/passbolt/bin/cake \
  passbolt register_user \
  -u admin@example.com \
  -f Admin \
  -l User \
  -r admin" \
  -s /bin/sh www-data

Passbolt nevypíše iba „kód“, ale jednorazový registračný URL link, napríklad:

https://passbolt.example.com/setup/install/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy

Tento odkaz je citlivý. Nezverejňujte ho v dokumentácii, tiketoch ani diskusiách. Otvorte ho priamo v prehliadači a dokončite vytvorenie používateľského profilu, GPG kľúča a recovery kitu.

naspäť