跳转到主要内容

Kiwi TCMS的多租户支持

项目描述

https://travis-ci.org/kiwitcms/tenants.svg?branch=master https://coveralls.io/repos/github/kiwitcms/tenants/badge.svg?branch=master Python updates Tidelift Become a sponsor Kiwi TCMS on Twitter

简介

此包为Kiwi TCMS提供多租户支持,并围绕django-tenants进行包装。您可以使用它来在同一应用服务器上托管不同的组织或托管多个由不同团队使用的不同产品实例。每个租户只能看到自己创建的信息。

安装

重要: 多租户由PostgreSQL模式支持!它不适用于不同的数据库后端。

警告: 当前租户基于访问Kiwi TCMS的FQDN来决定!

需要在下游Docker镜像或托管主Kiwi TCMS实例的Python虚拟env中引入以下更改

pip install kiwitcms-tenants

然后确保KIWI_TENANTS_DOMAIN环境变量已指定!!!其余设置安装到tcms_settings_dir/multi_tenant.py,Kiwi TCMS将自动获取它们!

首次启动配置

当您首次启动多租户Kiwi TCMS实例时,您还需要创建所谓的公共租户的信息。这就是您的应用程序运行在上的默认租户。

./manage.py initial_setup

您的租户将在 https://$KIWI_TENANTS_DOMAIN 上可用!其他租户可以通过网页界面创建,并将位于 team-01.$KIWI_TENANTS_DOMAIN、product-02.$KIWI_TENANTS_DOMAIN 等等,具体取决于您提供的实际 模式名称

DNS 配置

您需要配置通配符 DNS 解析,以支持 *.tenants.example.org

如果使用 AWS Route 53,请为 example.org 域创建一个 A 记录,名称为 Name==*.tenants,并将其指向 Kiwi TCMS 实例的 IP 地址。

一旦 DNS 配置完成,您应该能够使用工具如 dignslookup 查询各种域名。

$ dig public.tenant.kiwitcms.org
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-12.P2.el7 <<>> public.tenant.kiwitcms.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58543
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;public.tenant.kiwitcms.org.    IN      A

;; ANSWER SECTION:
public.tenant.kiwitcms.org. 36  IN      A       100.24.231.234

;; Query time: 35 msec
;; SERVER: 10.38.5.26#53(10.38.5.26)
;; WHEN: Tue Nov 19 14:04:09 EET 2019
;; MSG SIZE  rcvd: 71


$ nslookup linux.tenant.kiwitcms.org
Server:         10.38.5.26
Address:        10.38.5.26#53

Non-authoritative answer:
Name:   linux.tenant.kiwitcms.org
Address: 100.24.231.234

所有子域名应解析到相同的 IP 地址!

从单租户迁移到多租户

请参阅官方 django-tenants 文档中的 从单租户迁移到多租户 部分!该部分由 Kiwi TCMS 团队贡献,这是我们迁移先前演示网站(ST)到其新 MT 版本的流程!

本地开发

从 Kiwi TCMS v13.1 开始,会话和 CSRF 饼干仅配置在 HTTPS 连接上,这将防止浏览器在纯文本 HTTP 连接上发送饼干。这将导致使用本地开发服务器时无法登录。为了解决这个问题,首先生成一个 SSL 证书

/usr/bin/sscg -v -f --country BG --locality Sofia --organization "Kiwi TCMS" --organizational-unit "QA" --ca-file ssl/ca.crt --cert-file ssl/host.crt --cert-key-file ssl/host.key

然后使用 runerver_plus 命令以 HTTPS 启动 Kiwi TCMS 开发服务器

PYTHONPATH=../Kiwi/ KIWI_TENANTS_DOMAIN=tenant.example.bg ./manage.py runserver_plus --cert-file ssl/host.crt  --key-file ssl/host.key

然后,将您的浏览器指向 https://tenant.example.bg:8000/。浏览器上的 SSL 警告是预期的!

您可以使用您的 操作系统主机文件 在开发期间配置 DNS 解析

127.0.0.1   localhost tenant.example.bg empty.tenant.example.bg

变更日志

v3.2.0 (28 Aug 2024)

  • 将 django-tenants 从 3.6.1 更新到 3.7.0

v3.1.0 (02 Jul 2024)

  • 添加用于 TENANT_SCHEMA_NAME 模板变量的上下文处理器

  • 更新测试套件以适应 Django 5 的更改

