Compare commits

...

2 Commits

3 changed files with 27 additions and 9 deletions
+1
View File
@@ -17,3 +17,4 @@ helm/wrapped/charts/
*.tgz *.tgz
.coverage .coverage
htmlcov/ htmlcov/
.cursor/
+6 -7
View File
@@ -85,6 +85,7 @@ buildx-setup:
# Multi-arch release: linux/amd64 + linux/arm64 → Docker Hub manifest list. # Multi-arch release: linux/amd64 + linux/arm64 → Docker Hub manifest list.
# PUSH=1 (default): buildx --push. PUSH=0: build only (cache; cannot --load multi-arch). # PUSH=1 (default): buildx --push. PUSH=0: build only (cache; cannot --load multi-arch).
# Only tag $(FULL_IMAGE) — a bare "$(IMAGE_NAME):tag" would push to docker.io/library/...
release: env buildx-setup release: env buildx-setup
@echo "Building $(FULL_IMAGE) [$(RELEASE_PLATFORMS)]" @echo "Building $(FULL_IMAGE) [$(RELEASE_PLATFORMS)]"
@if [ "$(PUSH)" = "1" ]; then \ @if [ "$(PUSH)" = "1" ]; then \
@@ -93,20 +94,18 @@ release: env buildx-setup
--provenance=false \ --provenance=false \
--sbom=false \ --sbom=false \
-t $(FULL_IMAGE) \ -t $(FULL_IMAGE) \
-t $(IMAGE_NAME):$(IMAGE_TAG) \
--push \ --push \
.; \ . \
echo "Pushed $(FULL_IMAGE) (multi-arch)"; \ && echo "Pushed $(FULL_IMAGE) (multi-arch)" \
docker buildx imagetools inspect $(FULL_IMAGE) | sed -n '1,40p'; \ && docker buildx imagetools inspect $(FULL_IMAGE) | sed -n '1,40p'; \
else \ else \
docker buildx build \ docker buildx build \
--platform $(RELEASE_PLATFORMS) \ --platform $(RELEASE_PLATFORMS) \
--provenance=false \ --provenance=false \
--sbom=false \ --sbom=false \
-t $(FULL_IMAGE) \ -t $(FULL_IMAGE) \
-t $(IMAGE_NAME):$(IMAGE_TAG) \ . \
.; \ && echo "PUSH=0 — multi-arch built into buildx cache (not pushed, not loaded locally)"; \
echo "PUSH=0 — multi-arch built into buildx cache (not pushed, not loaded locally)"; \
fi fi
@$(MAKE) helm-package IMAGE_TAG=$(IMAGE_TAG) @$(MAKE) helm-package IMAGE_TAG=$(IMAGE_TAG)
+20 -2
View File
@@ -14,10 +14,23 @@
- RU / EN, светлая и тёмная тема - RU / EN, светлая и тёмная тема
- CAPTCHA: Cloudflare Turnstile и/или hCaptcha - CAPTCHA: Cloudflare Turnstile и/или hCaptcha
- админка: **статистика**, настройки, audit (пагинация + очистка), danger purge - админка: **статистика**, настройки, audit (пагинация + очистка), danger purge
- Docker Compose и Helm; образ на Docker Hub: [`inecs/wrapped`](https://hub.docker.com/r/inecs/wrapped) - Docker Compose и Helm; multi-arch образ (`amd64`/`arm64`) на Docker Hub: [`inecs/wrapped`](https://hub.docker.com/r/inecs/wrapped)
Ссылка для получателя: `/w/<id>#<key>` или токен `wrapped_v1.<id>.<key>`. Ключ шифрования в URL-фрагменте (`#...`) на сервер не уходит. Ссылка для получателя: `/w/<id>#<key>` или токен `wrapped_v1.<id>.<key>`. Ключ шифрования в URL-фрагменте (`#...`) на сервер не уходит.
## Что нового
Кратко по недавним доработкам UI, админки и релиза:
| Область | Что появилось |
|---------|----------------|
| **Расшифровка** | Прокрутка превью текста по вертикали и горизонтали; кнопка **Копировать** рядом со скачиванием |
| **Пароль** | Argon2-проверка *до* выдачи ciphertext; лимит попыток; пустой пароль попытку не тратит; структурированные ошибки в UI |
| **Админка** | Стартовая **Статистика** (MinIO, wraps, audit); очистка audit с подтверждением; пагинация журнала |
| **Релиз** | `make release` собирает **multi-arch** манифест `linux/amd64` + `linux/arm64` через Buildx и пушит только `inecs/wrapped:<tag>` |
Подробности — в разделах ниже (безопасность, админка, сборка образа).
## Скриншоты ## Скриншоты
Интерфейс на русском и английском, светлая и тёмная тема. Интерфейс на русском и английском, светлая и тёмная тема.
@@ -384,6 +397,7 @@ JSON Admin API: HTTP Basic (`ADMIN_USERNAME` / `ADMIN_PASSWORD`), тег OpenAPI
### Docker Hub (`make release`) ### Docker Hub (`make release`)
Сборка **multi-arch** (`linux/amd64` + `linux/arm64`) через Docker Buildx и push манифеста на Docker Hub. Сборка **multi-arch** (`linux/amd64` + `linux/arm64`) через Docker Buildx и push манифеста на Docker Hub.
Пушится только полный тег `$(RELEASE_REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)` (по умолчанию `inecs/wrapped:…`) — короткий тег вроде `wrapped:0.1.0` при `--push` ушёл бы в `docker.io/library/…` и получил бы отказ в авторизации.
```bash ```bash
docker login # пользователь inecs docker login # пользователь inecs
@@ -394,6 +408,7 @@ make release RELEASE_PLATFORMS=linux/arm64 # одна платформа
``` ```
Нужны Docker Buildx и (для cross-build) QEMU/эмуляция — на Docker Desktop обычно уже есть. Нужны Docker Buildx и (для cross-build) QEMU/эмуляция — на Docker Desktop обычно уже есть.
Первый запуск создаёт builder `wrapped-release` (`make buildx-setup` внутри `release`).
Эквивалент: Эквивалент:
@@ -405,6 +420,7 @@ docker buildx build \
--push . --push .
``` ```
После успешного push Makefile печатает краткий `imagetools inspect` (платформы в манифесте).
Образ при старте: `alembic upgrade head` + uvicorn `:8000`. Healthcheck: `GET /health`. Образ при старте: `alembic upgrade head` + uvicorn `:8000`. Healthcheck: `GET /health`.
### Git (`make push`) ### Git (`make push`)
@@ -467,7 +483,8 @@ external:
| `make logs` / `make ps` / `make restart` | Логи, статус, рестарт app | | `make logs` / `make ps` / `make restart` | Логи, статус, рестарт app |
| `make migrate` | `alembic upgrade head` | | `make migrate` | `alembic upgrade head` |
| `make revision m="msg"` | Новая alembic-ревизия | | `make revision m="msg"` | Новая alembic-ревизия |
| `make release` | Multi-arch образ (amd64+arm64) на Docker Hub (+ Helm package) | | `make release` | Multi-arch образ (amd64+arm64) Docker Hub (`inecs/wrapped`) + Helm package |
| `make buildx-setup` | Создать/выбрать Buildx builder `wrapped-release` (вызывается из `release`) |
| `make push` | git add → многострочный commit (Ctrl-D) → push | | `make push` | git add → многострочный commit (Ctrl-D) → push |
| `make helm-lint` / `make helm-package` | Helm | | `make helm-lint` / `make helm-package` | Helm |
@@ -479,6 +496,7 @@ external:
- PostgreSQL 16+ - PostgreSQL 16+
- S3-совместимое хранилище (MinIO и т.п.) - S3-совместимое хранилище (MinIO и т.п.)
- Docker Compose v2 - Docker Compose v2
- для `make release`: Docker Buildx (+ QEMU для cross-build arm64 на amd64 и наоборот)
--- ---