🔐 Установка 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— вход в контейнер
Обновлено Redmine Admin 5 месяца назад · 1 изменени(я, ий)