flask-htmx-board1/README.md

215 lines
5.8 KiB
Markdown
Raw Normal View History

2023-07-01 20:29:27 +10:00
# Table of Contents
2023-07-01 21:36:45 +10:00
1. [Локальная сборка и запуск ](#локальная-сборка-и-запуск)
2023-07-01 21:04:18 +10:00
1. [Логика доступа к контенту ](#логика-доступа-к-контенту)
1. [Логика деплоя в куб по коммиту ](#логика-деплоя-в-куб-по-коммиту)
1. [Общая схема отдельного приложения](#логика-деплоя-в-куб-по-коммиту)
1. [Логика работы мониторинга](#логика-работы-мониторинга)
2023-07-01 20:29:27 +10:00
2023-07-01 22:04:35 +10:00
Вообще, суть такова:
2023-07-01 21:04:18 +10:00
2023-07-01 22:04:35 +10:00
Мы берём фласк, кидаем в докер-образ, далее контейнер педалим в кубернетес в деплоймент, соответствующий ветке (мастер/дев) с 2-3 подами на деплоймент. Всё это должен уметь делать CI/CD
2023-07-01 20:29:27 +10:00
2023-07-01 21:04:18 +10:00
Далее возможно добавление в схему волта
2023-07-01 20:29:27 +10:00
2023-07-01 21:36:45 +10:00
Также нужна будет схема федерализации борд
----
## Локальная сборка и запуск
[наверх](#table-of-contents)
2023-07-01 22:04:35 +10:00
Запуск элементарный. Единственный момент - нужно предварительно заполнить локальный файл с переменными где лежат пароли, хосты, и т.д.
2023-07-01 21:36:45 +10:00
Локальный запуск независим от деплойментов.
```shell
git clone https://git.vdk2ch.ru/vdk2ch/flask-htmx-board1.git
cd flask-htmx-board1
# если нужна виртуальная среда
python -m venv venv
## линус
. ./venv/bin/activate
## вин
./venv/Scripts/Activate.ps1
# ставим зависимости
pip install -r reqs.txt
# запускаем приложение
python app.py
```
2023-07-01 20:29:27 +10:00
----
## Логика доступа к контенту
2023-07-01 21:04:18 +10:00
[наверх](#table-of-contents)
2023-07-01 22:04:35 +10:00
Попадаем на сервер, где nginx отсылает запрос в куб. Там ингресс закидывает его на деплоймент соответственно доменному имени и после отвечают свободные поды. Когда надо, поды ходят в постгрес и минио.
2023-07-01 20:29:27 +10:00
```mermaid
stateDiagram-v2
state USER
state inet <<join>>
state Nginx
user --> inet : internet
inet --> Nginx : router
state Kube {
NginxIngress
lbServiceMaster
lbServiceDev
state DeploymentMaster {
2023-07-01 21:04:18 +10:00
state "app" as p1
state "app" as p2
2023-07-01 20:29:27 +10:00
}
state DeploymentDev {
2023-07-01 21:04:18 +10:00
state "app" as p1d
state "app" as p2d
2023-07-01 20:29:27 +10:00
}
}
Nginx --> NginxIngress : *.board.vdk2ch.ru, www.vdk2ch.ru
NginxIngress --> lbServiceMaster : master.board.vdk2ch.ru
NginxIngress --> lbServiceDev : dev.board.vdk2ch.ru
lbServiceMaster --> DeploymentMaster
lbServiceMaster --> DeploymentMaster
lbServiceDev --> DeploymentDev
lbServiceDev --> DeploymentDev
state Minio
state Postgresql
state all_join <<join>>
p1 --> all_join
p2 --> all_join
p1d --> all_join
p2d --> all_join
2023-07-01 21:04:18 +10:00
2023-07-01 20:29:27 +10:00
all_join --> Postgres : данные с БД
all_join --> Minio : статика
```
----
## Логика деплоя в куб по коммиту
2023-07-01 21:04:18 +10:00
[наверх](#table-of-contents)
2023-07-01 20:29:27 +10:00
2023-07-01 22:04:35 +10:00
Да просто триггерим дев- или мастер-пайплайн, далее дрон локально собирает актуальный докер-образ и обновляет его версию в деплойменте куба.
2023-07-01 20:29:27 +10:00
```mermaid
stateDiagram-v2
2023-07-01 21:04:18 +10:00
committer --> Git
Git --> Drone
state "pipeline-${branch}" as pm {
Runner --> Docker : create ${branch} image with new files
Docker --> Kube : ${branch} deploy with new image
}
state branch_fork <<fork>>
Drone --> branch_fork : ветка репо
branch_fork --> pm
```
----
## Общая схема отдельного приложения
[наверх](#table-of-contents)
2023-07-01 22:04:35 +10:00
Логика работы локально идентична с кубом - получаем реквест и пытаемся обслужить с базы и минио.
2023-07-01 21:04:18 +10:00
```mermaid
stateDiagram-v2
User
state inet <<fork>>
User --> inet : дайте борду, запишу свои посты, картинки итд
state Flask {
hmtx : htmx templates
static_files : flask static
}
inet --> Flask
Flask --> Postgres : посты
Flask --> Minio : картинки и шебм
```
----
## Логика работы мониторинга
[наверх](#table-of-contents)
2023-07-01 21:36:45 +10:00
2023-07-01 22:04:35 +10:00
Да, собственно, собираем логи в локи, а метрики в пром, далее дефолтным путём получаем алерты и дашборды. Внутри куба поды смотрятся на лайфнесс, рединесс и т.д., чтобы нормально отслеживать деплои.
2023-07-01 21:36:45 +10:00
2023-07-01 21:04:18 +10:00
```mermaid
stateDiagram-v2
App
state enter_monitoring <<fork>>
2023-07-01 21:36:45 +10:00
App --> Kube : liveness, readiness probes
2023-07-01 21:04:18 +10:00
App --> enter_monitoring
enter_monitoring --> Prometheus : metrics
Prometheus --> Grafana
enter_monitoring --> Loki : logs
Loki --> Grafana
state admini {
User : Наш слон
}
Prometheus --> Alertmanager
2023-07-01 22:30:06 +10:00
Loki --> Alertmanager
2023-07-01 21:04:18 +10:00
state alerts_join <<join>>
state dash_join <<join>>
Alertmanager --> alerts_join
Grafana --> alerts_join
alerts_join --> User : алерты
2023-07-01 20:29:27 +10:00
2023-07-01 21:04:18 +10:00
Grafana --> dash_join
dash_join --> User : дашборды
2023-07-01 20:29:27 +10:00
```