Kamal을 활용한 Basecamp Fizzy 배포 및 아키텍처 분석

Basecamp의 Fizzy 애플리케이션을 Kamal을 활용하여 프로덕션 환경에 배포하고, 메인 브랜치와 분리된 프로덕션 브랜치로 변경 사항을 관리하는 과정을 상세히 설명합니다.

🔗 원문 보기

Kamal을 활용한 Basecamp Fizzy 배포 및 아키텍처 분석

Basecamp의 Fizzy 애플리케이션을 Kamal을 활용하여 프로덕션 환경에 배포하고, 메인 브랜치와 분리된 프로덕션 브랜치로 변경 사항을 관리하는 과정을 상세히 설명합니다.

Ruby-News

Multi-Tenancy: un'applicazione, molti clienti

Pillar article sulla Multi-Tenancy Architecture: come servire più clienti con una singola istanza applicativa, strategie di isolamento e trade-off.

Continua a leggere su iadicola.it: https://iadicola.it/articoli/multi-tenancy-applicazione-molti-clienti

#MultiTenant #MultiTenancy #SaaS

Как я реализовал передачу диалога из ИИ-консультанта сайта в MAX

Представьте: клиент зашел на сайт в полночь. Менеджер спит. Утром клиент уже забыл о вас и купил у конкурента. Обычный чат-бот не спасает: он либо тупой, либо безумно дорогой, либо хранит данные за океаном. Я создал решение, которое решает эту проблему раз и навсегда.

https://habr.com/ru/articles/1045412/

#AI #чатботы #MAX #Python #FastAPI #WebSocket #multitenancy

Как я реализовал передачу диалога из ИИ-консультанта сайта в MAX

Всё началось с простого вопроса: почему малый бизнес теряет клиентов ночью? Клиент заходит на сайт в 23:00, пишет в чат — и уходит. Потому что менеджер спит. Утром менеджер видит сообщение,...

Хабр

🚀 New blog post + django-rls-tenants 1.1.0 is out!
TL;DR: PostgreSQL RLS policies can't use your indexes because current_setting() isn't leakproof. The query planner falls back to sequential scans and applies tenant filtering row-by-row. On large tables, this hurts.

v1.1 fixes this by adding automatic ORM-level WHERE tenant_id = X alongside RLS - so Postgres uses your composite indexes for the fast path while RLS still enforces isolation as a safety net.

Also in this release:
→ select_related() now propagates tenant filters across joins
→ threading.local replaced with contextvars (ASGI-safe)
→ Superuser detection at startup (RLS is silently bypassed otherwise!)
→ Better exception handling in middleware
→ CASE WHEN policy rewrite for cleaner evaluation
Full write-up: https://dev.to/dvoraj75/postgresql-rls-is-fail-closed-but-is-it-fast-making-django-rls-tenants-index-friendly-2j18
GitHub: https://github.com/dvoraj75/django-rls-tenants
#Django #PostgreSQL #Python #MultiTenancy #RLS #OpenSource

PostgreSQL RLS Is Fail-Closed, But Is It Fast? Making django-rls-tenants Index-Friendly

RLS gives you database-enforced tenant isolation. But PostgreSQL's query planner can't push RLS policies into index scans. Here's how django-rls-tenants 1.1 fixes that.

DEV Community

Your Django ORM protects tenant data. Your raw SQL doesn't. 😬

That's why I built django-rls-tenants — multitenancy powered by PostgreSQL Row-Level Security, enforced at the database level.

🔒 Every query is filtered — ORM, raw SQL, even dbshell
🚫 Missing tenant context? Zero rows returned, never a data leak
📦 Single schema, no connection routing headaches
⚡ Drop-in: one base model, one middleware, done

Unlike schema-based or ORM-rewriting approaches, RLS policies live in PostgreSQL itself. The database becomes your last line of defense — not your app code.

Supports Python 3.11+, Django 4.2–6.0, PostgreSQL 15+.

Just shipped v1.0.0 🚀

pip install django-rls-tenants

📖 Docs & source: https://github.com/dvoraj75/django-rls-tenants

Feedback, stars & contributions welcome! ⭐

#Django #Python #PostgreSQL #MultiTenancy #RowLevelSecurity #OpenSource #WebDev #SaaS #InfoSec #Database

GitHub - dvoraj75/django-rls-tenants: Database-enforced multitenancy for Django using PostgreSQL Row-Level Security. Every query -- ORM, raw SQL, dbshell -- is filtered by the database itself. Zero data leaks by design

Database-enforced multitenancy for Django using PostgreSQL Row-Level Security. Every query -- ORM, raw SQL, dbshell -- is filtered by the database itself. Zero data leaks by design - dvoraj75/djang...

GitHub

🚀 Day 1 on django-rls-tenants — bringing true PostgreSQL Row-Level Security to Django multitenancy!

Instead of separate schemas or filtered querysets, this library leverages native RLS policies at the DB level to isolate tenant data automatically.

✅ Pros:
• True DB-level isolation — tenants can't bleed into each other
• Transparent to Django ORM — no custom managers needed
• Leaner than schema-per-tenant approaches
• Scales well for high tenant counts
• Security enforced even outside the app layer

❌ Cons:
• PostgreSQL-only (no MySQL/SQLite support)
• RLS policies add complexity to migrations
• Debugging cross-tenant issues can be tricky
• Superuser connections bypass RLS — needs care
• Less community tooling than shared-schema approaches

