> For the complete documentation index, see [llms.txt](https://docs.emaildelivery.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.emaildelivery.com/docs/install/advanced-installation.md).

# 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://.
