Запуск Vaultwarden в контейнере в качестве службы systemd с использованием Podman
1 июня 2022 г.Что такое Хранитель Хранилища?
Vaultwarden — это альтернативная реализация API Bitwarden server, написанная на Rust. Он совместим с официальными клиентами Bitwarden и является идеальным выбором для собственного хранилища. То, что он написан на Rust, делает его легким, в отличие от оригинального Bitwarden, который написан на C # и довольно требователен к ресурсам.
Почему Подман?
Docker не работает должным образом с systemd. Проблема в том, что systemd следит не за докер-контейнером, а за докер-клиентом. Это означает, что если контейнер выйдет из строя, но клиент будет запущен, systemd не перезапустит контейнер. Это вызвано клиент-серверной архитектурой Dockers. Для этого есть обходной путь, но использование нативного решения кажется более разумным.
[Podman] (https://docs.podman.io/en/latest/) — это инструмент с открытым исходным кодом, без демона, встроенный в Linux инструмент для запуска контейнеров. Он был разработан в соответствии со стандартами OCI и отлично работает с systemd. Из-за своей природы без демона он позволяет запускать контейнеры под произвольным пользователем.
Установить Подман
Я покажу, как установить podman в Ubuntu 20.10, для других дистрибутивов обратитесь к [официальному руководству] (https://podman.io/getting-started/installation):
``` ударить
судо подходящее обновление
sudo apt установить podman
Запустить Хранителя Хранилища
Моя обычная установка включает в себя включенную панель администратора и отключенную регистрацию новых пользователей. Чтобы включить панель администратора, мы должны передать переменную среды ADMIN_TOKEN. Для этого значения рекомендуется использовать длинную случайную строку. Мы можем сгенерировать его с помощью команды openssl rand
:
``` ударить
openssl ранд-base64 48
Еще одна вещь, которую нужно сделать, прежде чем мы запустим наше хранилище, — это создать каталог данных. В этом каталоге Vaultwarden хранит свою конфигурацию и базу данных:
``` ударить
sudo mkdir/vw-данные
Теперь все готово для запуска Vaultwarden:
``` ударить
sudo podman pull vaultwarden/server: последний
sudo podman run -d --name vaultwarden.pod -e ADMIN_TOKEN=ВАШ_СЛУЧАЙНЫЙ_TOKEN_GOES_HERE -v /vw-data/:/data/ -p 8000:80 vaultwarden/сервер:последняя
Создать системный сервис
Создайте служебный файл в /etc/systemd/system/vaultwarden.pod.service
:
``` ударить
sudo touch /etc/systemd/system/vaultwarden.pod.service
Мне нравится иметь суффикс .pod
, чтобы отличить собственные службы от контейнерных служб.
Поместите в сервисный файл следующее содержимое:
[Ед. изм]
Description=Vaultwarden/Bitwarden Server (Rust Edition)
Документация = https://github.com/dani-garcia/vaultwarden
Хочет=syslog.service
[Обслуживание]
Перезапуск = при сбое
ExecStart=/usr/bin/podman start -a vaultwarden.pod
ExecStop=/usr/bin/podman остановить vaultwarden.pod
[Установить]
WantedBy=многопользовательская.цель
Вот несколько вещей, на которые стоит обратить внимание:
Restart=on-failure
указывает перезапускать службу только тогда, когда она завершается с ненулевым кодом. Это позволяет нам остановить службу с помощью команды «podman stop», а также команды «systemctl».
- Для сохранения логов контейнера в syslog у нас есть
podman start -a
. Опция-a
указывает на присоединение STDOUT и STDERR контейнера.
WantedBy
необходим для запуска нашего контейнера при загрузке системы. Опцияmulti-user.target
в основном означает, что служба должна быть запущена, когда все сетевые службы работают и система готова принимать входы в систему. Если вы опустите параметрWantedBy
, ваша служба НЕ запустится при загрузке.
- Опция
Wants=syslog.service
сообщает, что syslog должен запускаться при запуске нашего сервиса. Однако это слабое требование, и служба все равно запустится, если системный журнал не запустится. Другими словами, мы хотели бы иметь логи, но это не обязательно для нашего сервиса.
Перезагрузите демон:
``` ударить
sudo systemctl демон-перезагрузка
И проверьте статус Vaultwarden:
``` ударить
sudo systemctl статус vaultwarden.pod
● vaultwarden.pod.service — сервер Vaultwarden/Bitwarden (Rust Edition)
Загружено: загружено (/etc/systemd/system/vaultwarden.pod.service; отключено; предустановка поставщика: включена)
Активно: активно (работает) с чт 26 мая 2022 г., 15:25:08 UTC; 1 день 20ч назад
Документы: https://github.com/dani-garcia/vaultwarden
Основной PID: 19461 (подман)
Заданий: 11 (лимит: 1112)
Память: 26,9 Мб
Группа CG: /system.slice/vaultwarden.pod.service
├─19461 /usr/bin/podman start -a vaultwarden.pod
└─19574 /usr/libexec/podman/conmon --api-version 1 -c e2a6a794ddf8bb74308a9f64b98871913f6a46a8370c921dcb353f5db721cea0 -u e2a6a794ddf8bb74308a9f64b98871913f6a46a8370c921dcb353f5db721cea0 -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/e2a6a7>
Теперь вы можете остановить/запустить службу Vaultwarden:
``` ударить
sudo systemctl остановить vaultwarden.pod
sudo systemctl запустить vaultwarden.pod
Ранее опубликовано [здесь] (https://atabakoff.com/how-to-run-vaultwarden-in-podman-as-a-systemd-service/).
Оригинал