Grist 是一款现代化的关系型电子表格。它结合了电子表格的灵活性和数据库的稳健性。
grist-core
(本仓库)包含运行强大电子表格托管服务器所需的内容。grist-desktop
是用于查看和编辑本地存储电子表格的 Linux/macOS/Windows 桌面应用程序。grist-static
是 Grist 的完全浏览器内构建版本,用于在网站上显示电子表格,无需后端支持。grist-core
仓库是 Grist 的核心,包括由总部位于纽约的公司 Grist Labs 🇺🇸 提供的托管服务,Grist Labs 是 Grist 的主要开发者。法国政府机构 ANCT Données et Territoires 🇫🇷 也对代码库做出了重大贡献。
grist-core
、grist-desktop
和 grist-static
仓库均为开源(Apache License, Version 2.0)。
有问题?有反馈?想分享你用 Grist 构建的内容?加入我们的官方 Discord 服务器或访问我们的社区论坛。
https://user-images.githubusercontent.com/118367/151245587-892e50a6-41f5-4b74-9786-fe3566f6b1fb.mp4
Grist 是一个混合数据库/电子表格,这意味着:
这种差异可能会让直接来自 Excel 或 Google Sheets 的用户感到困惑。给它一个机会!还有一篇面向电子表格用户的 Grist 文章可以帮助你了解。如果你来自 Airtable,你会发现这个模型很熟悉(我们还有一篇 Grist vs Airtable 文章进行直接比较)。
以下是 Grist 的一些具体功能亮点:
grist-static
在静态网站上显示 - 无需特殊服务器。grist-desktop
。grist-omnibus
提供了预打包的解决方案)F1
键可以快速获取帮助。这以前是不言而喻的,但总的来说,Grist 对键盘支持很好。如果你好奇 Grist 的发展方向,请查看我们的路线图,在我们的论坛上提问,或浏览我们的详细文档。
如果你只想快速体验 Grist:
要在你的计算机上使用 Docker 运行默认版本的 grist-core
,请执行以下操作:
docker pull gristlabs/grist docker run -p 8484:8484 -it gristlabs/grist
然后在浏览器中访问 http://localhost:8484
。你将能够创建、编辑、导入和导出文档。要在多次 docker 运行之间保留你的工作,请共享一个目录作为 /persist
:
docker run -p 8484:8484 -v $PWD/persist:/persist -it gristlabs/grist
在 templates.getgrist.com 获取工资单、库存管理、发票、D&D 遭遇跟踪等模板,或使用你在 docs.getgrist.com 上创建的任何文档。
如果你需要更改 Grist 运行的端口,请设置 PORT
变量,不要只更改端口映射:
docker run --env PORT=9999 -p 9999:9999 -v $PWD/persist:/persist -it gristlabs/grist
要启用 gVisor 沙箱,请设置 --env GRIST_SANDBOX_FLAVOR=gvisor
。
这应该可以在默认 docker 设置下工作,但可能不适用于所有环境。
你可以在我们的 自管理 Grist 手册中找到更多关于配置 Grist、设置身份验证和在公共服务器上运行的信息。
默认的 Docker 镜像是 gristlabs/grist
。这包含了所有标准 Grist 功能,以及从 grist-ee 仓库获取的企业客户额外源代码。这些额外代码不受免费或开源许可。但默认情况下,来自 grist-ee
仓库的代码完全处 于惰性和非活动状态。只有从管理员面板启用时,这些代码才会激活。
如果你更愿意使用仅包含免费和开源代码的镜像,gristlabs/grist-oss
Docker 镜像可用于此目的。默认情况下,它在功能上与 gristlabs/grist
镜像等效。
你可以打开一个特殊的管理员面板来检查你的安装状态。只需在你的 Grist 服务器上访问 /admin
获取说明。由于管理员面板在未设置身份验证时也很有用,你可以通过设置 GRIST_BOOT_KEY
给它一个特殊的访问密钥。
docker run -p 8484:8484 -e GRIST_BOOT_KEY=secret -it gristlabs/grist
然后应该可以通过 /admin?boot-key=<GRIST_BOOT_KEY>
访问引导页面。我们正在收集常见问题的探测器。如果你遇到未涵盖的问题,如果你能在 BootProbes 中添加一个探测器,那将非常棒。你也可以提交一个问题,让其他人来添加。
要从源代码构建 Grist,请按以下步骤操作:
yarn install
yarn run build:prod
yarn run install:python
yarn start
# Grist 将在 http://localhost:8484/ 上可用
文档中的 Grist 公式将使用直接在你的机器上执行的 Python 运行。你可以使用 GRIST_SANDBOX_FLAVOR
环境变量配置沙箱。
export GRIST_SANDBOX_FLAVOR=macSandboxExec
使用原生 sandbox-exec
命令进行沙箱处理。export GRIST_SANDBOX_FLAVOR=gvisor
是一个选项。我们将数据可移植性和自主性视为关键价值,grist-core
是其中的重要组成部分。我们致力于维护和改进grist-core
代码库,并谨慎考虑专有产品如何影响数据可移植性和自主性。
通过开放源代码并提供OSI批准的免费许可证,Grist使其用户受益:
有关Grist Labs的历史和原则的更多信息,请参阅我们的关于我们页面。
Grist可以通过多种方式进行配置。以下是它所响应的主要环境变量:
变量 | 用途 |
---|---|
ALLOWED_WEBHOOK_DOMAINS | 允许在webhooks中使用的域名列表,用逗号分隔(例如webhook.site,zapier.com)。您可以将其设置为* 以允许所有域名,但如果这样做,我们建议使用严格锁定的代理(参见GRIST_HTTPS_PROXY ),如果您不完全信任用户的话。否则,您内部网络上的服务可能会变得容易被操纵。 |
APP_DOC_URL | 文档工作器URL,在启动单个文档工作器时设置(其他服务器将通过redis查找文档工作器URL) |
APP_DOC_INTERNAL_URL | 类似于APP_DOC_URL ,但由主服务器使用内部域名解析(如在docker环境中)来访问服务器。只有在文档工作器中定义这个值才有意义。默认为APP_DOC_URL 。 |
APP_HOME_URL | 主页API的URL前缀(主页和文档服务器需要此项) |
APP_HOME_INTERNAL_URL | 类似于APP_HOME_URL ,但由主页和文档服务器使用内部域名解析(如在docker环境中)来访问任何主页工作器。默认为APP_HOME_URL |
APP_STATIC_URL | 静态资源的URL前缀 |
APP_STATIC_INCLUDE_CUSTOM_CSS | 设置为"true"以在静态页面中包含custom.css(来自APP_STATIC_URL) |
APP_UNTRUSTED_URL | 用于提供/期望插件内容的URL。 |
GRIST_ADAPT_DOMAIN | 设置为"true"以支持多个基本域名(请谨慎,主机头应该是可信的) |
GRIST_APP_ROOT | 包含Grist沙箱和资产的目录(特别是sandbox和static子目录)。 |
GRIST_BACKUP_DELAY_SECS | 文档更改后等待此时间再进行备份 |
GRIST_BOOT_KEY | 如果设置,在/boot/GRIST_BOOT_KEY提供诊断信息 |
GRIST_DATA_DIR | 存储文档的目录。默认为Grist应用程序目录相对的docs/ 。在Grist的默认Docker镜像中,其默认值为/persist/docs,以便作为挂载卷使用。 |
GRIST_DEFAULT_EMAIL | 如果设置,当没有其他凭据提供时以此用户身份登录 |
GRIST_DEFAULT_PRODUCT | 如果设置,这控制新站点的启用功能和限制。参见Product.ts中的PRODUCTS名称。 |
GRIST_DEFAULT_LOCALE | 当Grist无法满足浏览器语言环境时使用的默认语言环境。 |
GRIST_DOMAIN | 在托管的Grist中,Grist从此域名的子域名提供服务。默认为"getgrist.com"。 |
GRIST_EXPERIMENTAL_PLUGINS | 启用实验性插件 |
GRIST_ENABLE_REQUEST_FUNCTION | 启用REQUEST函数。此函数以类似于requests.request 的方式执行HTTP请求。此功能存在重大安全风险,因为当Grist公开可用时,它可能允许用户调用内部端点。此功能还可能导致性能问题。默认未设置。 |
GRIST_HIDE_UI_ELEMENTS | 要禁用的UI功能的逗号分隔列表。允许的部分名称:helpCenter,billing,templates,createSite,multiSite,multiAccounts,sendToDrive,tutorials,supportGrist 。如果某个部分 也存在于GRIST_UI_FEATURES中,它仍将被禁用。 |
GRIST_HOST | 在监听端口时使用的主机名。 |
GRIST_HTTPS_PROXY | 如果设置,使用此代理进行webhook负载传递。 |
GRIST_ID_PREFIX | 对于形如o-的子域名,期望或生成o-${GRIST_ID_PREFIX}。 |
GRIST_IGNORE_SESSION | 如果设置,Grist将不使用会话进行身份验证。 |
GRIST_INCLUDE_CUSTOM_SCRIPT_URL | 如果设置,将在所有应用页面上加载引用的URL到<script> 标签中。 |
GRIST_INST_DIR | Grist服务器的Grist实例配置文件路径。 |
GRIST_LIST_PUBLIC_SITES | 如果设置为true,匿名用户将列出与公众共享的站点。默认为false。 |
GRIST_MANAGED_WORKERS | 如果设置,Grist可以假设如果针对文档工作器的URL返回404,那么该工作器已经不存在 |
GRIST_MAX_UPLOAD_ATTACHMENT_MB | 附件允许的最大大小(0或空表示无限制)。 |
GRIST_MAX_UPLOAD_IMPORT_MB | 导入允许的最大大小(除.grist文件外)(0或空表示无限制)。 |
GRIST_OFFER_ALL_LANGUAGES | 如果设置,所有翻译的语言都会提供给用户(默认情况下,只有设置了特殊的'good enough'键的语言才会提供给用户)。 |
GRIST_ORG_IN_PATH | 如果为true,在路径而不是域名中编码组织 |
GRIST_PAGE_TITLE_SUFFIX | 在HTML文档的<title> 末尾附加的字符串。默认为" - Grist" 。设置为_blank 则完全没有后缀。 |
已弃用,被解释为GRIST_FORWARD_AUTH_HEADER的同义词。 | |
GRIST_ROUTER_URL | 可选的API URL,允许服务器在负载均衡器中注册(取消注册) |
GRIST_SERVE_SAME_ORIGIN | 设置为"true"以在与顶级页面相同的协议-主机-端口上访问主服务器和文档工作器,与自定义域名相同(请谨慎,主机头应该是可信的) |
GRIST_SERVERS | 要设置的服务器类型。逗号分隔的值,可能包含"home"、"docs"、"static"和/或"app"。默认为"home,docs,static"。 |
GRIST_SESSION_COOKIE | 如果设置,覆盖Grist cookie的名称 |
GRIST_SESSION_DOMAIN | 如果设置,将cookie与给定域名关联 - 否则默认为GRIST_DOMAIN |
GRIST_SESSION_SECRET | 用于编码会话的密钥 |
GRIST_SKIP_BUNDLED_WIDGETS | 如果设置,Grist将忽略通过NPM包包含的任何捆绑小部件。 |
GRIST_ANON_PLAYGROUND | 设置为'false'时拒绝匿名用户访问主页 |
GRIST_FORCE_LOGIN | 类似于GRIST_ANON_PLAYGROUND,但完全不支持匿名访问(公开共享文档等功能需要认证) |
GRIST_SINGLE_ORG | 设置为组织"域名"以将客户端固定到该组织 |
GRIST_TEMPLATE_ORG | 设置为组织"域名"以显示该组织的公共文档 |
GRIST_HELP_CENTER | 设置帮助中心链接引用 |
GRIST_TERMS | |
变量 | 用途 |
-------- | ------- |
GRIST_SANDBOX_FLAVOR | 可以是gvisor、pynbox、unsandboxed、docker或macSandboxExec。如果设置,强制Grist使用指定类型的沙箱。 |
GRIST_SANDBOX | 作为沙箱运行的程序或镜像名称。详见NSandbox.ts的技术细节。 |
PYTHON_VERSION | 可以是2或3。如果设置,没有引擎设置的文档将假定使用指定版本的Python。并非所有沙箱都支持所有版本。 |
PYTHON_VERSION_ON_CREATION |