Установка Padloc (self-hosted) на Rocky Linux 8

О чем статья
В этом руководстве вы найдете полный набор шагов для установки Padloc — облачно-ориентированного менеджера паролей с саморазворачиваемой (self-hosted) версией — на сервер Rocky Linux 8. Мы используем Docker и docker-compose, настраиваем Nginx как обратный прокси, получаем SSL-сертификаты через Let’s Encrypt и покрываем важные аспекты безопасности, резервного копирования и обновления.
Важно: self-hosted сборка Padloc несовместима с официальными настольными и мобильными проприетарными клиентами, но PWA можно установить как приложение в браузере/на мобильном устройстве.
Что вы получите в конце
- Работающий Padloc, доступный по HTTPS на вашем домене
- Настроенный Nginx с SSL и оптимизированными настройками TLS
- Автоматическое обновление сертификатов Certbot + скрипт для безопасной перезагрузки Nginx
- Рекомендации по безопасности, резервному копированию и процедуре обновления
Кому это подходит
- Системным администраторам и инженерам DevOps, желающим держать менеджер паролей под контролем
- Малым командам и отдельным пользователям, готовым поддерживать сервер
Краткая терминология
- PWA — Progressive Web App, веб-приложение, работающее как нативное приложение.
- FQDN — полностью квалифицированное доменное имя, например example.com.
- Certbot — клиент Let’s Encrypt для автоматического получения/обновления сертификатов.
Перечень действий (на высоком уровне)
- Подготовка сервера и брандмауэра
- Установка Docker и docker-compose
- Создание директорий и docker-compose.yml
- Настройка Nginx и SSL
- Запуск контейнеров и проверка
- Обслуживание: обновления, резервные копии и мониторинг
Предварительные требования
- Сервер с Rocky Linux 8 (минимум 1 ГБ RAM; рекомендуется 2 ГБ+ для стабильности).
- Ненулевой пользователь с sudo-привилегиями.
- Домен (FQDN) направлен на IP сервера, например example.com.
- Открытые порты 80 и 443 (HTTP/HTTPS) для получения сертификата и доступа.
Важно: если у вас включён SELinux (типично для Rocky/CentOS), мы используем метки “:Z” в volume-монтаже — это предусмотрено в docker-compose-файле ниже.
Шаг 1 — Настройка брандмауэра (Firewalld)
Проверяем состояние firewalld:
$ sudo firewall-cmd --state
runningСписок активных сервисов зоны по умолчанию (public):
$ sudo firewall-cmd --permanent --list-servicesЕсли отображается только базовый набор, добавьте http и https:
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reloadПроверьте список снова — он должен содержать http и https.
Примечание: если вы используете облачный провайдер (AWS/GCP/OVH и т.д.), убедитесь, что правила сети/SG также пропускают 80/443.
Шаг 2 — Установка Docker
Rocky Linux может поставлять устаревшую версию Docker. Рекомендуется подключить официальный репозиторий Docker и установить свежую версию.
Добавляем репозиторий Docker:
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repoУстанавливаем Docker:
$ sudo dnf install docker-ce docker-ce-cli containerd.ioВключаем и запускаем демон Docker:
$ sudo systemctl enable docker --now
$ sudo systemctl status dockerЕсли хотите запускать docker без sudo, добавьте пользователя в группу docker и перелогиньтесь:
$ sudo usermod -aG docker $(whoami)Важно: добавление в группу docker даёт привилегии, близкие к root, учитывайте это при управлении доступом.
Шаг 3 — Установка docker-compose
Скачиваем стабильную версию docker-compose и даём права на исполнение:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --versionОпционально — автодополнение bash:
$ sudo curl \
-L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \
-o /etc/bash_completion.d/docker-compose
$ source ~/.bashrcШаг 4 — Создание директорий для Padloc
Создадим рабочую директорию и необходимые подпапки:
$ mkdir ~/padloc
$ cd ~/padloc
$ mkdir {attachments,db,logs,pwa,ssl}
$ mkdir logs/nginxСтруктура позволит легко монтировать данные из контейнеров и делать резервные копии.
Шаг 5 — docker-compose.yml
Создайте файл ~/padloc/docker-compose.yml и вставьте следующий контент:
version: "3"
services:
server:
image: padloc/server
container_name: padloc_server
restart: unless-stopped
#ports:
# - ${PL_SERVER_PORT:-3000}:3000
expose:
- 3000
volumes:
- ${PL_DB_DIR:-./db}:/data:Z
- ${PL_ATTACHMENTS_DIR:-./attachments}:/docs:Z
- ./logs:/logs:Z
environment:
- PL_PWA_URL
- PL_EMAIL_SERVER
- PL_EMAIL_PORT
- PL_EMAIL_USER
- PL_EMAIL_PASSWORD
- PL_EMAIL_FROM
pwa:
image: padloc/pwa
container_name: padloc_pwa
restart: unless-stopped
#ports:
# - ${PL_PWA_PORT:-8080}:8080
expose:
- 8080
volumes:
- ${PL_PWA_DIR:-./pwa}:/pwa:Z
environment:
- PL_SERVER_URL
nginx:
image: nginx
container_name: nginx
restart: unless-stopped
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ${PL_SSL_CERT:-./ssl/cert.pem}:/ssl/cert
- ${PL_SSL_KEY:-./ssl/key.pem}:/ssl/key
- ${PL_SSL_CONF:-./ssl/ssl.conf}:/ssl/ssl.conf
- /etc/ssl/certs/dhparam.pem:/ssl/dhparam.pem
- ./logs/nginx:/var/log/nginx:Z
ports:
- 80:80
- 443:443Пояснения:
- Образы: padloc/server (backend), padloc/pwa (frontend), nginx (обратный прокси).
- Мы используем expose вместо проброса портов для внутренних связей контейнеров.
- Метка “:Z” нужна при включённом SELinux, она корректно выставляет контексты.
Шаг 6 — Конфигурация Nginx
Создайте файл ~/padloc/nginx.conf со следующим содержимым:
http {
# This is required if you want to upload attachments
client_max_body_size 10m;
# Redirect all http traffic to https
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
# We don't need a host name here since we're only
# dealing with one domain, but you may insert your domain here.
server_name _;
# Both server and pwa are served over https
listen 443 ssl http2;
listen [::]:443 ssl http2;
# This will resolve to the server instance
location /server/ {
proxy_pass http://padloc_server:3000;
rewrite ^/padloc_server(.*)$ $1 break;
}
# This will resolve to the web app
location / {
proxy_pass http://padloc_pwa:8080;
rewrite ^/padloc_pwa(.*)$ $1 break;
}
# SSL certificate
ssl_certificate /ssl/cert;
# SSL private key
ssl_certificate_key /ssl/key;
# Add this file to add advanced ssl configuration
include /ssl/ssl.conf;
}
}
# This section is required by nginx
events {}Ключевые моменты:
- Все HTTP-запросы перенаправляются на HTTPS.
- Запросы к пути /server/ проксируются на backend, остальные — на PWA.
- Настройки SSL вынесены в отдельный файл ssl/ssl.conf.
Примечание: если вы хотите использовать другой префикс (не /server/), скорректируйте PL_SERVER_URL и nginx конфигурацию одновременно.
Шаг 7 — .env файл
Создайте ~/padloc/.env и заполните переменные окружения:
# GENERAL SETTINGS
# ================
# URL that will resolve to the server instance
PL_PWA_URL=https://example.com/
# URL that will resolve to the web app
PL_SERVER_URL=https://example.com/server/
# SERVER SETTINGS
# ===============
# Port the server instance will listen on
PL_SERVER_PORT=3000
# Directory where database files will be stored
PL_DB_DIR=./db
# Directory where attachment files will be stored
PL_ATTACHMENTS_DIR=./attachments
# PWA SETTINGS
# ============
# Port the web app will be served from
PL_PWA_PORT=8080
# Directory where the static code for the web app will be stored
PL_PWA_DIR=./pwa
# EMAIL SETTINGS
# =============
# SMTP host
PL_EMAIL_SERVER=smtp.example.com
# SMTP username
PL_EMAIL_USER=[email protected]
# SMTP port
PL_EMAIL_PORT=443
# SMTP password
PL_EMAIL_PASSWORD=your_smtp_password
# Always use TLS when sending emails
# PL_EMAIL_SECURE=false
# Email ID to send mails from
PL_EMAIL_FROM=[email protected]
# SSL SETTINGS
# ============
# The path to your ssl certificate
PL_SSL_CERT=/etc/letsencrypt/live/example.com/fullchain.pem
# The path to your ssl private key
PL_SSL_KEY=/etc/letsencrypt/live/example.com/privkey.pem
# Advanced configuration file
PL_SSL_CONF=./ssl/ssl.confОбязательно укажите реальные SMTP-данные — без них регистрация и подтверждение по почте работать не будут. PL_PWA_URL и PL_SERVER_URL должны быть корректными URL вашего сервера.
Шаг 8 — Установка SSL (Let’s Encrypt)
Установим certbot и получим сертификат:
$ sudo dnf install epel-release
$ sudo dnf install certbot
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.comКоманда создаст сертификат в /etc/letsencrypt/live/example.com.
Создаём Diffie-Hellman параметры:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048Автоматическое обновление сертификатов: создайте cron-скрипт /etc/cron.weekly/certbot-renew с содержимым:
#!/bin/sh
certbot renew --cert-name example.com --pre-hook "docker stop nginx" --post-hook "docker start nginx" --renew-hook "docker restart nginx"Не забудьте сделать файл исполняемым:
$ sudo chmod +x /etc/cron.weekly/certbot-renewВажно: мы останавливаем контейнер nginx перед продлением и запускаем/перезапускаем после; это необходимо, если certbot использует standalone режим и захватывает порт 80.
Шаг 9 — Конфигурация SSL для Nginx
Создайте ~/padloc/ssl/ssl.conf с рекомендованными параметрами TLS:
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_prefer_server_ciphers off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /ssl/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;Эти настройки ограничивают TLS до безопасных версий и включают OCSP stapling для ускорения проверки статуса сертификатов.
Шаг 10 — Запуск Padloc
Запустите контейнеры в фоне:
$ docker-compose up -dПроверяем состояние:
$ docker psПроверьте логи контейнеров при проблемах:
$ docker-compose logs -f nginx
$ docker-compose logs -f server
$ docker-compose logs -f pwaШаг 11 — Доступ и первичная настройка Padloc
Откройте https://example.com в браузере — вы должны увидеть страницу входа.

