Проект

Общее

Профиль

Установка Vaultwarden с Docker и Nginx » Установка Vaultwarden с Docker и Nginx.txt

Redmine Admin, 25.03.2026 10:28

 
Шаг 1: Установка Docker и Docker Compose
Vaultwarden удобнее всего запускать в контейнере.

bash
# Обновляем пакеты
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.

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


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

bash
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:

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

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

bash
sudo certbot --nginx -d vault.example.com


Введите email для уведомлений.
Согласитесь с условиями.
Выберите вариант перенаправления на HTTPS (рекомендуется вариант 2).

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

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
root@vw:/home/ub# sudo certbot --nginx -d vw.saria.by
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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
root@vw:/home/ub#
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

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

bash
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";
}
}
#########################################################


Примените изменения:
bash
sudo nginx -t && sudo systemctl reload nginx


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

bash
nano ~/vaultwarden/docker-compose.yml

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


#########################################################
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
volumes:
- ${PWD}//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
#########################################################



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

bash
cd ~/vaultwarden
docker compose up -d

💡 Переменная DOMAIN с указанием порта критически важна: Vaultwarden использует её для генерации ссылок в письмах, настройки клиентов и проверки безопасности.


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

bash
# Проверьте, что 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
    (1-1/1)