Ламповая self-hosted инфраструктура на Vultr

от автора

О чём, зачем и почему?

Эту небольшую заметку я решил написать после собственного опыта разворачивания личной "инфраструктуры", состоящей из нескольких приложений для повседневных дел.

Здесь я расскажу, как развернуть сервисы для контроля финансов (FireFly3), заметок и чего покрупнее (BookStack) и контроля времени, уходящего на задачи в opensource проектах или на работе (Titra) — всё это на Vultr с защитой с помощью firewall групп и доступа только с нужных ip, например, домашней статики или vpn (ещё развернём для этого Pritunl).

Vultr я выбрал, так как достаточно давно с ним работаю и уже знаю, что он может, а что нет — в моём случае он подошёл идеально.

Надеюсь, что это окажется для кого-то полезным.

Разворачиваем сервисы

Для сервисов (всех трёх) я выбрал простой инстанс на Vultr + автоматические бэкапы, так как все они не особо требовательны к ресурсам.

Прим.: Предполагается, что у вас есть свой домен с DNS, где вы можете настроить субдомены для всего ниже описанного и получения сертификатов (certbot), исходя из этого, для удобства, в статье я буду писать про personal.io, а вы представляйте личный 🙂

Прим. 2: Ещё небольшое предупреждение — я буду писать про сервисы в docker, однако, все они прекрасно разворачиваются и без контейнеров.

Финансы — FireFly3

Demo

Собственно я люблю вести фин. учёт по всем своим доходам и расходам: видеть на что вы тратите ваши деньги и как возможно, что-то оптимизировать, по-моему достаточно важно.

Для моих целей вполне подходит FireFly3 в нём вы можете отслеживать все свои счета, регулярные транзакции, долги и т.д. и т.п.

На наше счастье разработчики firefly3 сделали удобную документацию с описанием развёртывания приложения, как с помощью docker, так и без оного. Приведу свой docker-compose файл c firefly и БД для него:

version: '3.3'  services:   fireflyiii:     image: jc5x/firefly-iii:latest     volumes:       - firefly_iii_upload:/var/www/html/storage/upload     env_file:       - .env     restart: unless-stopped     ports:       - 127.0.0.1:34567:8080     depends_on:       - fireflyiiidb    fireflyiiidb:     image: yobasystems/alpine-mariadb:latest     restart: unless-stopped     env_file:       - .env.db     volumes:       - firefly_iii_db:/var/lib/mysql  volumes:    firefly_iii_upload:      driver: local    firefly_iii_db:      driver: local

Так же, весьма важен env-файл для самого сервиса, так как в нём настраиваются все базовые моменты для развёртываемого инстанса, как то: тип используемой БД, с помощью чего отправлять вам письма счастья (SMTP или MAILGUN), логи, аутентификация (если, вдруг, вам вместо стандартного eloquent понадобится LDAP), ну и доменное имя на котором будет сервис, в нашем случае настроим его на finance.personal.io. Оставляю пример этого самого env-файла (с комментами от разработчиков) на pastebin с выставленными значениями под нашу статью.

С firefly3 на этом всё, после того как мы сделаем nginx proxypass и получим сертификат вам нужно зарегистрироваться в сервисе, после чего вы сможете отключить эту возможность.

Заметки, документация и т.д. — BookStack

Demo

У меня часто возникает желание/необходимость, что-нибудь написать по работе или личное, поэтому для меня такой сервис, как BookStack показался крайне удобен — возможность создавать отдельные полки, регулировать права, наглядный markdown редактор (приложу скриншот, как пишу это именно в нём), понятная иерархия: полки-книги-листы.

Такой сервис может подойти как для личного пользования, так и для командного в небольших компаниях.

docker-compose.yml:

version: "3.1" services:   bookstack:     image: linuxserver/bookstack     container_name: bookstack     volumes:       - bookstack-volume:/config     ports:       - 127.0.0.1:34568:80     env_file:        - .env.bookstack     restart: unless-stopped     depends_on:       - bookstack_db    bookstack_db:     image: linuxserver/mariadb     container_name: bookstack_db     volumes:       - bookstack-db:/config     env_file:        - .env.db     restart: unless-stopped  volumes:   bookstack-volume:     driver: local   bookstack-db:     driver: local

Тут с предварительной конфигурацией всё намного проще, чем у firefly, так как почти всё можно настроить через web интерфейс.

.env.bookstack:

DB_HOST=bookstack_db DB_USER=bookstack DB_PASS=bookstackpassword DB_DATABASE=bookstackapp APP_URL=https://notes.personal.io

При первом входе, вам также понадобиться зарегистрировать admin юзера, но это позже.

В bookstack так же доступна аутентификация по LDAP, а так же по SAML или через социальные сети — всё это настраиваемо. Так же есть экспорт опусов в pdf и html, публичный доступ к полкам или отдельным книгам, т.е. без пользователя.

Учёт потраченного времени — Titra

Demo

У меня есть как личные, так и рабочие проекты, поэтому мне важно знать, сколько времени я потратил на ту или иную задачу. В Titra вы можете разграничить всё на разные проекты, проектные задачи, назначить стоимость вашей работы (например, за час), указать со скольки вы работаете и во сколько у вас перерыв (оплачиваемый или нет), ну и статистические отчёты за разное время тоже присутствуют с фильтрацией по отдельным проектам и т.д.

docker-compose.yml:

version: "3.1" services:   titra:     image: kromit/titra     container_name: titra     depends_on:       - mongodb     ports:       - "127.0.0.1:34569:3000"     env_file:       - .env.titra     restart: always    mongodb:     image: mongo:4.2     container_name: mongodb     restart: always     volumes:       - titra_db:/data/db  volumes:   titra_db:     driver: local

.env.titra:

ROOT_URL=https://titra.personal.io MONGO_URL=mongodb://mongodb/titra

Бонус: страница со ссылками на ваши сервисы — Homer

Demo

Чтобы не потерять ссылки на все ваши сервисы особенно, если их станет больше, лучше всего иметь страницу, которая бы показывала, где и что у вас развёрнуто. Я когда задумался об этом, выбирал между heimdall и homer, остановился на последнем, так как его легче настроить и он вполне удовлетворяет условиям поставленной задачи.

На странице Homer вы сможете настроить ссылки на ваши сервисы, разнести их по разным группам, кастомизировать их отображение (например, присвоить каждому иконку).

docker-compose.yml:

version: "3.3" services:   homer:     image: b4bz/homer:latest     volumes:       - ./assets:/www/assets     ports:       - "127.0.0.1:34570:8080"     restart: unless-stopped 

Для работы homer вам придётся создать assets директорию с файлом config.yml, где вы и укажите, что и как отображать.

Давайте первоначально напишем его таким образом:

title: "Infrastructure" subtitle: "Personal"  documentTitle: "Personal/Infrastructure" icon: "fas fa-skull-crossbones" header: true  columns: "3"  theme: default  colors:   dark:     highlight-primary: "#3367d6"     highlight-secondary: "#4285f4"     highlight-hover: "#5a95f5"     background: "#131313"     card-background: "#2b2b2b"     text: "#eaeaea"     text-header: "#ffffff"     text-title: "#fafafa"     text-subtitle: "#f5f5f5"     card-shadow: rgba(0, 0, 0, 0.4)     link-hover: "#ffdd57"  services:   - name: "Main"     icon: "fas fa-code-branch"     items:       - name: "Titra"         icon: "fas fa-clock"         subtitle: "time-tracking"         url: "https://titra.personal.io"        - name: "FireFly3"         icon: "fas fa-piggy-bank"         subtitle: "finance"         url: "https://finance.personal.io"        - name: "BookStack"         icon: "fas fa-book"         subtitle: "notes-articles-book"         url: "https://notes.personal.io"

Страница будет выглядеть так:

Разместим её на home.personal.io

Домены и сертификаты

После того, как мы всё написали и запустили нам нужно настроить nginx и попросить пару сертификатов у certbot. Я приведу пример общего для сервисов файла настройки, который можно и нужно разделить на несколько: apps.conf

Запустим nginx:

systemctl start nginx

Далее, предварительно создав необходимые A-записи в настройках DNS у вашего домена, чтобы поддомены home, notes, finance, titra ссылались на ip машины на Vultr, мы запросим с помощью certbot сертификаты Let’s Encrypt, чтобы соединение было безопасным:

certbot run --nginx

После получения сертификатов, вы можете заходить на ваши сервисы и регистрироваться.

Защищаемся

Чтобы быть уверенным, что никто не зайдёт туда, куда не следует я сделал следующее:

  1. Развернул Prtinul сервер
  2. Создал firewall группу в панели управления Vultr

Собственно, как быстро (обещают за 60 секунд) pritunl на vultr уже написано.

Я расскажу лишь, как можно быстро настроить firewall правила для vultr машины (или нескольких)

  1. Заходим на страницу ваших огненных стен

  1. Жмём плюсик и в выпавшем меню "Add firewall group".

  2. Добавляем правила, например, я решил, что лучше всего оставить открытым 22 порт, а остальные сделать доступными только из-под VPN. Например, так:

  1. Ждём, так как правила накатятся не мгновенно, а примерно за две минуты.

  2. Наслаждаемся своей непохожестью безопасностью и контролем за важными для вас данными.

ссылка на оригинал статьи https://habr.com/ru/post/532746/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *