Проект

Общее

Профиль

Установка Vaultwarden с Docker и Nginx » История » Версия 1

Redmine Admin, 25.03.2026 10:25

1 1 Redmine Admin
<div class="vaultwarden-install-guide">
2
  <h2>🔐 Установка Vaultwarden (Docker + Nginx + Certbot)</h2>
3
  
4
  <h3>Шаг 1: Установка Docker и Docker Compose</h3>
5
  <p>Vaultwarden удобнее всего запускать в контейнере.</p>
6
  
7
  <pre class="bash"><code># Обновляем пакеты
8
sudo apt update &amp;&amp; sudo apt upgrade -y
9
10
# Устанавливаем Docker
11
sudo apt install docker.io -y
12
13
# Устанавливаем плагин Docker Compose
14
sudo apt install docker-compose-plugin -y
15
16
# Добавляем пользователя в группу docker (чтобы не писать sudo перед docker)
17
sudo usermod -aG docker $USER
18
19
# Применим группу без перезагрузки
20
newgrp docker</code></pre>
21
22
  <h3>Шаг 2: Установка Nginx и Certbot</h3>
23
  <p>Nginx будет работать как обратный прокси (принимать запросы из интернета и передавать их в Vaultwarden), а Certbot получит SSL-сертификат.</p>
24
  
25
  <pre class="bash"><code>sudo apt install nginx certbot python3-certbot-nginx -y</code></pre>
26
27
  <h3>Шаг 3: Получение SSL-сертификата</h3>
28
  <p>На этом этапе Nginx должен быть запущен и доступен по порту 80.<br>
29
  Создайте временный конфиг для Nginx (чтобы Certbot мог проверить домен):</p>
30
  
31
  <pre class="bash"><code>sudo nano /etc/nginx/sites-available/vaultwarden</code></pre>
32
  
33
  <p>Вставьте следующее (замените <code>vault.example.com</code> на ваш домен):</p>
34
  
35
  <pre class="nginx"><code>server {
36
    listen 80;
37
    server_name vault.example.com;
38
39
    location / {
40
        return 200 'OK';
41
        add_header Content-Type text/plain;
42
    }
43
}</code></pre>
44
  
45
  <p>Включите сайт и перезапустите Nginx:</p>
46
  
47
  <pre class="bash"><code>sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/
48
sudo nginx -t
49
sudo systemctl restart nginx</code></pre>
50
  
51
  <p>Запустите Certbot для получения сертификата:</p>
52
  
53
  <pre class="bash"><code>sudo certbot --nginx -d vault.example.com</code></pre>
54
  
55
  <ul>
56
    <li>Введите email для уведомлений</li>
57
    <li>Согласитесь с условиями</li>
58
    <li>Выберите вариант перенаправления на HTTPS (рекомендуется вариант 2)</li>
59
  </ul>
60
  
61
  <p>✅ Certbot автоматически настроил обновление сертификатов через systemd timer.<br>
62
  Проверить можно командой: <code>sudo systemctl list-timers | grep certbot</code></p>
63
  
64
  <div class="success-box">
65
    <strong>Пример успешного вывода:</strong>
66
    <pre><code>Saving debug log to /var/log/letsencrypt/letsencrypt.log
67
Requesting a certificate for vw.saria.by
68
69
Successfully received certificate.
70
Certificate is saved at: /etc/letsencrypt/live/vw.saria.by/fullchain.pem
71
Key is saved at:         /etc/letsencrypt/live/vw.saria.by/privkey.pem
72
This certificate expires on 2026-06-22.
73
These files will be updated when the certificate renews.
74
Certbot has set up a scheduled task to automatically renew this certificate in the background.
75
76
Deploying certificate
77
Successfully deployed certificate for vw.saria.by to /etc/nginx/sites-enabled/vaultwarden
78
Congratulations! You have successfully enabled HTTPS on https://vw.saria.by</code></pre>
79
  </div>
80
81
  <h3>Шаг 4: Настройка Nginx для проксирования</h3>
82
  <p>Теперь нужно настроить Nginx так, чтобы он передавал запросы в контейнер Vaultwarden.<br>
83
  Откройте конфиг снова (Certbot мог его изменить):</p>
84
  
85
  <pre class="bash"><code>sudo nano /etc/nginx/sites-available/vaultwarden</code></pre>
86
  
87
  <pre class="nginx"><code># HTTP на порту 80 → редирект на HTTPS с портом 55641
88
server {
89
    listen 80;
90
    server_name vw.saria.by;
91
    return 301 https://$server_name:55641$request_uri;
92
}
93
94
# HTTPS на порту 55641
95
server {
96
    listen 55641 ssl http2;
97
    server_name vw.saria.by;
98
99
    # Пути к сертификатам
100
    ssl_certificate /etc/letsencrypt/live/vw.saria.by/fullchain.pem;
101
    ssl_certificate_key /etc/letsencrypt/live/vw.saria.by/privkey.pem;
102
103
    # Современные настройки SSL
104
    ssl_protocols TLSv1.2 TLSv1.3;
105
    ssl_prefer_server_ciphers on;
106
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
107
108
    # Отключаем логирование токенов в доступе (опционально, для приватности)
109
    proxy_hide_header Authorization;
110
111
    location / {
112
        proxy_pass http://127.0.0.1:8000;
113
        proxy_set_header Host $host;
114
        proxy_set_header X-Real-IP $remote_addr;
115
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
116
        proxy_set_header X-Forwarded-Proto $scheme;
117
        proxy_set_header X-Forwarded-Port 55641;  # Важно: сообщаем Vaultwarden о внешнем порте
118
        
119
        # Для веб-сокетов (уведомления)
120
        proxy_http_version 1.1;
121
        proxy_set_header Upgrade $http_upgrade;
122
        proxy_set_header Connection "upgrade";
123
    }
124
}</code></pre>
125
  
