diff --git a/README.md b/README.md index 75db307..d237a2a 100644 --- a/README.md +++ b/README.md @@ -228,3 +228,7 @@ AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... bash hardcore_test.sh Краткий пользовательский summary лежит в файле `BENCHMARK-COMPARISON.md`. Ключевой вывод: shared-SQS показывает конкурентоспособные результаты относительно Yandex MQ и покрывает полный набор заявленных пользовательских сценариев. + +## Self-hosted — развернуть у себя + +Если хотите запустить shared-SQS в собственном Kubernetes-кластере — см. [deploy/README.md](deploy/README.md). diff --git a/deploy/README.md b/deploy/README.md new file mode 100644 index 0000000..283a828 --- /dev/null +++ b/deploy/README.md @@ -0,0 +1,151 @@ +# shared-sqs — Self-hosted Helm Chart + +Этот Helm-чарт разворачивает [shared-sqs](https://gitea.services.ngcloud.ru/Nail/shared-SQS) — AWS SQS-совместимый сервис очередей — в вашем Kubernetes-кластере. + +После деплоя клиенты подключаются через стандартный AWS SDK / CLI, меняя только `endpoint_url` на ваш домен. + +--- + +## Что потребуется заранее + +| Компонент | Зачем | Примечание | +|-----------|-------|------------| +| Kubernetes кластер | Платформа | Любой вариант: k3s, EKS, GKE, bare-metal | +| **Redis ≥ 6** | Хранит все очереди и сообщения | Внешний или задеплоенный в кластер | +| **Ingress NGINX** | Принимает внешние HTTP/HTTPS запросы | `helm install ingress-nginx ingress-nginx/ingress-nginx` | +| **cert-manager** | Автоматически выпускает TLS-сертификат | `helm install cert-manager jetstack/cert-manager --set installCRDs=true` | +| **DNS-запись** | Связывает ваш домен с кластером | A-запись домена → External IP вашего ingress-контроллера | +| PostgreSQL *(опционально)* | Биллинг — учёт операций | Если не нужен — `billing.enabled: false` | + +Узнать External IP ingress-контроллера: +```bash +kubectl get svc -n ingress-nginx ingress-nginx-controller +# Смотрите колонку EXTERNAL-IP +``` + +--- + +## Установка + +### 1. Клонируйте репозиторий + +```bash +git clone https://gitea.services.ngcloud.ru/Nail/shared-SQS.git +cd shared-SQS +``` + +### 2. Отредактируйте `deploy/values.yaml` + +Обязательно заполните: + +```yaml +redis: + addr: "ваш-redis-хост:6379" + password: "ваш-redis-пароль" + +admin: + token: "придумайте-любой-токен" # например: openssl rand -hex 20 + +ingress: + host: "sqs.ваш-домен.com" +``` + +Если PostgreSQL не нужен — оставьте `billing.enabled: false`. + +### 3. Задеплойте + +```bash +helm install shared-sqs ./deploy -n shared-sqs --create-namespace +``` + +### 4. Проверьте что всё поднялось + +```bash +# Под должен быть Running и Ready +kubectl get pods -n shared-sqs + +# Сервис должен ответить OK +curl https://sqs.ваш-домен.com/health +``` + +--- + +## Параметры values.yaml + +| Параметр | Описание | Пример | +|----------|----------|--------| +| `namespace` | Kubernetes namespace | `shared-sqs` | +| `image.tag` | Версия образа | `v0.1.24` | +| `redis.addr` | Адрес Redis в формате `host:port` | `redis.default.svc:6379` | +| `redis.user` | Redis-пользователь (обычно `default`) | `default` | +| `redis.password` | Пароль Redis | — | +| `admin.token` | Токен для Admin API (`/admin/*`) | любая строка | +| `seedDemo` | Создать demo-тенанта при старте | `true` / `false` | +| `resources` | CPU и Memory лимиты пода | см. defaults | +| `ingress.enabled` | Включить Ingress | `true` | +| `ingress.className` | Ingress класс | `nginx` | +| `ingress.host` | Домен сервиса | `sqs.example.com` | +| `ingress.annotations` | Аннотации (cert-manager, timeouts) | см. defaults | +| `ingress.tls.enabled` | Включить TLS через cert-manager | `true` | +| `ingress.tls.secretName` | Имя Secret для TLS-сертификата | `shared-sqs-tls` | +| `billing.enabled` | Включить запись статистики в PostgreSQL | `false` | +| `billing.postgres.*` | Параметры подключения к PostgreSQL | — | + +--- + +## Admin API — создание тенантов + +После деплоя сервис готов принимать SQS-запросы, но для этого нужен тенант с credentials. + +### Создать тенанта + +```bash +curl -s -X POST https://sqs.ваш-домен.com/admin/tenants \ + -H "Authorization: Bearer ВАШ_ADMIN_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"id": "my-tenant"}' +``` + +Ответ: +```json +{ + "id": "my-tenant", + "access_key": "SSAK-...", + "secret_key": "..." +} +``` + +> **Сохраните `secret_key`** — он показывается только один раз. + +### Использовать credentials в AWS CLI + +```bash +export AWS_ACCESS_KEY_ID="SSAK-..." +export AWS_SECRET_ACCESS_KEY="..." +export AWS_DEFAULT_REGION="us-east-1" +ENDPOINT="--endpoint-url https://sqs.ваш-домен.com" + +aws sqs create-queue --queue-name my-queue $ENDPOINT +aws sqs send-message --queue-url "..." --message-body "Hello" $ENDPOINT +``` + +--- + +## Обновление + +```bash +helm upgrade shared-sqs ./deploy -n shared-sqs +``` + +## Удаление + +```bash +helm uninstall shared-sqs -n shared-sqs +kubectl delete namespace shared-sqs +``` + +--- + +## Полная документация + +Использование сервиса (AWS CLI, boto3, Node.js) — в [основном README](../README.md).