Ubuntu 24.04 LTS ("Noble Numbat") is the recommended host for a 2026 Senddera install. It ships PHP 8.3 in the universe repo, MySQL 8.0 from the official PPA, and is supported until April 2029 — long enough to outlive a typical Senddera major-version cycle. This guide walks the install end-to-end, from a freshly-provisioned droplet to a working https://mail.example.com admin login.
Tested against a $9 Hetzner CPX21 (3 vCPU AMD, 4 GB RAM, 80 GB SSD) and a DigitalOcean $24 Premium AMD 2vCPU/4GB droplet — both pass the Server Requirements "Small tier" bar comfortably. If you're targeting > 500k sends/month, scale RAM to 8 GB and split the database to a managed instance (see scaling guide).
Step 0 — Pre-flight checklist
Before the SSH session, line up:
- A 2 vCPU / 4 GB / 50 GB Ubuntu 24.04 droplet with a public IPv4. Cheaper hosts like Hetzner CX22 work for hobby tier; production should use 4 GB or more.
- A domain name (e.g.
mail.example.com) with theArecord pointing at the droplet IP. Wait for DNS propagation (dig +short mail.example.comshould return your IP) before requesting an SSL certificate. - A non-root sudo user — every command below assumes you've already done
adduser acelle,usermod -aG sudo acelle, andssh-copy-id acelle@host. Never run Senddera as root. - An Senddera purchase code from CodeCanyon. You'll paste it during the web installer at the end.
The Senddera-latest.zip (full install bundle, ~270 MB per the Senddera support handbook) is what you'll use — not the patch .bin file. Patches only apply to existing installs.
Step 1 — System packages
sudo apt-get update -y && sudo apt-get upgrade -y
sudo apt-get install -y software-properties-common ca-certificates lsb-release \
curl wget unzip gnupg2 dirmngr
software-properties-common is needed for the add-apt-repository command in the next step. The other packages are belt-and-suspenders — unzip for the install bundle, curl/wget for fetching it, gnupg + dirmngr for the PPA signing key.
Step 2 — PHP 8.3 (the engine)
Senddera 4.2+ requires PHP 8.2 or newer. Ubuntu 24.04 ships PHP 8.3 in universe, but the Ondrej PPA gives faster security updates and the same package layout the Senddera support team uses across hundreds of installs (see the support handbook's PHP 8.2 Install & Switch section). Install via the PPA:
sudo add-apt-repository -y ppa:ondrej/php
sudo apt-get update -y
sudo apt-get install -y php8.3 php8.3-fpm php8.3-mysql php8.3-mbstring \
php8.3-xml php8.3-curl php8.3-zip php8.3-gd php8.3-intl \
php8.3-imap php8.3-gmp php8.3-sqlite3 php8.3-mailparse php8.3-bcmath \
php8.3-redis php8.3-soap
Bump the php.ini knobs that Senddera will hit on real campaigns:
sudo sed -i 's/^memory_limit = .*/memory_limit = 512M/' /etc/php/8.3/fpm/php.ini
sudo sed -i 's/^upload_max_filesize = .*/upload_max_filesize = 300M/' /etc/php/8.3/fpm/php.ini
sudo sed -i 's/^post_max_size = .*/post_max_size = 300M/' /etc/php/8.3/fpm/php.ini
sudo sed -i 's/^max_execution_time = .*/max_execution_time = 300/' /etc/php/8.3/fpm/php.ini
# Apply the same to CLI ini for artisan / queue workers
sudo sed -i 's/^memory_limit = .*/memory_limit = 512M/' /etc/php/8.3/cli/php.ini
Why those numbers? upload_max_filesize and post_max_size of 300 MB give headroom for the patch upgrade flow (the .bin file is 100-150 MB and the full zip is 270 MB) — picking the larger value avoids a mid-upgrade failure where nginx accepts the body but php-fpm rejects it. memory_limit of 512 MB covers list imports of 250k+ subscribers in a single CSV.
sudo systemctl enable --now php8.3-fpm
Step 3 — MySQL 8.0
Ubuntu 24.04's universe ships MySQL 8.0:
sudo apt-get install -y mysql-server
sudo mysql_secure_installation
# Answer: VALIDATE PASSWORD = no (you control Senddera's password yourself);
# remove anonymous users = yes; disallow root remotely = yes;
# remove test database = yes; reload privileges = yes.
Create the Senddera database and a dedicated DB user:
sudo mysql <<SQL
CREATE DATABASE Senddera
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'Senddera'@'localhost' IDENTIFIED BY '$(openssl rand -base64 24)';
GRANT ALL PRIVILEGES ON Senddera.* TO 'Senddera'@'localhost';
FLUSH PRIVILEGES;
SQL
utf8mb4 is non-negotiable. Old Senddera installs (pre-2022) shipped
utf8_unicode_ci— that's a 3-byte charset that chokes on emoji subject lines and certain Asian characters. The support handbook's troubleshooting section ("DB charset utf8 vs utf8mb4") records repeated incidents where the template seeder fails because of this — always useutf8mb4on a fresh install.
Step 4 — Redis 7
Optional but strongly recommended — Redis backs the queue + cache and yields meaningful throughput gains over the default file-driver queue:
sudo apt-get install -y redis-server
sudo sed -i 's/^supervised .*/supervised systemd/' /etc/redis/redis.conf
sudo systemctl restart redis-server
sudo systemctl enable redis-server
The supervised systemd line is what lets systemctl correctly track Redis health for restart-on-failure semantics.
Step 5 — Nginx 1.24
sudo apt-get install -y nginx
sudo systemctl enable --now nginx
sudo ufw allow 'Nginx Full' # opens 80 + 443 if ufw is active
Drop the Senddera vhost at /etc/nginx/sites-available/Senddera:
server {
listen 80;
server_name mail.example.com;
root /var/www/Senddera/public;
index index.php index.html;
client_max_body_size 300M;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300;
}
location ~ /\.(?!well-known).* {
deny all;
}
access_log /var/log/nginx/Senddera.access.log;
error_log /var/log/nginx/Senddera.error.log warn;
}
sudo ln -sf /etc/nginx/sites-available/Senddera /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
client_max_body_size 300M matches the PHP post_max_size from Step 2 — they must be equal or larger or the patch-upgrade flow will return a 413 Request Entity Too Large from nginx before php-fpm even sees the request.
Step 6 — Drop in the Senddera bundle
sudo mkdir -p /var/www/Senddera
sudo chown -R $USER:$USER /var/www/Senddera
cd /var/www/Senddera
# Place Senddera-latest.zip in /var/www/Senddera (scp from your laptop)
unzip -q Senddera-latest.zip -d .
sudo chown -R www-data:www-data /var/www/Senddera
sudo chmod -R 0755 /var/www/Senddera
sudo chmod -R 0775 /var/www/Senddera/storage /var/www/Senddera/bootstrap/cache
The 0775 on storage/ and bootstrap/cache/ lets both the web user (php-fpm) and your sudo user write logs, cached views, and the failover storage path during admin tasks.
Step 7 — TLS with certbot
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d mail.example.com \
--non-interactive --agree-tos --email you@example.com --redirect
The --redirect flag rewrites the nginx HTTP block to redirect to HTTPS — important because the Senddera installer hard-fails with "mixed content" if it loads over HTTP after admin URLs have been generated as HTTPS.
Certbot's auto-renewal cron is installed by default at /etc/cron.d/certbot. Verify it's there:
cat /etc/cron.d/certbot
# Expect: 0 */12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(43200))' && certbot -q renew
Step 8 — Supervisor for the queue worker
sudo apt-get install -y supervisor
sudo tee /etc/supervisor/conf.d/Senddera-worker.conf <<CONF
[program:Senddera-worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /var/www/Senddera/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/log/Senddera-worker.log
CONF
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start Senddera-worker:*
Two workers is the right starting point at the Small tier (50k - 500k sends/month). Add numprocs=4 at Medium tier; see the queue workers cookbook for tuning.
Step 9 — Cron
sudo crontab -u www-data -e
# Add:
* * * * * cd /var/www/Senddera && php artisan schedule:run >> /dev/null 2>&1
The Laravel scheduler runs once per minute and fans out into Senddera's recurring jobs — bounce-handler poll, FBL fetch, retention cleanup, scheduled-campaign dispatch.
Step 10 — Run the web installer
Browse to https://mail.example.com/install. The wizard walks through:
- Environment check — should be all green; if anything is red, the missing PHP extension is named explicitly. Re-install it with
apt-get install php8.3-<ext>. - Database connection — fill in
Senddera/Senddera/ the password you generated in Step 3. - License — paste your CodeCanyon purchase code. Verifies against
verify.Senddera.com:5755. - Admin user — first admin email + password.
- Done — login at
https://mail.example.com/admin.
After login, the first thing to configure is a sending server — see configuring Amazon SES or configuring Mailgun. Without a sending server, Senddera can collect subscribers but can't send.
Post-install verification
Run these from the server:
# 1. PHP 8.3 active
php -v | head -1 # PHP 8.3.x
# 2. Worker is running
sudo supervisorctl status Senddera-worker:*
# 3. Cron will fire
sudo -u www-data crontab -l | grep schedule:run
# 4. Database is reachable from the app
cd /var/www/Senddera && sudo -u www-data php artisan migrate:status | head -5
# 5. Storage is writable
sudo -u www-data touch /var/www/Senddera/storage/test && rm /var/www/Senddera/storage/test
If any of these fail, do not proceed to sending — every one of them is a hard prerequisite. The post-install hardening checklist covers the security wave that should follow next.
Related reading
- Server Requirements and Hosting Options for Senddera — pick the right tier first
- Install Senddera on Debian 12 — same flow on Debian
- Docker Deployment Guide for Senddera — container-first alternative
- Setting up queue workers and cron jobs — production tuning
- Post-install hardening checklist — the security follow-up
- Configuring Amazon SES with Senddera — first sending server
FAQ
Do I need PHP 8.3 specifically, or will 8.2 / 8.4 work?
PHP 8.2 is the minimum. PHP 8.3 is the recommended target as of 2026 — it ships in Ubuntu 24.04's repos, has long support, and matches what the Senddera support team tests. PHP 8.4 also works (verified by support tickets) but isn't the default in Ubuntu 24.04.
Can I use MariaDB instead of MySQL?
Yes — MariaDB 11.x is supported. Install with apt-get install mariadb-server instead of mysql-server, then run the same CREATE DATABASE / CREATE USER commands. Connection settings are identical because the MySQL client driver speaks both.
What if I don't have a domain yet?
You can run Senddera on http://your-server-ip/ for testing, but you cannot send transactional or marketing email without a from-domain that has SPF/DKIM/DMARC pointed at your sending server. Buy a domain before configuring sending — see DNS setup deep dive.
How do I upgrade later?
The Senddera upgrade flow uses a patch-x.x.x-pNN.bin file applied via the /upgrade/run-file API or via SSH. The full zip is only used for fresh installs. See the Senddera upgrade guide for the operations sequence.