Пошаговая инструкция · Самостоятельная установка
Как установить Passbolt на Ubuntu для общих паролей команды
Пошаговая инструкция для самостоятельной установки. Установим Passbolt Community Edition, создадим первого администратора и проверим общий пароль двух сотрудников. Настроим HTTPS и почту, а в резервную копию включим базу и ключи сервера.
Что подготовить и как читать инструкцию #
Passbolt организует общие секреты команды с доступом через браузерное расширение и учётные записи сотрудников. Здесь ставим Community Edition на один узел с MariaDB; коммерческие возможности Pro автоматически не появляются. До переноса настоящих паролей проверим обмен между двумя пробными пользователями и восстановление их доступа.
Нужны чистая Ubuntu 26.04 LTS, SSH, домен passwords.example.com, Docker Engine, Compose v2 и Nginx из общей подготовки сервера. Дополнительно подготовьте рабочий SMTP-сервис: приглашения и уведомления входят в пользовательский путь. Проверьте синхронизацию времени хоста — неверные часы могут нарушить GPG-аутентификацию.
Команды выполняйте в терминале сервера после подключения по SSH, если шаг не указывает другое место. sudo даёт команде права администратора. Действия в браузере выполняйте на своём компьютере. Домены, IP-адреса и значения ВАШ_ПАРОЛЬ из примеров заменяйте своими до выполнения команды.
Двигайтесь по одному шагу и проверяйте результат перед следующим. Блок с <<EOF или другим именем завершения копируйте целиком: он записывает содержимое одного файла. При работе в nano сохраняйте файл клавишами Ctrl+O, Enter и выходите Ctrl+X. Если прервали SSH-сеанс, снова перейдите в указанный каталог; переменные предыдущего сеанса потребуется задать заново.
Настройка внешнего доступа использует обратный прокси Nginx и Certbot для Nginx. Приложение остаётся доступным на локальном порту; снаружи открыт его HTTPS-домен.
Шаг 1. Создайте каталог Passbolt #
Все команды Compose выполняем в ~/services/passbolt. В папке будут описание установки и секреты.
mkdir -p ~/services/passbolt
cd ~/services/passboltВы находитесь в нужном каталоге.
Шаг 2. Создайте пароль базы #
Случайный пароль попадёт в закрытый .env. Это пароль MariaDB, а не парольная фраза личного ключа Passbolt.
umask 077
printf 'DB_PASSWORD=%s
' "$(openssl rand -hex 24)" > .envDB_PASSWORD заполнен; файл не передавайте пользователям.
Шаг 3. Добавьте SMTP-настройки #
Откройте nano .env и добавьте строки ниже, заменив примеры реквизитами своего почтового сервиса. Пример использует STARTTLS; порт и TLS должны соответствовать провайдеру. Почта нужна приглашениям и регистрации.
EMAIL_DEFAULT_FROM=passbolt@example.com
EMAIL_DEFAULT_FROM_NAME=Passbolt
EMAIL_TRANSPORT_DEFAULT_HOST=smtp.example.com
EMAIL_TRANSPORT_DEFAULT_PORT=587
EMAIL_TRANSPORT_DEFAULT_USERNAME=passbolt@example.com
EMAIL_TRANSPORT_DEFAULT_PASSWORD=REPLACE_WITH_SMTP_PASSWORD
EMAIL_TRANSPORT_DEFAULT_TLS=trueВ .env сохранён пароль базы и добавлены SMTP-параметры.
Шаг 4. Сохраните Compose #
Откройте nano compose.yaml и вставьте YAML. APP_FULL_BASE_URL должен содержать ваш HTTPS-домен passwords.example.com. MariaDB хранит данные, каталоги GPG/JWT — серверные ключи.
services:
db:
image: mariadb:10.11
restart: unless-stopped
environment:
MYSQL_RANDOM_ROOT_PASSWORD: 'true'
MYSQL_DATABASE: passbolt
MYSQL_USER: passbolt
MYSQL_PASSWORD: ${DB_PASSWORD:?set database password}
volumes:
- database:/var/lib/mysql
passbolt:
image: passbolt/passbolt:5.16.0-1-ce
restart: unless-stopped
env_file: .env
environment:
APP_FULL_BASE_URL: https://passwords.example.com
DATASOURCES_DEFAULT_HOST: db
DATASOURCES_DEFAULT_USERNAME: passbolt
DATASOURCES_DEFAULT_PASSWORD: ${DB_PASSWORD}
DATASOURCES_DEFAULT_DATABASE: passbolt
PASSBOLT_SSL_FORCE: 'true'
PASSBOLT_SECURITY_PROXIES_ACTIVE: 'true'
PASSBOLT_PLUGINS_SELF_REGISTRATION_ENABLED: 'false'
DEBUG: 'false'
command: ['/usr/bin/wait-for.sh', '-t', '0', 'db:3306', '--', '/docker-entrypoint.sh']
ports:
- '127.0.0.1:8088:80'
volumes:
- gpg:/etc/passbolt/gpg
- jwt:/etc/passbolt/jwt
depends_on:
- db
volumes:
database:
gpg:
jwt:Все переменные берутся из .env; порт приложения доступен только локально.
Шаг 5. Проверьте описание установки #
Compose проверит структуру YAML и наличие параметров.
docker compose config --quietconfig --quiet завершился без ошибки.
Шаг 6. Загрузите образы #
Скачиваем согласованные версии Passbolt и базы; пока не регистрируем пользователей.
docker compose pullpull завершился успешно.
Шаг 7. Запустите контейнеры #
Первый запуск создаёт базу и серверные ключи. Сохраните постоянные тома при дальнейшем обслуживании.
docker compose up -dКонтейнеры созданы; ждём проверки состояния.
Шаг 8. Проверьте запуск #
ps и журнал помогут отличить обычную подготовку базы от повторяющейся ошибки.
docker compose ps
docker compose logs --tail=100 passboltБаза и Passbolt работают без цикла перезапусков.
Шаг 9. Ограничьте первоначальный доступ #
До регистрации администратора разрешите HTTPS только своему IP в firewall провайдера. Порт 80 оставьте для выпуска сертификата.
Первоначальная настройка доступна только вам.
Шаг 10. Сохраните сайт Nginx #
Установите Nginx и Certbot по подготовке Ubuntu, если ещё не установили. Откройте sudo nano /etc/nginx/sites-available/passbolt и вставьте файл ниже. Замените все домены своими. Nginx передаёт приложению домен, адрес клиента и протокол; Upgrade и Connection сохраняют WebSocket. До получения сертификата условие $scheme блокирует обычные HTTP-запросы кодом 403, чтобы вход не происходил без шифрования.
/etc/nginx/sites-available/passboltmap $http_upgrade $passbolt_connection_upgrade {
default upgrade;
"" close;
}
server {
listen 80;
server_name passwords.example.com;
client_max_body_size 100m;
location / {
if ($scheme = http) { return 403; }
proxy_pass http://127.0.0.1:8088;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $passbolt_connection_upgrade;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_buffering off;
}
}
Сохраните Ctrl+O, Enter, Ctrl+X. В файле пока нет путей к сертификатам: Nginx сможет проверить его до выпуска HTTPS.
Шаг 11. Подключите сайт и проверьте HTTP #
Ссылка подключает сохранённый сайт. nginx -t проверяет все настройки сервера; && разрешает перечитать их только при успешной проверке. curl проверяет ответ для вашего домена. При ошибке остановитесь, исправьте указанную строку и повторите проверку.
sudo ln -sfn /etc/nginx/sites-available/passbolt /etc/nginx/sites-enabled/passbolt
sudo nginx -t && sudo systemctl reload nginx
curl -I http://passwords.example.com/Ожидается successful от nginx -t и HTTP 403 для обычного запроса: до HTTPS это намеренная блокировка. DNS должен указывать на сервер, TCP 80/443 — быть доступен у провайдера. Ничего не вводите в форму входа по HTTP.
Шаг 12. Получите сертификат и включите HTTPS #
Каждое имя из команды должно указывать на этот сервер. Certbot проверит домены, сам добавит сертификат в сайт Nginx и включит перенаправление HTTP → HTTPS. Укажите свою почту при запросе и подтвердите условия Let’s Encrypt. Это отдельное действие после успешной проверки HTTP.
sudo /snap/bin/certbot --nginx -d passwords.example.com --redirectCertbot сообщил об успешной установке. Откройте HTTPS-адрес со своего компьютера: браузер не должен предупреждать о сертификате. Для закрытой панели используйте разрешённый IP. При ошибке исправьте DNS, в том числе AAAA, либо доступ к TCP 80; не повторяйте запросы выпуска подряд.
Шаг 13. Проверьте продление сертификата #
Certbot из snap создаёт службу автоматического продления. Dry-run выполняет пробное продление: настоящие сертификаты не заменяются. Затем проверьте, что таймер планирует следующий запуск. Сохраняйте доступ к TCP 80 для следующих проверок домена.
sudo /snap/bin/certbot renew --dry-run
systemctl list-timers --all 'snap.certbot.renew*'Пробное продление успешно, у таймера есть следующий запуск. Если тест не прошёл, проверьте /var/log/letsencrypt/letsencrypt.log; сначала исправьте причину. После этого можно создавать учётную запись и приглашать пользователей.
Шаг 14. Создайте администратора #
Замените admin@example.com настоящим адресом. Команда register_user выводит персональную ссылку завершения регистрации. Это временный доступ, а не публичная ссылка на главную страницу.
docker compose exec --user www-data passbolt /usr/share/php/passbolt/bin/cake passbolt register_user -u admin@example.com -f Server -l Administrator -r adminСсылка относится к вашему HTTPS-домену; открывайте её только в своей сессии.
Шаг 15. Создайте личный ключ #
Перейдите по ссылке. Установите официальное расширение Passbolt из магазина браузера и завершите мастер создания ключа. Выберите уникальную парольную фразу: она защищает ваши зашифрованные ресурсы.
Мастер завершён и открыт личный интерфейс Passbolt.
Шаг 16. Сохраните recovery kit #
Скачайте комплект восстановления и храните отдельно от сервера и браузера. Личный закрытый ключ и его парольная фраза нужны для доступа к вашим ресурсам; резервная копия сервера не заменяет этот комплект.
Комплект сохранён; повторный вход с расширением и парольной фразой работает.
Шаг 17. Проверьте состояние Passbolt #
Штатный healthcheck проверяет конфигурацию и окружение. Предупреждения о HTTPS, ключах и почте нужно разобрать до приглашения команды.
docker compose exec --user www-data passbolt /usr/share/php/passbolt/bin/cake passbolt healthcheckПроверки успешны; понятна причина оставшихся предупреждений.
Шаг 18. Создайте тестовый пароль и поделитесь #
Добавьте вымышленную тестовую запись. Пригласите второго пользователя и выдайте доступ только к ней. В его браузере проверьте чтение; при выборе роли без изменения он не должен редактировать запись.
Приглашение доставлено, доступ соответствует выбранным правам.
Шаг 19. Остановите приложение для копии #
Создадим закрытый каталог и остановим только Passbolt; база продолжит работать для выгрузки.
umask 077
mkdir -p "$HOME/backups/passbolt"
docker compose stop passboltВеб-приложение остановлено, MariaDB доступна.
Шаг 20. Выгрузите базу #
mariadb-dump читает реквизиты из окружения контейнера: пароль не нужно вставлять в командную строку.
docker compose exec -T db sh -c 'MYSQL_PWD="$MYSQL_PASSWORD" mariadb-dump --single-transaction -u "$MYSQL_USER" "$MYSQL_DATABASE"' > "$HOME/backups/passbolt/database.sql"database.sql создан без ошибки и не пуст.
Шаг 21. Сохраните серверные ключи и конфигурацию #
Скопируем GPG, JWT, .env и compose.yaml. База без этих ключей не является полной серверной копией. Ограничьте доступ ко всему каталогу копий.
docker compose cp passbolt:/etc/passbolt/gpg "$HOME/backups/passbolt/gpg"
docker compose cp passbolt:/etc/passbolt/jwt "$HOME/backups/passbolt/jwt"
cp .env compose.yaml "$HOME/backups/passbolt/"Все четыре части сохранены. Перенесите каталог в закрытое внешнее хранилище.
Шаг 22. Верните сервис и проверьте копию #
Запустите приложение. На отдельном сервере той же версии проверьте восстановление базы и серверных ключей вместе; затем вход и чтение тестовой записи. Пользовательские recovery kit сохраняются отдельно.
docker compose start passboltПриложение снова работает; пригодность копии подтверждается восстановлением.
Если результат шага отличается #
Вернитесь к проверке того шага, на котором появилась ошибка. Первая ошибка в выводе обычно полезнее последних строк: последующие команды могли не получить нужный файл или работающую службу. Не повторяйте установку целиком поверх частично настроенного приложения.
Если страница не открывается, сначала проверьте домен и входящие порты, затем состояние приложения и его журнал. Если сайт открывается, но отдельное действие не работает, проверьте связанные компоненты — обработчик фоновых задач, почту или права пользователя. Официальные источники в конце статьи относятся к выбранному способу установки.
Настройки внешнего доступа храните вместе с копией приложения: /etc/nginx/sites-available/passbolt и /etc/letsencrypt содержат сайт и сертификаты с закрытыми ключами. Архивируйте их с sudo в закрытое хранилище. После восстановления подключите сайт через sites-enabled, выполните sudo nginx -t, затем перечитайте Nginx. Для ошибки 502 сначала проверьте локальное приложение и /var/log/nginx/error.log; для сертификата — /var/log/letsencrypt/letsencrypt.log и таймер продления.