126
  <p>Примените изменения:</p>
127
  <pre class="bash"><code>sudo nginx -t &amp;&amp; sudo systemctl reload nginx</code></pre>
128
129
  <h3>Шаг 5: Обновите docker-compose.yml для Vaultwarden</h3>
130
  <p>Откройте файл:</p>
131
  <pre class="bash"><code>nano ~/vaultwarden/docker-compose.yml</code></pre>
132
  
133
  <p>Обновите секцию <code>environment</code>, особенно переменную <code>DOMAIN</code>:</p>
134
  
135
  <pre class="yaml"><code>version: '3'
136
services:
137
  vaultwarden:
138
    image: vaultwarden/server:latest
139
    container_name: vaultwarden
140
    restart: always
141
    volumes:
142
      - ${PWD}/data:/data
143
    ports:
144
      - 127.0.0.1:8000:80  # Vaultwarden внутри контейнера по-прежнему слушает порт 80
145
    environment:
146
      - DOMAIN=https://vw.saria.by:55641    # ← Обязательно укажите порт!
147
      - WEBSOCKET_ENABLED=true
148
      - SIGNUPS_ALLOWED=false
149
      - ADMIN_TOKEN=ПридумайтеОченьСложныйПароль_2026!
150
  
151
  watchtower:
152
    image: containrrr/watchtower
153
    container_name: watchtower
154
    restart: always
155
    volumes:
156
      - /var/run/docker.sock:/var/run/docker.sock
157
    command: --interval 86400 --cleanup</code></pre>
158
  
159
  <p>Перезапустите контейнеры:</p>
160
  <pre class="bash"><code>cd ~/vaultwarden
161
docker compose up -d</code></pre>
162
  
163
  <div class="info-box">
164
    💡 <strong>Важно:</strong> Переменная <code>DOMAIN</code> с указанием порта критически важна: 
165
    Vaultwarden использует её для генерации ссылок в письмах, настройки клиентов и проверки безопасности.
166
  </div>
167
168
  <h3>✅ Проверка работы</h3>
169
  <pre class="bash"><code># Проверьте, что Nginx слушает порт 55641
170
sudo ss -tlnp | grep 55641
171
172
# Протестируйте доступ локально
173
curl -kI https://127.0.0.1:55641
174
175
# Проверьте, что контейнер Vaultwarden запущен
176
docker ps | grep vaultwarden
177
178
# Посмотрите логи Nginx на ошибки
179
sudo tail -f /var/log/nginx/error.log</code></pre>
180
181
  <h3>🔧 Полезные команды</h3>
182
  <ul>
183
    <li><code>docker compose logs -f vaultwarden</code> — просмотр логов контейнера</li>
184
    <li><code>sudo certbot renew --dry-run</code> — тестовое обновление сертификата</li>
185
    <li><code>sudo systemctl status nginx</code> — статус Nginx</li>
186
    <li><code>docker exec -it vaultwarden /bin/bash</code> — вход в контейнер</li>
187
  </ul>
188
</div>
189
190
<style>
191
.vaultwarden-install-guide {
192
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
193
  line-height: 1.6;
194
  color: #333;
195
  max-width: 100%;
196
}
197
.vaultwarden-install-guide h2 {
198
  color: #2c3e50;
199
  border-bottom: 2px solid #3498db;
200
  padding-bottom: 0.5em;
201
  margin-top: 1.5em;
202
}
203
.vaultwarden-install-guide h3 {
204
  color: #34495e;
205
  margin: 1.2em 0 0.8em;
206
  background: #f8f9fa;
207
  padding: 0.5em 0.8em;
208
  border-left: 4px solid #3498db;
209
}
210
.vaultwarden-install-guide pre {
211
  background: #2d2d2d;
212
  color: #f8f8f2;
213
  padding: 1em;
214
  border-radius: 4px;
215
  overflow-x: auto;
216
  font-size: 0.9em;
217
  margin: 0.8em 0;
218
}
219
.vaultwarden-install-guide code {
220
  font-family: "Consolas", "Monaco", monospace;
221
}
222
.vaultwarden-install-guide .bash::before,
223
.vaultwarden-install-guide .nginx::before,
224
.vaultwarden-install-guide .yaml::before {
225
  content: attr(class);
226
  display: block;
227
  background: #444;
228
  color: #aaa;
229
  padding: 0.2em 0.5em;
230
  margin: -1em -1em 1em -1em;
231
  font-size: 0.8em;
232
  border-radius: 4px 4px 0 0;
233
}
234
.vaultwarden-install-guide ul {
235
  padding-left: 1.5em;
236
}
237
.vaultwarden-install-guide li {
238
  margin: 0.3em 0;
239
}
240
.vaultwarden-install-guide .success-box {
241
  background: #d4edda;
242
  border: 1px solid #c3e6cb;
243
  border-left: 4px solid #28a745;
244
  padding: 1em;
245
  margin: 1em 0;
246
  border-radius: 0 4px 4px 0;
247
}
248
.vaultwarden-install-guide .info-box {
249
  background: #d1ecf1;
250
  border: 1px solid #bee5eb;
251
  border-left: 4px solid #17a2b8;
252
  padding: 1em;
253
  margin: 1em 0;
254
  border-radius: 0 4px 4px 0;
255
}
256
.vaultwarden-install-guide a {
257
  color: #3498db;
258
  text-decoration: none;
259
}
260
.vaultwarden-install-guide a:hover {
261
  text-decoration: underline;
262
}
263
</style>