Нажмите “Sign up Now” для регистрации. Процесс регистрации включает подтверждение по email и создание мастер-пароля. Ниже — скриншоты ключевых этапов интерфейса.



Получив код, введите его и завершите установку мастер-пароля.

После входа вы попадёте на домашнюю страницу приложения.

Шаг 12 — Обновление Padloc
Стандартная процедура обновления:
$ cd ~/padloc
$ docker-compose down --remove-orphans
$ docker-compose pull
$ docker-compose up -dРекомендация: перед обновлением создавайте резервную копию каталога db и attachments.
Резервное копирование и восстановление
Минимальная стратегия бэкапа:
- Еженедневный tar.gz каталога db и attachments, хранить 7-30 копий по ротации.
- Копирование логов по расписанию (архивы раз в неделю).
- Храните резервные копии на удалённом хранилище (S3, rsync на другой сервер).
Пример простого скрипта резервного копирования:
#!/bin/bash
DEST=/var/backups/padloc
mkdir -p $DEST
tar -czf $DEST/padloc-db-$(date +%F).tar.gz -C ~/padloc db
tar -czf $DEST/padloc-attachments-$(date +%F).tar.gz -C ~/padloc attachments
find $DEST -type f -mtime +30 -deleteКритерии приёмки резервной копии:
- Файл бэкапа успешно создан (не пустой)
- Возможность извлечь sqlite/файлы из архива
- Проверка целостности (например, через проверку структуры DB в тестовой среде)
Безопасность и hardening (рекомендации)
- Минимум прав: используйте отдельного системного пользователя для операций развертывания.
- Ограничьте доступ по IP к SSH, используйте ключи вместо паролей.
- Регулярно обновляйте базовую систему и образы контейнеров.
- Храните секреты (SMTP пароль и т.п.) вне git — используйте менеджер секретов или шифрование.
- Включите SELinux (если возможно) и используйте контексты при монтировании “:Z”.
- Настройте мониторинг контейнеров и оповещения о падении сервисов.
- Настройте двухфакторную аутентификацию (если доступна) для доступа к серверу управления.
Risk matrix (упрощённая):
- Риск: компрометация SMTP пароля —
- Митигейшн: ограничить доступ к .env, использовать ротацию паролей.
- Риск: утечка DB —
- Митигейшн: шифрование бэкапов, ограничение доступа к файловой системе.
- Риск: устаревший TLS —
- Митигейшн: следить за обновлениями и ревью ssl.conf.
Тесты и приёмка (проверки после установки)
- Доступ по HTTPS на основном домене открывает PWA.
- Регистрация нового пользователя завершается подтверждением по email.
- Вход с новым мастер-паролем успешен.
- Загрузка и скачивание вложений (attachment) работает, при необходимости протестируйте файлы до 10 МБ по client_max_body_size.
- Логи Nginx пишутся в logs/nginx.
Отладка частых проблем
- Сертификат не выдается:
- Проверьте, доступен ли порт 80 извне и нет ли другого сервиса, занимающего порт.
- SMTP не отправляет почту:
- Проверьте правильность PLEMAIL*; используйте внешнюю почтовую службу или логируйте SMTP-сессию.
- Контейнеры не поднимаются:
- docker-compose logs — проверьте ошибки, отсутствующие тома или права доступа.
- Проблемы с SELinux:
- Временно установите permissive и проверьте сообщения audit.log, затем назначьте правильные контексты.
Роли и чек-листы
Администратор (DevOps):
- Убедиться, что DNS указывает на сервер.
- Настроить firewall и правила облака.
- Установить Docker и docker-compose.
- Настроить Nginx и SSL.
Оператор безопасности:
- Проверить права доступа к .env и каталогам db/attachments.
- Настроить регулярные бэкапы и хранение в удалённом хранилище.
- Включить мониторинг и оповещения.
Пользователь приложения:
- Пройти регистрацию и сохранить мастер-пароль в безопасном месте.
- Включить двухфакторную аутентификацию (если доступна).
Мини-методология обновлений (подход)
- Сделать бэкап БД и attachments.
- Тестировать обновления в staging (если есть).
- Выполнить docker-compose pull && docker-compose down && docker-compose up -d.
- Проверить работоспособность и логи.
- При откате: восстановить бэкап DB и attachments, поднять предыдущие образы (если хранилище образов позволяет).
Совместимость и миграция
- При миграции с другого менеджера паролей экспортируйте данные в поддерживаемый формат (CSV/JSON) и импортируйте их через интерфейс Padloc.
- Перед миграцией протестируйте импорт в тестовой базе.
Когда этот подход не подходит (контрпример)
- Если вы не готовы поддерживать сервер (патчи, бэкапы, безопасность) — лучше использовать облачный сервис.
- Если требуется нативная интеграция с коммерческими мобильными/desktop клиентами Padloc — self-hosted может быть ограничен.
Заключение
Вы развернули Padloc на Rocky Linux 8, настроили SSL, обеспечили базовые меры безопасности и подготовили процедуры обновления и резервного копирования. Поддерживайте систему в актуальном состоянии и регулярно тестируйте бэкапы.
Если возникли вопросы по конкретным ошибкам или нужны подсказки по оптимизации под вашу инфраструктуру — опишите окружение и ошибки, и я помогу.
Сводка
Важно: всегда храните .env и резервные копии в защищённом месте, ограничьте доступ и следите за автоматическим обновлением сертификатов.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента