<!DOCTYPE html>
<html lang='en'>
<head>
<title>
Services - LEAP Platform Documentation
</title>
<meta content='width=device-width, initial-scale=1.0' name='viewport'>
<meta charset='UTF-8'>
<base href="" />
<style>
  body {
    background: #444;
    display: flex;
    flex-direction: row;
    padding: 10px;
    margin: 0px;
  }
  #sidebar {
    flex: 0 0 250px;
    background: white;
    margin-right: 10px;
    padding: 20px;
  }
  #sidebar ul {
    list-style-type: none;
    padding-left: 0px;
    margin: 0;
  }
  #sidebar li { padding: 4px }
  #sidebar li a { text-decoration: none }
  #sidebar li.active { background: #444 }
  #sidebar li.active a { color: white }
  #sidebar li.level1 { padding-left: 20px }
  #sidebar li.level2 { padding-left: 40px }
  #main {
    flex: 1 1 auto;
    background: white;
    padding: 20px;
  }
  #title-box {
    padding-bottom: 20px;
    border-bottom: 5px solid #eee;
  }
  #title-box h1 {
    margin-top: 0px;
  }
  pre {
    padding: 10px;
    background: #eef;
  }
  code {
    background: #eef;
  }
  table {border-collapse: collapse}
  table td {
    border: 1px solid #ccc;
    padding: 4px;
    vertical-align: top;
  }
</style>
</head>
<body>
<div id='sidebar'>
<ul>
<li class=''>
<a href='../../index.html'>Home</a>
</li>
<li class=' level0'>
<a class='' href='../guide.html'>Guide</a>
</li>
<li class=' level0'>
<a class='' href='../tutorials.html'>Tutorials</a>
</li>
<li class='active level0'>
<a class='' href='../services.html'>Services</a>
</li>
<li class=' level1'>
<a class='' href='couchdb.html'>couchdb</a>
</li>
<li class=' level1'>
<a class='' href='openvpn.html'>openvpn</a>
</li>
<li class=' level1'>
<a class='' href='monitor.html'>monitor</a>
</li>
<li class=' level1'>
<a class='' href='mx.html'>mx</a>
</li>
<li class=' level1'>
<a class='' href='soledad.html'>soledad</a>
</li>
<li class=' level1'>
<a class='' href='tor.html'>tor</a>
</li>
<li class=' level1'>
<a class='' href='webapp.html'>webapp</a>
</li>
<li class=' level0'>
<a class='' href='../upgrading.html'>Upgrading</a>
</li>
<li class=' level0'>
<a class='' href='../troubleshooting.html'>Troubleshooting</a>
</li>
<li class=' level0'>
<a class='' href='../details.html'>Details</a>
</li>
</ul>
</div>
<div id='main'>
<div id='title-box'>
<h1>Guide to node services</h1>

<div id='summary'></div>
</div>
<div id='content-box'>
<div id="TOC"><ol>
  <li>
    <a href="index.html#introduction">Introduction</a>
  </li>
  <li>
    <a href="index.html#available-services">Available services</a>
  </li>
</ol></div>

<h1><a name="introduction"></a>Introduction</h1>

<p>Every node (server) must have one or more <code>services</code> defined that determines what role the node performs. For example:</p>

<pre><code>workstation$ cat nodes/stallman.json
{
  "ip_address": "199.99.99.1",
  "services": ["webapp", "tor"]
}
</code></pre>

<p>Here are common questions to ask when adding a new node to your provider:</p>

<ul>
<li><strong>many or few?</strong> Some services benefit from having many nodes, while some services are best run on only one or two nodes.</li>
<li><strong>required or optional?</strong> Some services are required, while others can be left out.</li>
<li><strong>who does the node communicate with?</strong> Some services communicate very heavily with other particular services. Nodes running these services should be close together.</li>
<li><strong>public or private network?</strong> Some services communicate with the public internet, while others only need to communicate with other nodes in the infrastructure.</li>
</ul>


<h1><a name="available-services"></a>Available services</h1>

<table class="table table-striped">
<tr>
  <th>Service</th>
  <th>VPN</th>
  <th>Email</th>
  <th>Notes</th>
</tr>
<tr>
  <td>webapp</td>
  <td><i class="fa fa-circle"></i></td>
  <td><i class="fa fa-circle"></i></td>
  <td>User control panel, provider API, and support system.</td>
</tr>
<tr>
  <td>couchdb</td>
  <td><i class="fa fa-circle"></i></td>
  <td><i class="fa fa-circle"></i></td>
  <td>Data storage for everything. Private node.</td>
<td></td>
</tr>
<tr>
  <td>soledad</td>
  <td><i class="fa fa-circle-o"></i></td>
  <td><i class="fa fa-circle"></i></td>
  <td>User data synchronization daemon. Usually paired with <code>couchdb</code> nodes.</td>
<td></td>
</tr>
<tr>
  <td>mx</td>
  <td><i class="fa fa-circle-o"></i></td>
  <td><i class="fa fa-circle"></i></td>
  <td>Incoming and outgoing MX servers.</td>
</tr>
<tr>
  <td>openvpn</td>
  <td><i class="fa fa-circle"></i></td>
  <td><i class="fa fa-circle-o"></i></td>
  <td>OpenVPN gateways.</td>
</tr>
<tr>
  <td>monitor</td>
  <td><i class="fa fa-dot-circle-o"></i></td>
  <td><i class="fa fa-dot-circle-o"></i></td>
  <td>Nagios monitoring. This service must be on the webapp node.</td>
</tr>
<tr>
  <td>tor</td>
  <td><i class="fa fa-dot-circle-o"></i></td>
  <td><i class="fa fa-dot-circle-o"></i></td>
  <td>Tor exit node.</td>
</tr>
</table>


<p>Key: <i class="fa fa-circle"> Required</i>, <i class="fa fa-dot-circle-o"> Optional</i>, <i class="fa fa-circle-o"> Not Used</i></p>

<p><div class=' page-summary'>
<h2>
<a href='couchdb.html'>couchdb</a>
</h2>
<div class='summary'>Data storage for all user data.</div>
</div>
<div class=' page-summary'>
<h2>
<a href='openvpn.html'>openvpn</a>
</h2>
<div class='summary'>OpenVPN egress gateways</div>
</div>
<div class=' page-summary'>
<h2>
<a href='monitor.html'>monitor</a>
</h2>
<div class='summary'>Nagios monitoring and continuous testing.</div>
</div>
<div class=' page-summary'>
<h2>
<a href='mx.html'>mx</a>
</h2>
<div class='summary'>Incoming and outgoing MX servers.</div>
</div>
<div class=' page-summary'>
<h2>
<a href='soledad.html'>soledad</a>
</h2>
<div class='summary'>User data synchronization daemon</div>
</div>
<div class=' page-summary'>
<h2>
<a href='tor.html'>tor</a>
</h2>
<div class='summary'>Tor exit node or hidden service</div>
</div>
<div class=' page-summary'>
<h2>
<a href='webapp.html'>webapp</a>
</h2>
<div class='summary'>leap_web user management application and provider API.</div>
</div>
</p>

</div>
</div>
</body>
</html>