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.
|rP||Phabricator||Open Source||400K||All Web||Software engineering platform.|
|rARC||Arcanist||Open Source||50K||All Web||Phabricator library.|
|rPHU||libphutil||Open Source||50K||All Web||Phabricator library.|
|rCORE||Phacility Core||Proprietary||2K||All Web||Operational and deployment tools.|
|rSERVICES||Phacility Services||Proprietary||1K||All Web||Configuration for instances.|
|rSAAS||Instances App||Proprietary||5K||Admin||User-facing administrative GUI.|
|rSSH||Phacility SSH||Proprietary||50||Special||Lightly patched fork of OpenSSH.|
- 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.
Phabricator is deployed to all devices which run application web servers.
Arcanist is deployed to all devices where Phabricator is deployed.
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.