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
| CPU | 2 jadrá | 2–4 jadrá |
| RAM | 2 GB | 4 GB |
| Disk | 20 GB | 30–50 GB podľa počtu používateľov a backupov |
| Sieť | 10 Mbps | 100 Mbps alebo viac |
| Internet | Áno | Áno |
| Čas/NTP | Vyžadovaný | NTP musí byť funkčné |
| SMTP | Potrebný pre notifikácie a recovery | Odporúčaný |
| HTTPS | Odporúč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:
| Platforma | Podpora |
|---|
| Docker / Docker Compose | CE / Pro |
| Ubuntu 24.04 | CE / Pro |
| Debian 13 | CE / Pro |
| Red Hat Enterprise Linux 9 | CE / Pro |
| AlmaLinux 9 | CE / Pro |
| Rocky Linux 9 | CE / Pro |
| Oracle Linux 9 | CE / Pro |
| OpenSUSE Leap 15 | CE / Pro |
| SUSE Linux Enterprise Server 15 SP6 | CE / Pro |
| Raspberry Pi | CE / Pro |
| Kubernetes / Helm Chart | CE / Pro |
| AWS AMI | CE / Pro |
| DigitalOcean | CE |
| Virtual Appliance | Pro |
| Inštalácia zo zdrojového kódu | CE |
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.

