Установка Vaultwarden в Docker
Установка Vaultwarden
У вас в системе уже должен быть установлен Docker и Docker compose, как это устанавливается я описывал в статьях:
- Первое знакомство с Docker — установка и базовые понятия .
- Docker Compose — установка и базовое использование .
Во-первых, создадим каталог для нашего проекта:
$ mkdir -p vaultwarden/data && \
cd vaultwarden && \
chmod 700 data && \
sudo chown root:root data/
В нём создадим файл с переменными окружениями .env. Он будет использоваться для настройки контейнеров. Вот его содержимое:
# === Основное ===
DOMAIN=https://ваш_домен/
ROCKET_PORT=8080
ROCKET_ADDRESS=0.0.0.0 # внутри контейнера будем слушать не только localhost
WEBSOCKET_ENABLED=true # включаем для клиентов
# === Безопасность ===
ADMIN_TOKEN='токен'
SIGNUPS_ALLOWED=true # для создания первого пользователя, после поменять на false
INVITATIONS_ALLOWED=true
SHOW_PASSWORD_HINT=false
# === Логи ===
LOG_LEVEL=warn
EXTENDED_LOGGING=false
# === Вложения ===
ATTACHMENTS_ALLOWED=true
ATTACHMENTS_LIMIT_MB=50
# === База данных (SQLite по умолчанию) ===
# DATABASE_URL не указываем → будет /data/db.sqlite3
DATABASE_URL=mysql://vaultwarden:12345678@db:3306/vaultwarden
MYSQL_ROOT_PASSWORD=12345678
MYSQL_DATABASE=vaultwarden
MYSQL_USER=vaultwarden
MYSQL_PASSWORD=12345678
- Обратите внимание:
- Подставьте ваш домен.
- Сгенерируйте токен:
sudo docker run --rm -it vaultwarden/server /vaultwarden hash. Токен нужно вставить в одинарные кавычки, для экранирования. - Я буду использовать базу данных MySQL. Если хотите оставить SQLite, то закомментируйте все поля в секции
===База данных===. - Измените пароли для базы данных на более сложные. В примере я использую:
12345678.
Создадим docker-compose.yml:
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
env_file:
- .env
volumes:
- ./data:/data:rw
depends_on:
- db
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./tls:/etc/caddy/tls:ro
- caddy_data:/data
- caddy_config:/config
depends_on:
- vaultwarden
db:
image: mariadb:11
container_name: vaultwarden-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- vault_db:/var/lib/mysql
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD-SHELL", "mariadb -uroot -p$$MYSQL_ROOT_PASSWORD -e 'SELECT 1'"]
interval: 10s
timeout: 5s
retries: 5
volumes:
caddy_data:
caddy_config:
vault_db:
- Я создаю три сервиса:
- vaultwarden — сервер для хранения паролей и других секретов;
- caddy — обратный прокси сервер;
- db — база данных mariadb.
- Если вы используете SQLite, то закомментируйте секцию dp.
- Некоторые опции разберу:
restart: unless-stopped— контейнер будет автоматически перезапускаться, если упадёт.env_file: - .env— мы указываем для сервисаvaultwarden, чтобы переменные попали в контейнер без передачи их в виде${ПЕРЕМЕННАЯ}.security_opt: - no-new-privileges:true— опция безопасности, запрещает повышение прав в контейнере (защита от setuid бинарников в контейнере).cap_drop: - ALL— убирает все дополнительные привилегии (capabilities) у контейнера.command: > --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci— устанавливает кодировку для MariaDB и правила сравнения строк (collation).
Подготовка Caddy
Создадим Caddyfile — это конфиг для Caddy:
{
# Отключаем автоматический HTTPS (Let's Encrypt), так как используем свой сертификат
auto_https off
}
https://ваш_домен {
tls /etc/caddy/tls/cert.pem /etc/caddy/tls/key.pem
reverse_proxy vaultwarden:8080
}
- Обратите внимание:
- Подставьте ваш домен.
- Я использую самоподписанный сертификат для упрощения статьи. Для рабочего сервера лучше использовать сертификаты от Let’s Encrypt.
Создадим самоподписанный сертификат:
$ mkdir tls/
$ openssl genrsa -out tls/key.pem 2048
$ openssl req -new -x509 -sha256 \
-key tls/key.pem \
-out tls/cert.pem \
-days 3650 \
-subj "/CN=ваш_домен" -addext "subjectAltName = DNS:ваш_домен"
- Подставьте ваш домен.
Пришло время запустить наши сервисы:
$ sudo docker compose up --build -d
[+] up 7/7
✔ Network vaultwarden_default Created 0.0s
✔ Volume vaultwarden_caddy_config Created 0.0s
✔ Volume vaultwarden_vault_db Created 0.0s
✔ Volume vaultwarden_caddy_data Created 0.0s
✔ Container vaultwarden-db Started 0.6s
✔ Container vaultwarden Started 0.9s
✔ Container caddy Started 1.5s
Создание пользователей
Откроем только что созданный Vaultwarden в браузере: https://ваш_домен/. Так как у нас самоподписанный сертификат, придётся подтвердить переход на сайт.

Регистрируемся, нажав: Создать аккаунт. Здесь нужно будет ввести:
- свой email,
- имя,
- и придумать пароль.
Таким образом можно будет сделать нескольких пользователей. После создания всех необходимым пользователей, уберём возможность регистрации новых. Для этого опять правим файл .env:
SIGNUPS_ALLOWED=false
Затем перезапустим все сервисы:
$ sudo docker compose down
$ sudo docker compose up --build -d
Если понравилась статья, подпишись на мой канал в VK или Telegram .