v3.0.0 (09 Jun 2024)

  • 将此软件包重新授权为 GNU Affero 通用公共许可证 v3 或更高版本

  • 先前版本仍受 GNU 通用公共许可证 v3 许可

v2.8.3 (02 May 2024)

  • 在克隆租户时,请确保填写 extra_emails 字段

v2.8.2 (01 May 2024)

  • 允许下游安装覆盖编辑租户页面模板

v2.8.1 (29 Apr 2024)

  • 错误修复:在邀请用户页面上显示空字符串而不是 None

  • 添加针对使用 settings.EMAIL_VALIDATORS 无法验证的电子邮件的 utils 函数的测试

v2.8.0 (28 Apr 2024)

  • 重构邀请用户页面 HTML 模板以显示表单字段错误

  • 在邀请用户时,考虑到 settings.EMAIL_VALIDATORS 的值来验证地址

  • 更新文档

  • 调整测试以适应 django-grappelli 的较新版本

v2.7.0 (24 Apr 2024)

  • 添加 Tenant.extra_emails 字段以存储技术电子邮件、账单电子邮件等信息。供附加工具使用

  • 添加 initialize_tenants 管理命令

  • 更新本地开发说明

  • 使用 black 启用代码格式化

  • 开始使用上游 Postgres 容器进行测试

  • 在拉取请求和分支上执行 CodeQL

  • 调整测试以适应 Django 5.0

v2.6.1 (08 Mar 2024)

  • 从租户名称区域移除对 non-existing.png 文件的引用,以避免触发速率限制的 404 响应

v2.6.0 (14 Jan 2024)

  • 将 django-tenants 从 3.5.0 更新到 3.6.1

  • 将pylint-django从2.5.3更新到2.5.5

  • 使用Python 3.11开始构建和测试

  • 开始使用psycopg3进行测试

v2.5.2(2023年10月24日)

v2.5.1(2023年5月12日)

  • 更新到django-tenants==3.5.0

  • 替换已被Kiwi TCMS v12.2移除的form_errors_to_list()

v2.5.0(2023年2月10日)

  • 更新到django-tenants==3.4.8

  • 修复Kiwi TCMS v11.7或更高版本创建租户页面上的错误

v2.4.0(2022年11月15日)

  • 允许自定义租户徽标以在导航中进行自定义(Ivajlo Karabojkov)

  • 添加CodeQL工作流程以进行GitHub代码扫描

  • 修复make消息命令

v2.3.2(2022年10月31日)

  • 将django-tenants从3.4.5更新到3.4.7

  • 在空租户上不要添加用户到TenantGroup

  • 调整从租户管理页面到重定向以避免混淆

  • 更新初始配置文档

  • 在测试中添加更多断言

v2.3.1(2022年9月10日)

  • 如果不存在该属性,则不要访问request.tenant。修复KIWI-TCMS-K2

v2.3.0(2022年9月2日)

  • 即使在公开可读的租户上也不要授予auth.view_权限

  • 尊重settings.DEFAULT_GROUPS而不是硬编码。被邀请的用户和通过管理面板授权的用户将被添加到与settings.DEFAULT_GROUPS匹配的租户组(默认为“测试员”),如果此类租户组存在。如果设置是一个空列表或没有匹配特定名称的租户组,则授权用户将无法关联组。将取决于Kiwi TCMS管理员手动为每个用户分配权限和租户组。

v2.2.1(2022年8月30日)

  • 修复create_oss_tenant()辅助函数中的错误

v2.2.0(2022年8月14日)

  • 将django-tenants从3.4.2更新到3.4.4

  • 在导航中显示租户信息(Ivajlo Karabojkov)

  • 允许编辑Tenant.name,以使管理员更容易在导航中自定义显示的文本!

  • 关于测试和CI的内部更新

v2.1.1(2022年4月27日)

  • 如果用户无法更改租户组,则不会崩溃。修复KIWI-TCMS-J8

v2.1.0(2022年4月27日)

  • 添加refresh_tenant_permissions命令,该命令将由refresh_permissions自动执行

v2.0.1(2022年4月19日)

  • 修复帮助消息中的URL

v2.0.0(2022年4月18日)

  • 定义每个租户的Group模型,并添加一个身份验证后端,该后端将消耗来自tenant-groups的权限。关闭#104 问题#104

  • 添加pre-commit CI配置并应用自动修复

v1.11.0(2022年1月24日)

  • 添加对KIWI_TENANTS_DOMAIN环境变量的系统检查。关闭问题#140

v1.10.0(2022年1月19日)

  • 将django-tenants从3.4.1更新到3.4.2,将有助于迁移到Django 4

v1.9.0(2022年1月10日)

  • 将django-tenants从3.3.4更新到3.4.1

  • 更新测试的预期错误消息

  • 修复代码覆盖率上传

v1.8.0(2021年10月16日)

  • 将django-tenants从3.3.2更新到3.3.4。修复了当数据库用户名包含短横线时克隆租户的bug

  • 使用f-strings,因为pylint真的很喜欢它们

v1.7.0(2021年9月3日)

  • 使用clone_tenant加快租户创建速度。修复问题#127!需要存在名称为empty的模式!

  • 修复pylint警告

  • 从Travis CI迁移到GitHub Actions

v1.6.0(2021年6月18日)

  • 将django-tenants从3.3.1更新到3.3.2

  • 增强租户域名检测的鲁棒性,避免在公共租户的域名不使用前缀的情况下出现错误(例如,与 KIWI_TENANT_DOMAIN 匹配)

v1.5.0 (04 Jun 2021)

  • 数据库:重命名 Tenant.on_trial -> Tenant.publicly_readable

  • 允许未经授权的用户访问公开可读的租户

  • 将 django-tenants 从 3.3.0 更新到 3.3.1

  • 更新翻译字符串

  • 与 Kiwi TCMS v10.1 进行测试

  • NewTenantForm 转换为从 ModelForm 继承

v1.4.4 (12 May 2021)

  • 将 django-tenants 从 3.2.1 更新到 3.3.0

  • 与 Kiwi TCMS v10.0 进行测试

  • 与 Python 3.8 进行测试

v1.4.3 (25 Jan 2021)

  • 在 NewTenantForm 中添加缺失的 csrf_token

v1.4.2 (23 Dec 2020)

  • 修复我们在用户注册表中覆盖 captcha 字段时的一个错误

  • 修复邀请电子邮件的主题

v1.4 (23 Dec 2020)

  • 与 Kiwi TCMS v8.9 进行测试

  • 在 README 中添加对 owner_id 的警告

  • 将 ModelChoiceField 替换为 UserField。修复 问题 #114

  • 支持对租户的用户邀请。修复 问题 #116

v1.3.1 (09 Sep 2020)

  • 替换弃用的导入以消除 Django 3.1 的警告

v1.3 (26 Aug 2020)

  • 与 Kiwi TCMS v8.6 进行测试

  • 将 django-tenants 从 3.1.0 更新到 3.2.1

  • 不要在 devel.txt 中固定依赖项

v1.2.1 (24 Jul 2020)

  • 即使发生错误也要过滤掉 AuthorizedUsersChangeForm

  • 与 Kiwi TCMS v8.5 进行测试

v1.2 (20 Jun 2020)

  • 将 django-tenants 从 3.0.3 更新到 3.1.0

  • 改进测试并对 linters 进行一些小的更新

  • 与 Kiwi TCMS v8.4 进行测试

v1.1.1 (27 Apr 2020)

  • 不提供 TENANT_APPS,因为它与 Kiwi TCMS v8.3 一起分发

v1.1 (25 Apr 2020)

  • 恢复改进的 schema_name 的 HTML 占位符

  • 正确验证 schema/域名输入值

v1.0.3 (24 Apr 2020)

  • 始终将 schema_name 转换为小写,以确保它实际上可以作为有效的主机名使用

v1.0.2 (24 Apr 2020)

  • 将 django-tenants 从 3.0.1 更新到 3.0.3

  • 在 UI 中将有效的 schema_name 模式显示为帮助文本

  • 删除 schema_name 的占位符文本,因为它具有误导性

v1.0.1 (18 Mar 2020)

  • 略微调整设置 TENANT_APPSMULTITENANT_RELATIVE_MEDIA_ROOT 的默认值,以匹配 Kiwi TCMS 和在此软件包成为插件之前的安装。这将避免破坏现有部署!

