Запуск Vaultwarden в контейнере в качестве службы systemd с использованием Podman

Запуск 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/).



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE