Русский
Русский
English
Статистика
Реклама

Ламповая 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/mysqlvolumes:   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-stoppedvolumes:  bookstack-volume:    driver: local  bookstack-db:    driver: local

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


.env.bookstack:


DB_HOST=bookstack_dbDB_USER=bookstackDB_PASS=bookstackpasswordDB_DATABASE=bookstackappAPP_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/dbvolumes:  titra_db:    driver: local

.env.titra:


ROOT_URL=https://titra.personal.ioMONGO_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: truecolumns: "3"theme: defaultcolors:  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. Наслаждаемся своей непохожестью безопасностью и контролем за важными для вас данными.


Источник: habr.com
К списку статей
Опубликовано: 13.12.2020 06:19:29
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Настройка linux

Open source

It-инфраструктура

Devops

Облачные сервисы

Self-development

Self-hosted

Finance

Notes

Vultr

Pritunl

Vpn

Инфраструктура

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru