🚀 Postal Installation Guide

1. Install Required System Utilities

Make sure basic tools like git, curl, and jq are installed:

apt install git curl jq

2. Clone Postal Helper Repo

Clone the Postal installer to get configuration helpers:

git clone https://github.com/postalserver/install /opt/postal/install
        
sudo ln -s /opt/postal/install/bin/postal /usr/bin/postal

3. Initial Server Setup

Switch to root, update system, and set hostname:

sudo -i
        
apt update -y
apt upgrade -y
hostnamectl set-hostname postal.yourdomain.com

4. Install Docker & Docker Compose

Install Docker and Compose for container-based setup:

# Docker installation
        
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update -y
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Docker Compose
curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version

5. Setup MariaDB (MySQL Not Supported)

Run MariaDB in Docker:

docker run -d \
  --name postal-mariadb \
  -p 127.0.0.1:3306:3306 \
  --restart always \
  -e MARIADB_DATABASE=postal \
  -e MARIADB_ROOT_PASSWORD=postal \
  mariadb

6. Generate Initial Config Files

This generates all core config files:

postal bootstrap postal.yourdomain.com
        
nano /opt/postal/config/postal.yml

7. Enable IP Pools (Optional)

Enable IP pools inside postal.yml:

postal:
  use_ip_pools: true

8. Initialize Database & Create User

postal initialize
        
postal make-user

9. Start Postal & View Status

postal start
        
postal status

10. Run Caddy for HTTPS

Launch Caddy container for SSL termination:

docker run -d \
  --name postal-caddy \
  --restart always \
  --network host \
  -v /opt/postal/config/Caddyfile:/etc/caddy/Caddyfile \
  -v /opt/postal/caddy-data:/data \
  caddy

11. Redirect Port 587 to 25

sudo iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-port 25