v1.0 (15 Mar 2020)

  • 将其转换为合适的 Kiwi TCMS 插件,并在 tcms_settings_dir/ 下安装设置覆盖(与 Kiwi TCMS v8.2 或更高版本兼容)

    • 不再需要 MENU_ITEMSROOT_URLCONF 覆盖

    • 不需要手动在 INSTALLED_APPS 中加载 tcms_tenants

    • 只需指定 KIWI_TENANTS_DOMAIN 环境变量即可!

  • NewTenantView 需要 tcms_tenants.add_tenant 权限

  • NewTenantView 重新实现为 FormView

  • 重构 redirect_to() 为基于类的视图

  • 为 admin.py 添加测试。关闭 #5 问题 #5

  • datetime.now 替换为 timezone.now 以更好地支持启用了时区配置的安装

  • 启用 pylint。关闭 问题 #17

  • 启用 flake8

v0.5.1 (17 Feb 2020)

  • 将django-tenants从3.0.0升级到3.0.1。修复了问题#60

v0.5 (2020年1月16日)

  • 将django-tenants从2.2.3升级到3.0.0

  • 成功测试与Kiwi TCMS v7.3以及Django 3.0兼容

v0.4.7 (2019年12月11日)

  • tcms_tenants.tests.LoggedInTestCase.tenant.owner.password设置为“password”,以便下游测试可以重用

v0.4.6 (2019年12月11日)

  • 添加斯洛文尼亚语的新翻译

  • 在Django 3.0中将ugettext_lazy替换为gettext_lazy

  • 开始提供tcms_tenants.tests以便其他多租户插件包使用

  • 确认与Kiwi TCMS v7.2兼容

v0.4.5 (2019年11月24日)

  • 记录如何配置多租户

  • 记录ST到MT迁移

  • 添加辅助方法create_oss_tenant()

  • 在测试期间对TENANT_APPS进行内部更新

v0.4.4 (2019年10月29日)

  • 添加俄语新翻译

v0.4.3 (2019年5月18日)

  • 添加Tenant.organization字段

  • 在创建租户时将site.name设置为tenant.domain.domain

v0.4.0 (2019年5月12日)

  • 允许通过名为form_action_url的额外上下文变量覆盖创建租户表单的URL

v0.3.0 (2019年5月8日)

  • 创建新租户时发送电子邮件

  • 添加可以用于阻止未付款租户的中介件

  • 重写中介件,去除已弃用的MiddlewareMixin,参见问题#17

  • 添加更多测试

v0.2.0 (2019年5月5日)

  • TENANT_APPS中移除django.contrib.contenttypes

  • 简化重写NewTenantView的过程

  • 使用DateTimeField代替DateField

  • 在Admin中显示第一个主域名

  • 大幅加速测试

  • Pylint修复

v0.1.10 (2019年5月3日)

  • 恢复带有可选schema_name参数的tenant_url模板标签

v0.1.9 (2019年5月3日)

  • 修复失败的测试

v0.1.8 (2019年5月3日)

  • 修复缺少迁移目录的打包问题

  • 添加视图,方便GitHub登录和重定向。调用者应通过公开租户进行OAuth登录,然后重定向到该视图,浏览器将被发送到实际租户!这将解决由于只能指定一个重定向URI而从GitHub看到的redirect_uri不匹配问题

  • pylint修复

  • 移除未使用的templatetags/目录

v0.1.6 (2019年4月28日)

  • 租户对象现在有所有者

v0.1.5 (2019年4月24日)

  • 将django-tenants更新到2.2.3

  • 添加斯洛文尼亚语的新翻译

  • 在wheel包中不包含test_project/文件

v0.1.4 (2019年4月15日)

  • 更新到django-tenants 2.2.0以支持Django 2.2

v0.1.3 (2019年4月10日)

  • 将设置TCMS_TENANTS_DOMAIN重命名为KIWI_TENANTS_DOMAIN

v0.1.2 (2019年4月4日) - 初次发布

  • 支持通过Web界面创建租户

  • 仅允许超级用户删除租户

  • 支持授权其他用户访问当前租户

  • 当未经授权的用户尝试访问租户时,返回403禁止访问的中介件

  • 支持覆盖tcms_tenants/new.html模板以提供SLA、条款和条件等

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于 安装包的信息

源代码分布

kiwitcms-tenants-3.2.0.tar.gz (44.1 kB 查看哈希值)

上传于 源代码

构建分布

kiwitcms_tenants-3.2.0-py3-none-any.whl (59.4 kB 查看哈希值)

上传于 Python 3

由以下组织支持