Rust/Axum HTTP-сервер, Dockerfile, Woodpecker CI pipeline, Kubernetes-манифесты для деплоя на k3s. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
57 lines
2.0 KiB
Markdown
57 lines
2.0 KiB
Markdown
# bcard
|
|
|
|
Персональная визитная карточка [mikhailkilin.ru](https://mikhailkilin.ru).
|
|
|
|
## Стек
|
|
|
|
- **Rust** + [Axum](https://github.com/tokio-rs/axum) — HTTP-сервер
|
|
- **Tokio** — асинхронный рантайм
|
|
- **Docker** — multi-stage сборка (builder на `rust:1.75`, финальный образ на `debian:bookworm-slim`)
|
|
- **Woodpecker CI** — автоматическая сборка и пуш Docker-образа в реестр `git.mikhailkilin.ru`
|
|
|
|
## Структура
|
|
|
|
```
|
|
.
|
|
├── src/
|
|
│ └── main.rs # HTTP-сервер, отдаёт HTML на /
|
|
├── k8s/
|
|
│ └── bcard.yaml # Kubernetes-манифест (Namespace, Deployment, Service, Ingress)
|
|
├── Cargo.toml # Зависимости: axum, tokio
|
|
├── Dockerfile # Multi-stage сборка
|
|
└── .woodpecker.yml # CI-пайплайн
|
|
```
|
|
|
|
## Запуск локально
|
|
|
|
```bash
|
|
cargo run
|
|
```
|
|
|
|
Сервер стартует на `http://0.0.0.0:3000`.
|
|
|
|
## Сборка и запуск через Docker
|
|
|
|
```bash
|
|
docker build -t bcard .
|
|
docker run -p 3000:3000 bcard
|
|
```
|
|
|
|
## CI/CD и деплой
|
|
|
|
При пуше в репозиторий:
|
|
|
|
1. **Woodpecker CI** собирает Docker-образ и пушит в `git.mikhailkilin.ru/killingdruid/bcard:latest`
|
|
2. **ArgoCD** подхватывает манифесты из `k8s/` и деплоит на кластер
|
|
|
|
Для работы пайплайна в настройках репозитория Woodpecker должны быть заданы секреты `docker_username` и `docker_password`.
|
|
|
|
## Инфраструктура
|
|
|
|
Сервис разворачивается на K3s-кластере (`k8s/bcard.yaml`):
|
|
|
|
- **Namespace:** `bcard`
|
|
- **Deployment:** 1 реплика, образ из Gitea-реестра
|
|
- **Service:** ClusterIP, порт 80 → 3000
|
|
- **Ingress:** `mikhailkilin.ru`, TLS через cert-manager (Let's Encrypt)
|