# Elentra Deployment

As of Elentra ME 1.19, the recommended deployment strategy for deploying Elentra to servers is to use a PHP-based deployment tool called [Deployer](https://deployer.org). The Elentra Deployment Tool v2.0.0 recipe is based off of Deployer v6.8.0, which comes pre-installed with the Elentra Developer Docker environment and can easily be [installed on host workstations or CI/CD servers](https://deployer.org/docs/installation.html).

## Obtaining Elentra Deployment Tool

To obtain the standard Elentra Deployment Tool template, you can either:

1. If your local `elentra-developer` Docker environment is up to date, then the template already exists on your computer in the `~/Documents/elentra-developers/resources/templates/deployer/v6` directory. If you're not up to date, simply pull down the latest commits from the `master` branch.
2. Alternatively, you can always download the latest from our [elentra-developer GitHub repository](https://github.com/ElentraProject/elentra-developer/tree/master/resources/templates/deployer/v6).

## Configuration Variables

The following describes the default available deployment variables.

| Variable                    | Description                                                                                                                                                                                                       |
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `application`               | Application Name (e.g.,`uni-elentra-1x-me`)                                                                                                                                                                       |
| `packagist_token`           | Institutional Packagist.com Composer token                                                                                                                                                                        |
| `repository`                | Branded Edition Elentra ME Git repository location                                                                                                                                                                |
| `branch`                    | The default deployment branch (e.g., `master`) within your Branded Edition Elentra ME Git repository. This value is always overridden by the host configuration section (if present), so it not overly important. |
| `repository_ejs`            | Branded Edition Elentra JS 2.x Git repository location.                                                                                                                                                           |
| `branch_ejs`                | The default deployment branch (e.g., `master`) within your Branded Edition Elentra JS Git repository. This value is always overridden by the host configuration section (if present), so it not overly important. |
| `enable_branded_api`        | If you have a Branded Edition Elentra API with your implementation of Elentra then please set this to `true`. Default value is `false`.                                                                           |
| `allow_anonymous_stats`     | It is not recommended to change this value. Default value is `false`.                                                                                                                                             |
| `build_directory`           | Local build directory where repositories are stored before deployment. Default value is `/tmp`.                                                                                                                   |
| `clear_paths`               | Array of files or directories removed from host(s) after deployment. Default value is `www-root/setup`.                                                                                                           |
| `default_stage`             | Default stage to be deployed with dep deploy. Default value is `staging`.                                                                                                                                         |
| `enable_restart_supervisor` | Restart supervisord during the deployment process. Requires appropriate permissions. Default value is `true`.                                                                                                     |
| `exclude_paths`             | Exclude any files or directories in Elentra's .deployignore from deployment upload. Default value is `true`.                                                                                                      |
| `git_tty`                   | Allocate tty for git clone. Default value is `false`.                                                                                                                                                             |
| `keep_releases`             | Number of previous deployments to keep on the server. Default value is `10`.                                                                                                                                      |

## Host Configuration

{% hint style="info" %}
For more documentation related to host configuration options, please see the [Deployer Hosts documentation](https://deployer.org/docs/hosts.html), which is quite extensive.
{% endhint %}

### Single Server

This section illustrates a single server that has multiple Apache virtual hosts defined, which are used for both staging and production.

```
// Staging Server
host('elentra.med.university.edu/staging')
    ->stage('staging')
    ->user('staging')
    ->set('branch', 'uni/staging')
    ->set('branch_ejs', 'develop')
    ->set('deploy_path', '/var/www/vhosts/elentra-staging.med.university.edu')
    ->roles('app')
    ->forwardAgent();

// Production Server
host('elentra.med.university.edu/production')
    ->stage('production')
    ->user('production')
    ->set('branch', 'uni/production')
    ->set('branch_ejs', 'master')
    ->set('deploy_path', '/var/www/vhosts/elentra.med.university.edu')
    ->roles('app')
    ->forwardAgent();
```

### Single Staging Server, Multiple Production Servers

This section illustrates a single staging server and multiple separate production server hosts.

{% hint style="success" %}
Tip: When deploying to multiple production servers, you should use the `-p` or `--parallel` flag to deploy to multiple servers at the same time: `dep deploy production -p`

Deployer also supports host ranges (e.g., `elentra[01:05].med.university.edu`).
{% endhint %}

```
// Staging Server
host('elentra-staging.med.university.edu')
    ->stage('staging')
    ->user('staging')
    ->set('branch', 'uni/staging')
    ->set('branch_ejs', 'develop')
    ->set('deploy_path', '/var/www/vhosts/elentra-staging.med.university.edu')
    ->roles('app')
    ->forwardAgent();

// Production Server
host('elentra01.med.university.edu', 'elentra02.med.university.edu')
    ->stage('production')
    ->user('production')
    ->set('branch', 'uni/production')
    ->set('branch_ejs', 'master')
    ->set('deploy_path', '/var/www/vhosts/elentra.med.university.edu')
    ->roles('app')
    ->forwardAgent();
```

## Deployment Commands

{% hint style="info" %}
Deployer deployment commands are typically executed from within your Elentra Developer Docker Environment within the `/var/www/vhosts/uni-elentra-1x-me/deployment` directory, but can also be executed by your CI/CD server to automate the deployment process.
{% endhint %}

### Commonly Used Commands

| Deployer                | Notes                                                                                |    |                                                            |
| ----------------------- | ------------------------------------------------------------------------------------ | -- | ---------------------------------------------------------- |
| `dep deploy staging`    |                                                                                      |    |                                                            |
| `dep deploy production` | <p>Add <code>-p</code> flag to speed up multi-server deployments.</p><p>Add <code>-v | vv | vvv</code> flag to increase the verbosity of messages.</p> |
| `dep rollback staging`  |                                                                                      |    |                                                            |
| `dep ssh hostname`      | Connect via SSH to the specified host.                                               |    |                                                            |

### Command Reference

```
Options:
  -h, --help               Display this help message
  -q, --quiet              Do not output any message
  -V, --version            Display this application version
      --ansi               Force ANSI output
      --no-ansi            Disable ANSI output
  -n, --no-interaction     Do not ask any interactive question
  -f, --file[=FILE]        Specify Deployer file
      --tag=TAG            Tag to deploy
      --revision=REVISION  Revision to deploy
      --branch=BRANCH      Branch to deploy
      --first-run          Skips deployment steps not required during initial deployment
      --force-build        Deletes the local build directories and forces a new build
  -v|vv|vvv, --verbose     Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  autocomplete                 Install command line autocompletion capabilities
  build                        Build all required application components
  cleanup                      Cleaning up old releases
  deploy                       Deploy Elentra ME to host(s)
  help                         Displays help for a command
  init                         Initialize deployer in your project
  list                         Lists commands
  rollback                     Rollback to previous release
  run                          Run any arbitrary command on hosts
  self-update                  Updates deployer.phar to the latest version
  ssh                          Connect to host through ssh
 build
  build:clean                  Remove all build directories
  build:ejs2                   Local: Build Elentra JS 2.x, if required
  build:ejs2:clean             Local: Remove Elentra JS 2.x local build directory
  build:me                     Local: Build Elentra ME
  build:me:clean               Local: Remove Elentra ME local build directory
  build:prerequisites          Local: Test for build prerequisites
 config
  config:current               Show current paths
  config:dump                  Print host configuration
  config:hosts                 Print all hosts
 debug
  debug:task                   Display the task-tree for a given task
 deploy
  deploy:clear_paths           Cleaning up files and/or directories
  deploy:copy_dirs             Copy directories
  deploy:lock                  Lock deploy
  deploy:migrate               Once: Run database migrations (on first host in stage only)
  deploy:prepare               Preparing host for deploy
  deploy:release               Prepare release. Clean up unfinished releases and prepare next release
  deploy:shared                Creating symlinks for shared files and dirs
  deploy:symlink               Creating symlink to release
  deploy:unlock                Unlock deploy
  deploy:writable              Make writable dirs
 finalize
  finalize:clear_cache         Clear the PHP opcode cache
  finalize:restart_supervisor  Restart supervisord daemon
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.elentra.org/technical/developers/elentra-deployment.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