Still very early, but the foundations are solid. Would love feedback from anyone who's tackled multitenancy in Django before! 🐘🐍

#Django #PostgreSQL #Python #Multitenancy #RLS #RowLevelSecurity #OpenSource #WebDev #SaaS #DjangoORM #DevLife

PostgreSQL RLS в Go, Часть 2: Архитектура Highload. Паника, гонки и 10 000 партиций

В первой части было разобрано, как настроить RLS в Go, почему is_local=true спасает от утечек в PgBouncer, и как покрыть это интеграционными тестами. Если вы еще не настроили базовую изоляцию, начните оттуда. Сегодня мы пойдем глубже. Мы не будем говорить о синтаксисе. Мы поговорим об архитектуре. О том, почему RLS - это не просто "удобный фильтр", а нативный механизм инкапсуляции, который решает проблемы распределенных систем и рисков безопасности прямо в слое данных, не раздувая Ops-сложность до сотен схем и баз. Кому и зачем читать? Junior/Middle: Поймете, почему RLS - это архитектурный выбор, а не просто WHERE tenant_id = ? . Узнаете про TOCTOU и как его избежать. Senior/Architect: Увидите паттерны для highload (партиционирование + RLS) и production-грабли (матвьюхи, репликация).

https://habr.com/ru/articles/988744/

#Go #Golang #PostgreSQL #RLS #Multitenancy #Backend #Database_Security #архитектура #highload

PostgreSQL RLS в Go, Часть 2: Архитектура Highload. Паника, гонки и 10 000 партиций

В первой части было разобрано, как настроить RLS в Go, почему is_local=true спасает от утечек в PgBouncer, и как покрыть это интеграционными тестами. Если вы еще не настроили базовую изоляцию, начните...

Хабр

Как перестать писать WHERE tenant_id и отдать безопасность базе (PostgreSQL RLS в Go)?

В одном из прошлых проектов случился «кошмар техлида»: в суматохе хотфикса было забыто добавление фильтра WHERE tenant_id = ? в одну из ручек API. В итоге один клиент увидел отчеты другого. Все быстро откатили, но я навсегда запомнил то холодное чувство в животе. Когда начали проектировать архитектуру следующего проекта, я понял, что полагаться на внимательность разработчиков на код-ревью - это тупик. Рано или поздно кто-то устанет, ошибется, и данные снова протекут. Искал способ гарантировать изоляцию данных так, чтобы ее физически нельзя было забыть. Почему стандартные решения не подошли? Перебрал классическую тройку вариантов, и у каждого нашлись фатальные минусы для задачи: 1. Логическая изоляция (WHERE в коде)? Как это работает: Тысячи строк кода, и в каждом запросе ты обязан помнить про tenant_id . Проблема: Человеческий фактор. Это бомба замедленного действия. 2. Схема на клиента (Schema-per-tenant) Как это работает: У каждого клиента своя схема ( schema_01 , schema_02 ...). Проблема: Это работает, пока клиентов 100. Когда их становится 10 000, база начинает задыхаться. Детали: Проблема даже не в миграциях, а в файловой системе. 10 000 клиентов × 50 таблиц = 500 000 файлов. Postgres (и Linux) сходят с ума от такого количества открытых дескрипторов, а VACUUM превращается в ад. 3. Отдельная БД на клиента Как это работает: Полная физическая изоляция. Проблема: Ценник на инфраструктуру. Держать тысячи коннектов или инстансов RDS - экономическое самоубийство для стартапа. Тогда посмотрел в сторону PostgreSQL Row Level Security (RLS) . Честно говоря, поначалу было страшно. Отдавать логику безопасности "черному ящику" внутри БД казалось рискованным. Плюс, все вокруг пугали: "RLS убьет производительность".

https://habr.com/ru/articles/987364/

#Golang #PostgreSQL #RLS #Multitenancy #Backend #Testcontainers #Database_Security #Архитектура

Как перестать писать WHERE tenant_id и отдать безопасность базе (PostgreSQL RLS в Go)?

В одном из прошлых проектов случился «кошмар техлида»: в суматохе хотфикса было забыто добавление фильтра WHERE tenant_id = ? в одну из ручек API. В итоге один клиент увидел отчеты другого. Все быстро...

Хабр

Tuần 1: PropelKit - boilerplate SaaS Next.js. Hoàn thành quản lý tổ chức, phân quyền role (owner/admin/member), hệ thống mời email, chuyển đổi org UI, RLS policies trên Supabase. Sửa bug RLS: dùng bảng organization_members thay auth.uid(). Học: RLS cần thiết kế từ đầu. Tiếp: hệ thống credits, tích hợp Razorpay, webhook. Stack: Next.js 15, Supabase, TypeScript, Tailwind. #SaaS #Nextjs #Supabase #RLS #MultiTenancy #CôngNghệ #PhátTriển

https://www.reddit.com/r/SideProject/comments/1qherhk/week_1_b

What happens when one team's logging volume overwhelms everyone else's pipeline? How do you give teams autonomy without sacrificing stability?

Peter Wilcsinszky explains how Logging Operator's Flow and Output custom resources solve this in this 🌩️ Thunder episode:
https://youtu.be/NDsaw0hO0T8

#Kubernetes #LoggingOperator #MultiTenancy #Observability #CNCF