Add uv example (#30)

Co-authored-by: Fedor Batonogov <f.batonogov@yandex.ru>
This commit is contained in:
github-actions[bot]
2024-12-23 17:33:29 +03:00
committed by GitHub
parent a998a1bfdb
commit ea0d72d879
17 changed files with 1950 additions and 130 deletions

View File

@@ -1,133 +1,20 @@
# Docker
## Описание приложения
## Blue-green deployment
Простой веб сервис написанный на **Go**, возвращающий имя узла.
Сине-зеленое развертывание — это стратегия развертывания, при которой вы создаете два отдельных, но идентичные среды.
Одна среда (синяя) использует текущую версию приложения и одна среда (зеленая) использует новую версию приложения.
Использование синего/зеленого развертывания стратегия повышает доступность приложений
и снижает риск развертывания за счет упрощения процесс отката в случае сбоя развертывания.
После завершения тестирования на зеленом среда, трафик активных приложений направляется в зеленую среду и синюю среда устарела.
Сервис можно запустить несколькими способами.
[Blue-green deployment](./blue-green-deployment/) - это программная платформа для быстрой сборки, отладки и развертывания приложений с помощью **контейнеров**.
### Локальный запуск
## uv
Сборка приложения:
Чрезвычайно быстрый менеджер пакетов и проектов Python, написанный на Rust.
```sh
go build main.go
```
Один инструмент для замены **pip**, **pip-tools**, **pipx**, **poetry**, **pyenv**, **twine**, **virtualenv**, и многое другое.
Запуск
```sh
./main
```
Вывод
```output
Сервер запущен на порту 8080...
```
Проверка
```sh
curl localhost:8080
```
Вывод
```output
Имя узла: MacBook-Pro-Fedor.local
```
### Запуск в контейнере
```sh
docker build -t test . && docker run --hostname my_container --publish 8080:8080 test
```
Вывод
```output
Сервер запущен на порту 8080...
```
Проверка
```sh
curl localhost:8080
```
Вывод
```output
Имя узла: my_container
```
### Запуск при помощи docker compose
Запуск
```sh
docker compose --profile blue up --wait --remove-orphans --scale web-blue=3
```
Вывод
```output
✔ Network docker_default Created
✔ Container docker-web-blue-1 Healthy
✔ Container docker-nginx-proxy-1 Healthy
✔ Container docker-web-blue-3 Healthy
✔ Container docker-web-blue-2 Healthy
```
Проверка
Поскольку запущено несколько реплик сервиса, то при повторной проверке мы можем увидеть разное имена узлов
```sh
declare -A responses
count=0
while [ ${#responses[@]} -lt 3 ]; do
response=$(curl -s localhost:8080)
if [[ -z "${responses[$response]}" ]]; then
responses["$response"]=1
count=$((count + 1))
echo "Уникальный ответ $count: $response"
fi
done
```
Вывод
```output
Уникальный ответ 1: Имя узла: eeec60605b3c
Уникальный ответ 2: Имя узла: 1a0e8d8f0d64
Уникальный ответ 3: Имя узла: d5822762eab6
```
### Сине-зеленое развертывание
Запуск
```sh
bash ./deploy.sh
```
Вывод
```output
Список контейнеров
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-nginx-proxy-1 nginxproxy/nginx-proxy:1.6.2-alpine "/app/docker-entrypo…" nginx-proxy 22 seconds ago Up 22 seconds (healthy) 0.0.0.0:80->80/tcp
docker-web-green-1 docker-web-green "./main" web-green 6 seconds ago Up 6 seconds (healthy) 8080/tcp
docker-web-green-2 docker-web-green "./main" web-green 6 seconds ago Up 6 seconds (healthy) 8080/tcp
docker-web-green-3 docker-web-green "./main" web-green 6 seconds ago Up 6 seconds (healthy) 8080/tcp
Журналы запуска web-green
web-green-3 | Сервер запущен на порту 8080...
web-green-2 | Сервер запущен на порту 8080...
web-green-1 | Сервер запущен на порту 8080...
```
[Проверка](README.md#L83)
[uv](./uv/)
[Официальный GitHub репозиторий](https://github.com/astral-sh/uv)