Проект

Общее

Профиль

Действия

🔐 Установка Vaultwarden (Docker + Nginx + Certbot)

Шаг 1: Установка Docker и Docker Compose

Vaultwarden удобнее всего запускать в контейнере.

# Обновляем пакеты
sudo apt update && sudo apt upgrade -y

# Устанавливаем Docker
sudo apt install docker.io -y

# Устанавливаем плагин Docker Compose
sudo apt install docker-compose-plugin -y

# Добавляем пользователя в группу docker (чтобы не писать sudo перед docker)
sudo usermod -aG docker $USER

# Применим группу без перезагрузки
newgrp docker

Шаг 2: Установка Nginx и Certbot

Nginx будет работать как обратный прокси (принимать запросы из интернета и передавать их в Vaultwarden), а Certbot получит SSL-сертификат.

sudo apt install nginx certbot python3-certbot-nginx -y

Шаг 3: Получение SSL-сертификата

На этом этапе Nginx должен быть запущен и доступен по порту 80.
Создайте временный конфиг для Nginx (чтобы Certbot мог проверить домен):

sudo nano /etc/nginx/sites-available/vaultwarden

Вставьте следующее (замените vault.example.com на ваш домен):

server {
    listen 80;
    server_name vault.example.com;

    location / {
        return 200 'OK';
        add_header Content-Type text/plain;
    }
}

Включите сайт и перезапустите Nginx:

sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Запустите Certbot для получения сертификата:

sudo certbot --nginx -d vault.example.com
  • Введите email для уведомлений
  • Согласитесь с условиями
  • Выберите вариант перенаправления на HTTPS (рекомендуется вариант 2)

✅ Certbot автоматически настроил обновление сертификатов через systemd timer.
Проверить можно командой: sudo systemctl list-timers | grep certbot

Пример успешного вывода:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for vw.saria.by

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/vw.saria.by/fullchain.pem
Key is saved at: /etc/letsencrypt/live/vw.saria.by/privkey.pem
This certificate expires on 2026-06-22.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for vw.saria.by to /etc/nginx/sites-enabled/vaultwarden
Congratulations! You have successfully enabled HTTPS on https://vw.saria.by

Шаг 4: Настройка Nginx для проксирования

Теперь нужно настроить Nginx так, чтобы он передавал запросы в контейнер Vaultwarden.
Откройте конфиг снова (Certbot мог его изменить):

sudo nano /etc/nginx/sites-available/vaultwarden
# HTTP на порту 80 → редирект на HTTPS с портом 55641
server {
    listen 80;
    server_name vw.saria.by;
    return 301 https://$server_name:55641$request_uri;
}

# HTTPS на порту 55641
server {
    listen 55641 ssl http2;
    server_name vw.saria.by;

    # Пути к сертификатам
    ssl_certificate /etc/letsencrypt/live/vw.saria.by/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vw.saria.by/privkey.pem;

    # Современные настройки SSL
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;

    # Отключаем логирование токенов в доступе (опционально, для приватности)
    proxy_hide_header Authorization;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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_set_header X-Forwarded-Port 55641;  # Важно: сообщаем Vaultwarden о внешнем порте
        
        # Для веб-сокетов (уведомления)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Примените изменения:

sudo nginx -t && sudo systemctl reload nginx

Шаг 5: Обновите docker-compose.yml для Vaultwarden

Откройте файл:

nano ~/vaultwarden/docker-compose.yml

Обновите секцию environment, особенно переменную DOMAIN:

version: '3'
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    volumes:
      - ${PWD}/data:/data
    ports:
      - 127.0.0.1:8000:80  # Vaultwarden внутри контейнера по-прежнему слушает порт 80
    environment:
      - DOMAIN=https://vw.saria.by:55641    # ← Обязательно укажите порт!
      - WEBSOCKET_ENABLED=true
      - SIGNUPS_ALLOWED=false
      - ADMIN_TOKEN=ПридумайтеОченьСложныйПароль_2026!
  
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 86400 --cleanup

Перезапустите контейнеры:

cd ~/vaultwarden
docker compose up -d
💡 Важно: Переменная DOMAIN с указанием порта критически важна: Vaultwarden использует её для генерации ссылок в письмах, настройки клиентов и проверки безопасности.

✅ Проверка работы

# Проверьте, что Nginx слушает порт 55641
sudo ss -tlnp | grep 55641

Протестируйте доступ локально

curl -kI https://127.0.0.1:55641

Проверьте, что контейнер Vaultwarden запущен

docker ps | grep vaultwarden

Посмотрите логи Nginx на ошибки

sudo tail -f /var/log/nginx/error.log

🔧 Полезные команды

  • docker compose logs -f vaultwarden — просмотр логов контейнера
  • sudo certbot renew --dry-run — тестовое обновление сертификата
  • sudo systemctl status nginx — статус Nginx
  • docker exec -it vaultwarden /bin/bash — вход в контейнер
<style> .vaultwarden-install-guide { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; line-height: 1.6; color: #333; max-width: 100%; } .vaultwarden-install-guide h2 { color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 0.5em; margin-top: 1.5em; } .vaultwarden-install-guide h3 { color: #34495e; margin: 1.2em 0 0.8em; background: #f8f9fa; padding: 0.5em 0.8em; border-left: 4px solid #3498db; } .vaultwarden-install-guide pre { background: #2d2d2d; color: #f8f8f2; padding: 1em; border-radius: 4px; overflow-x: auto; font-size: 0.9em; margin: 0.8em 0; } .vaultwarden-install-guide code { font-family: "Consolas", "Monaco", monospace; } .vaultwarden-install-guide .bash::before, .vaultwarden-install-guide .nginx::before, .vaultwarden-install-guide .yaml::before { content: attr(class); display: block; background: #444; color: #aaa; padding: 0.2em 0.5em; margin: -1em -1em 1em -1em; font-size: 0.8em; border-radius: 4px 4px 0 0; } .vaultwarden-install-guide ul { padding-left: 1.5em; } .vaultwarden-install-guide li { margin: 0.3em 0; } .vaultwarden-install-guide .success-box { background: #d4edda; border: 1px solid #c3e6cb; border-left: 4px solid #28a745; padding: 1em; margin: 1em 0; border-radius: 0 4px 4px 0; } .vaultwarden-install-guide .info-box { background: #d1ecf1; border: 1px solid #bee5eb; border-left: 4px solid #17a2b8; padding: 1em; margin: 1em 0; border-radius: 0 4px 4px 0; } .vaultwarden-install-guide a { color: #3498db; text-decoration: none; } .vaultwarden-install-guide a:hover { text-decoration: underline; } </style>

Обновлено Redmine Admin 5 месяца назад · 1 изменени(я, ий)