@title = "Nodes" @summary = "Working with nodes, services, tags, and locations." Node types ================================ Every node has one or more services that determines the node's function within your provider's infrastructure. When adding a new node to your provider, you should ask yourself four questions: * **many or few?** Some services benefit from having many nodes, while some services are best run on only one or two nodes. * **required or optional?** Some services are required, while others can be left out. * **who does the node communicate with?** Some services communicate very heavily with other particular services. Nodes running these services should be close together. * **public or private?** Some services communicate with the public internet, while others only need to communicate with other nodes in the infrastructure. Brief overview of the services: * **webapp**: The web application. Runs both webapp control panel for users and admins as well as the REST API that the client uses. Needs to communicate heavily with `couchdb` nodes. You need at least one, good to have two for redundancy. The webapp does not get a lot of traffic, so you will not need many. * **couchdb**: The database for users and user data. You can get away with just one, but for proper redundancy you should have at least three. Communicates heavily with `webapp`, `mx`, and `soledad` nodes. * **soledad**: Handles the data syncing with clients. Typically combined with `couchdb` service, since it communicates heavily with couchdb. * **mx**: Incoming and outgoing MX servers. Communicates with the public internet, clients, and `couchdb` nodes. * **openvpn**: OpenVPN gateway for clients. You need at least one, but want as many as needed to support the bandwidth your users are doing. The `openvpn` nodes are autonomous and don't need to communicate with any other nodes. Often combined with `tor` service. * **monitor**: Internal service to monitor all the other nodes. Currently, you can have zero or one `monitor` service defined. It is required that the monitor be on the webapp node. It was not designed to be run as a separate node service. * **tor**: Sets up a tor exit node, unconnected to any other service. * **dns**: Not yet implemented. Webapp ----------------------------------- The webapp node is responsible for both the user face web application and the API that the client interacts with. Some users can be "admins" with special powers to answer tickets and close accounts. To make an account into an administrator, you need to configure the `webapp.admins` property with an array of user names. For example, to make users `alice` and `bob` into admins, create a file `services/webapp.json` with the following content: { "webapp": { "admins": ["bob", "alice"] } } And then redeploy to all webapp nodes: leap deploy webapp By putting this in `services/webapp.json`, you will ensure that all webapp nodes inherit the value for `webapp.admins`. Services ================================ What nodes do you need for a provider that offers particular services?
Node Type | VPN Service | Email Service | Notes |
---|---|---|---|
webapp | required | required | |
couchdb | required | required | |
soledad | not used | required | |
mx | not used | required | |
openvpn | required | not used | |
monitor | optional | optional | This service must be on the webapp node |
tor | optional | optional |