配置文件存储
Phabricator 用户文档 (配置)

设置文件存储 并支持大文件。

概览

本文档描述如何配置 Phabricator 支持大文件上传, 以及如何选择 Phabricator 存储文件的位置。

有两个主要的事情要配置:

  • 设置 PHP 和 HTTP 服务器支持大请求
  • 选择和配置一个存储引擎

以下部分将指导您完成这些配置。

Phabricator 如何存储文件

Phabricator 将文件存储在实现存储的模块化后端的“存储引擎”中, (如MySQL,文件系统或像Amazon S3这样的云存储服务)。

Phabricator 通过将大文件分成许多块来存储它们(几个兆字节大小), 并将这些块存储在底层存储引擎中。这使得实现新的存储引擎更容易, 同时 Phabricator 能更灵活地管理文件数据。

本文档的第一部分讨论如何配置 PHP 和 HTTP 服务器接受大于一个文件块的请求。 没有此配置,文件块数据将被拒绝。

第二部分讨论选择和配置存储引擎,让数据存储在您想要的位置。

配置上传限制

文件上传受限于堆栈上不同层的几个配置。 通常,设置为限制的最小值是就可以。

要上传大文件,需要将所有限制至少设置为 32MB。 这将允许您上传文件块,使 Phabricator 存储任意大小的文件。

限制文件上传的设置:

HTTP 服务器:

HTTP 服务器可以设置对最大请求大小的限制。 如果超过此限制,您将看到一个带有 HTTP 错误的默认服务器页面。 这些指令限制请求正文的总大小,因此它们必须设置为 稍大于所需的最大文件大小。

  • Apache: Apache 使用 LimitRequestBody限制请求大小。
  • nginx: nginx使用 client_max_body_size限制请求大小。 通常默认为1M。
  • lighttpd: 了ighttpd 使用 server.max-request-size 限制请求大小。

将适用的限制设置为至少 32MB。 Phabricator 不能读这些设置, 因此如果配置错误,它不能发出设置警告。

PHP:

PHP有几个限制上传的指令。 这些指令是 在php.ini.

  • post_max_size: PHP 接受 POST 请求最大值。 如果你超过这个,Phabricator 会给你一个有用的错误提示。 通常默认值为 '8M'。请设置为至少“32MB”。 如果设置太低,Phabricator 将给你一个设置警告。
  • memory_limit: 某些上传会在 Phabricator 能调整内存限制前, 将文件数据读入到内存中。如果你超过这个,PHP 可能会给你一个错误提示,这取决于您的配置。 建议您将此设置为-1以禁用它。 如果设置太低,Phabricator 会给出有关的设置警告。

您可能还需要配置这些 PHP 选项:

  • max_input_vars: 当通过 HTML5 拖放上传API上传文件时, PHP解析文件体,就好像它包含正常的POST参数一样, 如果文件有很多,可能会触发max_input_vars限制。 您可能需要将其设置为某种天文学上的高值。
  • upload_max_filesize: PHP 在原始文件上传中接受的最大文件大小。 通过拖放上传文件时通常不使用此选项,但会影响其他类型的文件上传。 如果超过这个, Phabricator 会给你一个有用的错误提示。 通常默认为“2M”,请至少设置为“32MB”。

调整所有此配置后,您的服务器将能够接收块上传。 只要你有地方存储它们,这将会使您能够存储任意大小的文件。

存储引擎

Phabricator 支持以下几种不同的文件存储引擎:

存储引擎设置费用备注
MySQL自动免费扩展性不好
Local Disk容易免费扩展性不好
Amazon S3容易便宜容易扩展
Custom困难不一定实现自定义存储引擎。

可以在网页中打开 ApplicationsFilesHelp/OptionsStorage Engines 浏览可用的存储引擎和它们的配置。

默认情况下,Phabricator 配置为在 MySQL 中存储小于 1MB 的文件, 大于 1MB 文件会被拒绝。存储更大文件,可以:

  • 提高 MySQL 限制到 8MB; 或
  • 配置另一个存储引擎

任何一个启用都将启用块存储,同时支持任意大小文件。

本文档的其余部分讨论可用的存储引擎以及如何配置它们。

引擎: MySQL

  • 优点: 低延迟,无需设置。
  • 缺点: 用数据库存储文件是一个经典的错误。 当有大量的数据时,将会变得很难管理。

对于小于 1MB 的文件,MySQL 是默认配置。可以进行如下设置:

  • storage.mysql-engine.max-size: 设置文件大小限制,按字节。 设置为 0 禁用。

对于大多数安装,即使配置了其他存储引擎, 保留此引擎将小文件(如缩略图和头像)存储在 MySQL 中是合理的。 因为这是延迟最低的文件存储。

将此限制设置为 8388608 (8MB) 来支持大文件。这将激活MySQL中的块存储。

引擎: 本地硬盘

  • 优点: 设置简单
  • 缺点: 没有 NFS 不能扩展到多台服务器前端。

要配置本地磁盘上的文件存储,请设置:

  • storage.local-disk.path: 设置为本地磁盘上的可写入目录。 记得创建此目录。

引擎: Amazon S3

  • 优点: 扩展性好
  • 缺点: 比其他的要略为复杂,也不是免费的。

设置 S3 文件存储:

  • amazon-s3.access-key: 你的 AWS access key.
  • amazon-s3.secret-key: 你的 AWS secret key.
  • amazon-s3.region: 你的 AWS S3 region.
  • amazon-s3.endpoint: 你的 AWS S3 endpoint.
  • storage.s3.bucket: 文件存储的 S3 bucket 名字。

测试存储引擎

可以将文件拖拽到 Phabricator 首页上测试配置是否正确。 如果引擎配置正确,文件将被上传。

不同引擎间迁移文件

如果你想在存储引擎之间移动文件,你可以使用bin/files 脚本执行迁移。 例如,假设您以前使用 MySQL,但是 最近启用 S3,并希望将所有文件迁移到那里。

首先,迁移一个文件进行测试:

phabricator/ $ ./bin/files migrate --engine amazon-s3 F12345

如果一切工作正常,就可以迁移所有的:

phabricator/ $ ./bin/files migrate --engine amazon-s3 --all

可以使用 --dry-run 来查看将进行哪些迁移,但是并不真正执行迁移操作。 运行bin/files help了解更多选项和信息。

下一步

接下来: