# Install ReOrc agent

Data Plane of ReOrc consists of multiple worker hosts to run the data jobs orchestrated from the Control Plane.&#x20;

Each worker contains a service called ReOrc Agent that communicates with Control Plane and manages execution environments on the host. Some rules for setting workers are as follows:

* Multiple workers can be set up for horizontal scalability.
* Workers can be installed in different places across the Internet.
* Workers that are meant for a single environment must be able to communicate with each other. Therefore, it is recommended that workers for the same environment be located in the same local network, for maximum connection stability and minimum latency.

This guide shows you how to set up ReOrc agent.

## Requirements

Your worker hosts should meet these requirements.

**Hardware**:

Depending on the usage, your setup can follow these configuration ranges to optimize the performance with ReOrc.

<table data-full-width="false"><thead><tr><th width="161"></th><th>Number of workers</th><th>CPU (cores / worker)</th><th>Memory (GB / worker)</th><th>Disk (GBs/worker)</th></tr></thead><tbody><tr><td>Minimum</td><td>1</td><td>2</td><td>4</td><td>20</td></tr><tr><td>Recommended</td><td>2+</td><td>4</td><td>16</td><td>100</td></tr></tbody></table>

**Software**:&#x20;

* Operating System: Linux (RHEL and Ubuntu are tested).
* Python: 3.9+, we recommend using a newer version and virtual environment if feasible.
* [Docker](https://docs.docker.com/engine/): 20.10.0+, with Docker Compose installed.

{% hint style="info" %}
Make sure the user runs the ReOrc agent has access to docker cli. This command might be helpful. You may need to logout and re-login to the terminal session after modifying the user's group.

```bash
sudo usermod -aG docker $USER 
```

{% endhint %}

## Set up ReOrc Agent

Follow these steps:

1. On the left sidebar of ReOrc, click on the *Organization* icon and select **Environment & Workers**.
2. Click **Deploy Agent** and follow the on-screen instructions to deploy the agent.

   Alternatively, follow the steps below.

<details>

<summary>Install ReOrc agent in CLI</summary>

1. On the worker host: Install the agent package.

```bash
pip install -U reorc-agent
```

You can verify the installation by running the `reorc version`.

2. On the worker host: Register the host to the Control Plane

```bash
reorc login
```

3. On the **Environments & workers** page, click **Deploy Agent**, copy the API key, and paste it to the host.
4. On the worker host: Start the agent; it will keep sending heartbeats to the Control Plane.

```bash
reorc agent start
```

5. [#run-the-agent-in-background](#run-the-agent-in-background "mention").

   It is essential to maintain persistent functionality and connection of the agent.

</details>

3. Refresh the page to see the newly deployed host. The status should be **Online**.
4. Allocate the agent to an environment.&#x20;

   Once the agent is running with the **Online** status, click *action* > **Join Environment** and select the environment to allocate. When the agent successfully joins the environment, you should see the **Active** status.

{% hint style="info" %}
**Note:**&#x20;

* The `reorc agent start` command starts the agent in the foreground, and will terminate after the terminal session closed. For production deployment, you should let the agent run in the background. For more details, refer to [Run Agent in Background](#run-the-agent-in-background).
* Both `dev` and `prod` must have at least one agent running.
  {% endhint %}

## Actions on an agent

Once the agent is up and running, there are some key actions that you can perform with the service. Click on the *action* button of an agent:

<figure><img src="https://786945529-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFTrGKWnjusKCQj11CkuL%2Fuploads%2FyR6xzUAlZGMoamyM0PBX%2FRecurve_actions_on_agent.png?alt=media&#x26;token=ada52ec3-b0d9-41fe-9f07-efdb127d3031" alt=""><figcaption></figcaption></figure>

Here you can:&#x20;

* **Upgrade Service**: Upgrade the worker service to the latest version.
* **Restart Service**: restart the agent service; the agent will still join the environment after restarting.
* **Stop Service**: stop the agent service; the agent will become inactive.
* **Leave Environment**: remove the agent service from the current environment.

## Run the agent in the background

There are multiple ways to run an agent in the background with [systemd](https://systemd.io/).

<details>

<summary>systemd</summary>

1. Install the ReOrc service with the following command line, and the service will be started automatically after it has been installed.

```bash
reorc service install
```

2. Use the following command to manage the service

```bash
systemctl start reorc-agent
systemctl stop reorc-agent
systemctl status reorc-agent
```

</details>

## Upgrade the agent

Keeping the reorc-agent updated is always recommended.

To upgrade the agent , follow these steps:

1. Stop the agent service.

   Depending on the way you manage the service, you may need to run one of these commands to stop the process:

```bash
# if managed by Systemd
sudo systemctl stop reorc-agent

# if managed by Supervisor
supervisorctl stop reorc-agent
```

2. Upgrade and re-login.

```bash
# Upgrade to the latest version
pip install -U reorc-agent

reorc login
```

3. Start the agent.

```bash
# if managed by Systemd
sudo systemctl start reorc-agent

# if managed by Supervisor
supervisorctl start reorc-agent
```
