# Advanced Installation

{% hint style="danger" %}
**This page outlines the manual installation process for those proficient with the Linux command line. Most people will want to follow the** [**Generic VPS installation**](/docs/install/generic-vps-installation.md) **or** [**Racknerd Installation**](/docs/install/racknerd-installation.md) **guides instead.**
{% endhint %}

{% hint style="info" %}
Installation can occur on any Ubuntu Linux server with an AMD64-compatible or ARM64 CPU.
{% endhint %}

{% hint style="warning" %}
Alma Linux is the only version of Linux that is officially unsupported due to issues it consistently causes with Docker, but please use Ubuntu.  &#x20;
{% endhint %}

{% hint style="info" %}
Check to ensure your server has a [swap partition ](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04)enabled, Digital Ocean droplets do not come with swap preconfigured.
{% endhint %}

{% hint style="info" %}
Redis recommends that **`vm.overcommit_memory = 1`** be set in /etc/sysctl.conf. After changing /etc/sysctl.conf, run the command **`sysctl vm.overcommit_memory=1`**
{% endhint %}

{% hint style="warning" %}
**Make sure ports 80, 443, 587, 8025, and 2525 are not in use by another application, firewalled, or blocked by SELinux.**
{% endhint %}

To install and setup your platform we're going to need to complete the following steps, which will be outlined in detail below:

* [ ] SSH into a Linux VPS or server or use the Digital Ocean Droplet Console
* [ ] Install Docker
* [ ] Download the installation archive to your server
* [ ] Unpack the archive
* [ ] Change directory to edcom-install
* [ ] Load the Docker images
* [ ] Edit the edcom.json file, enter your domain name and platform license key
* [ ] Start the platform
* [ ] Create an administrator account
* [ ] Log into the platform with your administrator account in a web browser using the domain name you entered in the config file&#x20;

Run the curl one-liner emailed to you with your embedded license key to download the installation archive, e.g.:&#x20;

{% code overflow="wrap" %}

```
curl -L https://api.keygen.sh/v1/accounts/5b5014e5-3f60-430e-af80-b0004f2eb853/artifacts/edcom-install.tgz -H 'Authorization: License XXXXXXXXXXX-V3' -o edcom-install.tgz
```

{% endcode %}

Extract the archive **as the root user** in the desired install location:

```
tar xzvf edcom-install.tgz
```

{% hint style="info" %}
Files will be extracted into a single directory named **edcom-install** where the entirety of the emaildelivery.com platform will reside going forward.
{% endhint %}

Change to the edcom-install directory:

```
cd edcom-install
```

**Install Docker Engine**

We include an automated Docker installation script for Ubuntu:

```
./install_docker_on_ubuntu.sh 
```

See Docker installation instructions for [Debian](https://docs.docker.com/engine/install/debian/), [CentOS](https://docs.docker.com/engine/install/centos/), [Fedora](https://docs.docker.com/engine/install/fedora/)

Run the following command to load the Docker images:

```
./load_images.sh
```

Copy the file `config/edcom.defaults.json` to `config/edcom.json`

`cp config/edcom.defaults.json config/edcom.json`

Open the config/edcom.json file with an editor such as Nano, Vim, or Emacs and edit the following lines:

```
"admin_url": "http://your_domain_name",
"license_key": "LICENSE KEY THAT YOU USED TO DOWNLOAD THE SOFTWARE",
"smtphost": "your_domain_name"
```

{% hint style="info" %}
The admin\_url and`smtphost`are your platform's **management domain**, use a subdomain such as esp.mydomain.com.
{% endhint %}

{% hint style="warning" %}
The admin\_url must be a valid domain that has a DNS A record pointed at the IP of the installation server.&#x20;
{% endhint %}

{% hint style="danger" %}
**After this step, the admin\_url domain can only be changed with the ./update\_domain.sh command.**&#x20;
{% endhint %}

To start the platform, run the following command:&#x20;

```
./restart.sh
```

Then run the following command to create your administrator account:&#x20;

&#x20;  `./create_admin.sh "youremail@yourdomain.com" "Your Name" "Company Name"`

The email address you use here doesn't have to be a real one, it's just your Administrator username.&#x20;

{% hint style="info" %}
Set your administrator password and initialization will complete. &#x20;
{% endhint %}

Run `./create_admin.sh --help` for more information and `./reset_password.sh -h` if you lose your administrator password.

{% hint style="success" %}
**The installation should now be accessible in your web browser at the admin\_url domain.**
{% endhint %}

Next, enable [Let's Encrypt](/docs/options-for-adding-https/free-native-ssl-via-lets-encrypt.md) for HTTPS://.


---

# 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.emaildelivery.com/docs/install/advanced-installation.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.
