Page MenuHomePhabricator

Phacility Cluster Repositories
Updated 1,353 Days AgoPublic

This document describes the repositories which are deployed in the Phacility Cluster. It provides a quick overview of all the first-party code we're deploying, where it gets deployed, and what it does.

Quick Reference

LinkNameAvailabilitySizeDevicesNotes
rPPhabricatorOpen Source400KAll WebSoftware engineering platform.
rARCArcanistOpen Source50KAll WebPhabricator library.
rPHUlibphutilOpen Source50KAll WebPhabricator library.
rCOREPhacility Core Proprietary2KAll WebOperational and deployment tools.
rSERVICESPhacility Services Proprietary1KAll WebConfiguration for instances.
rSAASInstances App Proprietary5KAdminUser-facing administrative GUI.
rSSHPhacility SSH Proprietary50SpecialLightly patched fork of OpenSSH.
rKEYSTOREKeystore Proprietary50SpecialProduction keystore.
NOTE: The "Size" column is a rough order-of-magnitude estimate.

What parts are open vs closed?

  • Almost all of the code is open, but some parts which are specific to the Phacility cluster are proprietary.

The bulk of the code we deploy is open: we deploy vanilla copies of Phabricator and its dependencies directly from the upstream. As of early 2015, we deploy an approximate total of 508K lines of first-party code in the cluster. 500K of this is open source, so roughly 98% of the first party code we deploy is open.

While the exact numbers will change over time as we develop both Phabricator and Phacility, we do not expect the proportion of code which is proprietary to change very much.

In general, the proprietary code is specific to Phacility's technical or business concerns, and mostly provides capabilities which we believe are only realistically useful when deploying a SAAS cluster. For example, at the time of writing, the majority of the proprietary code is the administrative GUI which allows users to launch, manage, and pay for instances.

Repository Summaries

rP Phabricator

Phabricator is deployed to all devices which run application web servers.

rARC Arcanist

Arcanist is deployed to all devices where Phabricator is deployed.

rPHU

libphutil is deployed to all devices where Phabricator is deployed.

rCORE Phacility Core

This is the code for initializing, deploying, and administrating devices in the cluster. It is deployed first, to every device which we deploy any code to. It includes code to install dependencies so it can bootstrap itself onto a device.

This is not a Phabricator extension and code in rCORE is not available to Phabricator instances at runtime. rCORE does depend on libphutil, so core utility classes are available to rCORE.

Most of the UI is scripts which are run via the CLI. For example, it contains code to:

  • install software on new devices;
  • configure devices according to device roles;
  • restart and upgrade services on devices; and
  • provide administrative access to devices.

For details on deploying and administrating devices, see CLI Tools.

rSERVICES Phacility Services

This is a Phabricator extension which is deployed everywhere that we deploy Phabricator. Primarily, it provides a SiteConfig class which is injected into the configuration stack and handles instance logic, so that requests to different instances operate differently even though they may be served by the same device.

rSAAS Instances Application

This is a Phabricator application called "Instances" which provides a GUI for users to launch, administrate, manage, and pay for Phacility instances. It is deployed on admin.phacility.com.

rSSH Phacility SSH

This is a lightly patched fork of OpenSSH. It adds:

  • A ForceUser directive, which allows us to differentiate instances based on the connecting username without needing a real account for each instance.

This runs on hosts which accept VCS SSH traffic.

Last Author
epriestley
Last Edited
Mar 3 2015, 8:54 PM

Event Timeline

epriestley created this document.Feb 1 2015, 4:07 PM
epriestley edited the content of this document. (Show Details)
epriestley edited the content of this document. (Show Details)
chad edited the content of this document. (Show Details)Mar 3 2015, 8:53 PM
epriestley edited the content of this document. (Show Details)Mar 3 2015, 8:54 PM