If you’re tired of paying monthly fees to email marketing platforms like Mailchimp or ConvertKit, Sendy is your answer. For a one-time purchase of $69, you can send unlimited emails to unlimited subscribers using Amazon SES (which costs about $1 per 10,000 emails).
Sounds great, right? But here’s the catch: you need to install it on your own server. Don’t worry—I recently went through this process myself, and I’m going to show you exactly how to do it, step by step.
What You’ll Need
- A VPS (I used AWS EC2 with Ubuntu)
- A domain or subdomain (like marketing.yourdomain.com)
- Sendy installation files (from sendy.co)
- About 30-45 minutes of your time
Let’s get started!
Step 1: Connect to Your Server
First, you need to connect to your VPS using SSH. If you’re on Windows, use WSL (Windows Subsystem for Linux) or PuTTY.
ssh -i your-key.pem ubuntu@your-server-ip
Once you’re in, let’s update everything:
sudo apt update && sudo apt upgrade -y
Step 2: Install Apache Web Server
Sendy needs a web server to run. We’re using Apache because it’s reliable and well-documented.
# Install Apache
sudo apt install apache2 -y
# Enable important modules
sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod headers
# Start Apache
sudo systemctl start apache2
sudo systemctl enable apache2
Step 3: Install PHP
Sendy is built with PHP, so we need that next:
# Add PHP repository
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
# Install PHP and all the extensions Sendy needs
sudo apt install -y php8.1 php8.1-fpm php8.1-mysql php8.1-curl \
php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip libapache2-mod-php8.1
# Check it installed correctly
php -v
Step 4: Install MySQL Database
Sendy needs a database to store all your subscribers and campaign data.
# Install MySQL
sudo apt install mysql-server -y
# Secure it (you'll be asked to set a root password)
sudo mysql_secure_installation
Just answer “Yes” to all the security questions.
Now create a database for Sendy:
sudo mysql -u root -p
Type these commands in MySQL:
CREATE DATABASE sendy;
CREATE USER 'sendy'@'localhost' IDENTIFIED BY 'your_password_here';
GRANT ALL PRIVILEGES ON sendy.* TO 'sendy'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Important: Replace your_password_here with a strong password. Write it down—you’ll need it!
Step 5: Upload Your Sendy Files
If you have Sendy on your computer, you need to get it to your server. From your local computer:
# Create a zip file
zip -r sendy.zip sendy/
# Upload it to your server
scp -i your-key.pem sendy.zip ubuntu@your-server-ip:~/
Back on your server, extract and move it:
# Unzip
unzip sendy.zip
# Move to the web directory
sudo mv sendy /var/www/
# Set the right permissions
sudo chown -R www-data:www-data /var/www/sendy
sudo chmod -R 755 /var/www/sendy
sudo chmod 777 /var/www/sendy/uploads
Step 6: Configure Apache
Create a configuration file for your Sendy site:
sudo nano /etc/apache2/sites-available/sendy.conf
Paste this in (replace with your domain):
<VirtualHost *:80>
ServerName marketing.yourdomain.com
DocumentRoot /var/www/sendy
<Directory /var/www/sendy>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/sendy_error.log
CustomLog ${APACHE_LOG_DIR}/sendy_access.log combined
</VirtualHost>
Save it (Ctrl+X, then Y, then Enter).
Now create a .htaccess file:
sudo nano /var/www/sendy/.htaccess
Paste this:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^l/([a-zA-Z0-9/]+)$ l.php?i=$1 [L]
RewriteRule ^t/([a-zA-Z0-9/]+)$ t.php?i=$1 [L]
RewriteRule ^w/([a-zA-Z0-9/]+)$ w.php?i=$1 [L]
RewriteRule ^unsubscribe/(.*)$ unsubscribe.php?i=$1 [L]
RewriteRule ^subscribe/(.*)$ subscribe.php?i=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Options -Indexes
Enable your site:
# Enable PHP modules
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.1-fpm
# Disable the default site
sudo a2dissite 000-default.conf
# Enable your Sendy site
sudo a2ensite sendy.conf
# Restart Apache
sudo systemctl restart apache2
Step 7: Point Your Domain
Go to your domain registrar (like GoDaddy, Namecheap, etc.) and add an A record:
- Host: marketing (or whatever subdomain you want)
- Type: A
- Value: Your server’s IP address
- TTL: 3600
Wait about 10 minutes for this to take effect.
Step 8: Install SSL Certificate (HTTPS)
Nobody wants their site to show “Not Secure.” Let’s fix that:
# Install Certbot
sudo apt install certbot python3-certbot-apache -y
# Get your free SSL certificate
sudo certbot --apache -d marketing.yourdomain.com
Just follow the prompts. When asked about redirecting HTTP to HTTPS, choose “2” (redirect).
Step 9: Configure Sendy
This is where I made my first mistake. You need to edit the config file BEFORE accessing Sendy in your browser:
sudo nano /var/www/sendy/includes/config.php
Update these lines:
define('APP_PATH', 'https://marketing.yourdomain.com');
$dbHost = 'localhost';
$dbUser = 'sendy';
$dbPass = 'your_database_password'; // From Step 4
$dbName = 'sendy';
Critical: Make sure APP_PATH has NO slash at the end!
Save the file.
Step 10: Open Firewall Ports
If you’re using AWS (or similar), you need to open ports in your security group:
- Go to your EC2 dashboard
- Click “Security Groups”
- Select your instance’s security group
- Add these inbound rules:
- HTTP (port 80) from anywhere
- HTTPS (port 443) from anywhere
- SSH (port 22) from your IP only
Step 11: Complete the Installation
Open your browser and go to: https://marketing.yourdomain.com
You should see the Sendy installation page. Fill in:
- Your name
- Your email
- Your admin password
Click “Install Sendy” and you’re done!
Note: You might see a yellow warning about mod_rewrite. Don’t worry—it’s just a detection issue. If you followed the steps above, everything works fine.
Step 12: Set Up Automated Emails
For scheduled campaigns and autoresponders to work, you need cron jobs:
crontab -e
Choose nano (option 1), then add these lines:
*/5 * * * * php /var/www/sendy/scheduled.php > /dev/null 2>&1
*/1 * * * * php /var/www/sendy/autoresponders.php > /dev/null 2>&1
Save and exit.
Common Problems I Encountered (And How to Fix Them)
Problem 1: “Cannot Connect to Database”
Solution: Make sure you edited the config.php file with the correct database password BEFORE opening Sendy in your browser.
Problem 2: Login Redirect Loop
Solution: Check your APP_PATH in config.php. Make sure it:
- Has NO trailing slash
- Matches your domain exactly
- Uses https:// (not http://)
Problem 3: 404 Errors After Installation
Solution: Your .htaccess file is probably missing or Apache isn’t reading it. Double-check:
# Make sure .htaccess exists
ls -la /var/www/sendy/.htaccess
# Make sure AllowOverride is set to All
sudo nano /etc/apache2/sites-available/sendy.conf
Then restart Apache:
sudo systemctl restart apache2
Problem 4: SSL Certificate Errors
Solution: If Certbot creates a broken configuration, disable it and run Certbot again:
sudo a2dissite sendy-le-ssl.conf
sudo systemctl restart apache2
sudo certbot --apache -d marketing.yourdomain.com
What’s Next?
Now that Sendy is installed, you need to:
- Connect Amazon SES – Go to Settings in Sendy and add your AWS credentials
- Create your first brand – This is like a “profile” for your emails
- Import your subscribers – Upload a CSV of your email list
- Send your first campaign!
Final Thoughts
Installing Sendy took me about an hour on my first try (with some troubleshooting). But now that you have this guide, you should be able to do it in 30-45 minutes.
The best part? You’ll save hundreds or thousands of dollars per year on email marketing costs. With Amazon SES, you only pay about $1 per 10,000 emails sent. Compare that to Mailchimp’s $350/month for 50,000 subscribers!
Pro tip: Set up automated backups of your database and files. You don’t want to lose your subscriber list!
Quick Command Reference
Here are the most useful commands for managing your Sendy installation:
# Restart services
sudo systemctl restart apache2
sudo systemctl restart mysql
# Check if services are running
sudo systemctl status apache2
sudo systemctl status mysql
# View error logs
sudo tail -f /var/log/apache2/sendy_error.log
# Check Apache configuration
sudo apache2ctl configtest
# Backup database
mysqldump -u sendy -p sendy > backup.sql
Need Help?
If you run into issues:
- Check Apache error logs:
sudo tail -50 /var/log/apache2/sendy_error.log - Visit the Sendy forum: https://sendy.co/forum
- Make sure all services are running:
sudo systemctl status apache2 mysql
Good luck with your installation! Once you’re up and running, you’ll wonder why you ever paid those monthly fees to email marketing companies.
Have questions about this guide? Drop them in the comments below. I’ll do my best to help you out!