Гид по технологиям

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

• 7 min read • DevOps • Обновлено 28 Nov 2025
Padloc на Rocky Linux 8 — self-hosted шаги
Padloc на Rocky Linux 8 — self-hosted шаги

Логотип или иллюстрация Padloc

О чем статья

В этом руководстве вы найдете полный набор шагов для установки 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 для автоматического получения/обновления сертификатов.

Перечень действий (на высоком уровне)

  1. Подготовка сервера и брандмауэра
  2. Установка Docker и docker-compose
  3. Создание директорий и docker-compose.yml
  4. Настройка Nginx и SSL
  5. Запуск контейнеров и проверка
  6. Обслуживание: обновления, резервные копии и мониторинг

Предварительные требования

  • Сервер с 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 в браузере — вы должны увидеть страницу входа.

Страница входа Padloc

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

Регистрация Padloc

Подтверждение по почте

Письмо с кодом подтверждения

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

Создание мастер-пароля

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

Домашняя страница Padloc

Шаг 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 (рекомендации)

  1. Минимум прав: используйте отдельного системного пользователя для операций развертывания.
  2. Ограничьте доступ по IP к SSH, используйте ключи вместо паролей.
  3. Регулярно обновляйте базовую систему и образы контейнеров.
  4. Храните секреты (SMTP пароль и т.п.) вне git — используйте менеджер секретов или шифрование.
  5. Включите SELinux (если возможно) и используйте контексты при монтировании “:Z”.
  6. Настройте мониторинг контейнеров и оповещения о падении сервисов.
  7. Настройте двухфакторную аутентификацию (если доступна) для доступа к серверу управления.

Risk matrix (упрощённая):

  • Риск: компрометация SMTP пароля —
    • Митигейшн: ограничить доступ к .env, использовать ротацию паролей.
  • Риск: утечка DB —
    • Митигейшн: шифрование бэкапов, ограничение доступа к файловой системе.
  • Риск: устаревший TLS —
    • Митигейшн: следить за обновлениями и ревью ssl.conf.

Тесты и приёмка (проверки после установки)

  • Доступ по HTTPS на основном домене открывает PWA.
  • Регистрация нового пользователя завершается подтверждением по email.
  • Вход с новым мастер-паролем успешен.
  • Загрузка и скачивание вложений (attachment) работает, при необходимости протестируйте файлы до 10 МБ по client_max_body_size.
  • Логи Nginx пишутся в logs/nginx.

Отладка частых проблем

  1. Сертификат не выдается:
    • Проверьте, доступен ли порт 80 извне и нет ли другого сервиса, занимающего порт.
  2. SMTP не отправляет почту:
    • Проверьте правильность PLEMAIL*; используйте внешнюю почтовую службу или логируйте SMTP-сессию.
  3. Контейнеры не поднимаются:
    • docker-compose logs — проверьте ошибки, отсутствующие тома или права доступа.
  4. Проблемы с SELinux:
    • Временно установите permissive и проверьте сообщения audit.log, затем назначьте правильные контексты.

Роли и чек-листы

Администратор (DevOps):

  • Убедиться, что DNS указывает на сервер.
  • Настроить firewall и правила облака.
  • Установить Docker и docker-compose.
  • Настроить Nginx и SSL.

Оператор безопасности:

  • Проверить права доступа к .env и каталогам db/attachments.
  • Настроить регулярные бэкапы и хранение в удалённом хранилище.
  • Включить мониторинг и оповещения.

Пользователь приложения:

  • Пройти регистрацию и сохранить мастер-пароль в безопасном месте.
  • Включить двухфакторную аутентификацию (если доступна).

Мини-методология обновлений (подход)

  1. Сделать бэкап БД и attachments.
  2. Тестировать обновления в staging (если есть).
  3. Выполнить docker-compose pull && docker-compose down && docker-compose up -d.
  4. Проверить работоспособность и логи.
  5. При откате: восстановить бэкап DB и attachments, поднять предыдущие образы (если хранилище образов позволяет).

Совместимость и миграция

  • При миграции с другого менеджера паролей экспортируйте данные в поддерживаемый формат (CSV/JSON) и импортируйте их через интерфейс Padloc.
  • Перед миграцией протестируйте импорт в тестовой базе.

Когда этот подход не подходит (контрпример)

  • Если вы не готовы поддерживать сервер (патчи, бэкапы, безопасность) — лучше использовать облачный сервис.
  • Если требуется нативная интеграция с коммерческими мобильными/desktop клиентами Padloc — self-hosted может быть ограничен.

Заключение

Вы развернули Padloc на Rocky Linux 8, настроили SSL, обеспечили базовые меры безопасности и подготовили процедуры обновления и резервного копирования. Поддерживайте систему в актуальном состоянии и регулярно тестируйте бэкапы.

Если возникли вопросы по конкретным ошибкам или нужны подсказки по оптимизации под вашу инфраструктуру — опишите окружение и ошибки, и я помогу.

Сводка

Важно: всегда храните .env и резервные копии в защищённом месте, ограничьте доступ и следите за автоматическим обновлением сертификатов.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро