mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-28 09:42:41 +01:00
66366137ff
Summary: Ref T10784. Currently, if you terminate SSL at a load balancer (very common) and use HTTP beyond that, you have to fiddle with this setting in your premable or a `SiteConfig`. On the balance I think this makes stuff much harder to configure without any real security benefit, so don't apply this option to intracluster requests. Also document a lot of stuff. Test Plan: Poked around locally but this is hard to test outside of a production cluster, I'll vet it more thoroughly on `secure`. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10784 Differential Revision: https://secure.phabricator.com/D15696
120 lines
4.3 KiB
PHP
120 lines
4.3 KiB
PHP
<?php
|
|
|
|
final class PhabricatorClusterConfigOptions
|
|
extends PhabricatorApplicationConfigOptions {
|
|
|
|
public function getName() {
|
|
return pht('Cluster Setup');
|
|
}
|
|
|
|
public function getDescription() {
|
|
return pht('Configure Phabricator to run on a cluster of hosts.');
|
|
}
|
|
|
|
public function getIcon() {
|
|
return 'fa-sitemap';
|
|
}
|
|
|
|
public function getGroup() {
|
|
return 'core';
|
|
}
|
|
|
|
public function getOptions() {
|
|
$databases_type = 'custom:PhabricatorClusterDatabasesConfigOptionType';
|
|
$databases_help = $this->deformat(pht(<<<EOTEXT
|
|
WARNING: This is a prototype option and the description below is currently pure
|
|
fantasy.
|
|
|
|
This option allows you to make Phabricator aware of database read replicas so
|
|
it can monitor database health, spread load, and degrade gracefully to
|
|
read-only mode in the event of a failure on the primary host. For help with
|
|
configuring cluster databases, see **[[ %s | %s ]]** in the documentation.
|
|
EOTEXT
|
|
,
|
|
PhabricatorEnv::getDoclink('Cluster: Databases'),
|
|
pht('Cluster: Databases')));
|
|
|
|
|
|
$intro_href = PhabricatorEnv::getDoclink('Clustering Introduction');
|
|
$intro_name = pht('Clustering Introduction');
|
|
|
|
return array(
|
|
$this->newOption('cluster.addresses', 'list<string>', array())
|
|
->setLocked(true)
|
|
->setSummary(pht('Address ranges of cluster hosts.'))
|
|
->setDescription(
|
|
pht(
|
|
'Define a Phabricator cluster by providing a whitelist of host '.
|
|
'addresses that are part of the cluster.'.
|
|
"\n\n".
|
|
'Hosts on this whitelist have special powers. These hosts are '.
|
|
'permitted to bend security rules, and misconfiguring this list '.
|
|
'can make your install less secure. For more information, '.
|
|
'see **[[ %s | %s ]]**.'.
|
|
"\n\n".
|
|
'Define a list of CIDR blocks which whitelist all hosts in the '.
|
|
'cluster and no additional hosts. See the examples below for '.
|
|
'details.'.
|
|
"\n\n".
|
|
'When cluster addresses are defined, Phabricator hosts will also '.
|
|
'reject requests to interfaces which are not whitelisted.',
|
|
$intro_href,
|
|
$intro_name))
|
|
->addExample(
|
|
array(
|
|
'23.24.25.80/32',
|
|
'23.24.25.81/32',
|
|
),
|
|
pht('Whitelist Specific Addresses'))
|
|
->addExample(
|
|
array(
|
|
'1.2.3.0/24',
|
|
),
|
|
pht('Whitelist 1.2.3.*'))
|
|
->addExample(
|
|
array(
|
|
'1.2.0.0/16',
|
|
),
|
|
pht('Whitelist 1.2.*.*'))
|
|
->addExample(
|
|
array(
|
|
'0.0.0.0/0',
|
|
),
|
|
pht('Allow Any Host (Insecure!)')),
|
|
$this->newOption('cluster.instance', 'string', null)
|
|
->setLocked(true)
|
|
->setSummary(pht('Instance identifier for multi-tenant clusters.'))
|
|
->setDescription(
|
|
pht(
|
|
'WARNING: This is a very advanced option, and only useful for '.
|
|
'hosting providers running multi-tenant clusters.'.
|
|
"\n\n".
|
|
'If you provide an instance identifier here (normally by '.
|
|
'injecting it with a `%s`), Phabricator will pass it to '.
|
|
'subprocesses and commit hooks in the `%s` environmental variable.',
|
|
'PhabricatorConfigSiteSource',
|
|
'PHABRICATOR_INSTANCE')),
|
|
$this->newOption('cluster.read-only', 'bool', false)
|
|
->setLocked(true)
|
|
->setSummary(
|
|
pht(
|
|
'Activate read-only mode for maintenance or disaster recovery.'))
|
|
->setDescription(
|
|
pht(
|
|
'WARNING: This is a prototype option and the description below '.
|
|
'is currently pure fantasy.'.
|
|
"\n\n".
|
|
'Switch Phabricator to read-only mode. In this mode, users will '.
|
|
'be unable to write new data. Normally, the cluster degrades '.
|
|
'into this mode automatically when it detects that the database '.
|
|
'master is unreachable, but you can activate it manually in '.
|
|
'order to perform maintenance or test configuration.')),
|
|
$this->newOption('cluster.databases', $databases_type, array())
|
|
->setHidden(true)
|
|
->setSummary(
|
|
pht('Configure database read replicas.'))
|
|
->setDescription($databases_help),
|
|
);
|
|
}
|
|
|
|
}
|