Get answers quicker by searching

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion

What hosting server do you use with Sendy?
  • 214 Comments
  • Hi there!

    I want to take this opportunity to introduce Boldermail, a WordPress plugin that uses the Sendy API to manage lists and subscribers and to create campaigns all from within your WordPress dashboard. My wife and I run The Postman's Knock, the #1 online resource for learning calligraphy. We have a list of 100,000 subscribers, and as a result, we were paying Mailchimp around $500 a month for delivering our emails 2x per week. When I heard about Sendy, I knew I had to make the switch immediately! However, getting my wife on board was a bit more difficult since she was used to the Mailchimp UI. So, I developed Boldermail as a WordPress plugin to interact with our Sendy installation so that my wife would be able to use an interface that she is familiar with, WordPress. We have been using Boldermail for over a year now, and now that it's tried-and-true, we're ready to offer it to others.

    Boldermail is both a WordPress plugin and a Sendy hosting service. When you create an account with us here, we manage your Sendy server, and we provide you with an API key to connect your WordPress website to Sendy through our plugin. Then, you can add or update your lists, manage your subscribers, and create newsletters -- all within Wordpress. We also offer the option to convert your blog posts (your RSS feed) to newsletters and send them to your readers at specific times! The plugin includes 8 different HTML templates, or you can design your own.

    How are we different? For starters, we were our own first client. Boldermail was developed to meet our needs, and we love it so much that we knew we had to make it available to others. It's an incredible solution for sending out emails without paying a huge premium to do so. You can find our story here! Second, we have studied Sendy's performance extensively for over a year. We have tried several servers configurations at different companies, and chosen the best server options and sending rates for you!

    If you are interested in our services, please check out our plans here. You can calculate your savings compared to using Mailchimp here.

    I can guarantee you that we strive to make Boldermail the best it can be, as we ourselves still depend on it 100% to power The Postman's Knock mailing list! If you have any questions, please don't hesitate to reach out.

    Sincerely,

    Hernan Villanueva

  • Vote Up0Vote Down GPZsGPZs
    Posts: 5Sendy user

    @Globeadmin curious to know which Hostgator plan you're using? I'm with HG using a business / reseller plan and considering either upgrading to VPS or moving to a different host that's more competitive with VPS pricing. HG isn't exactly working hard to keep my business at this point... Amazon SES is all set up, working and verified, so it's the hosting side I need to get completely nailed down as far as resources needed.

    My list is currently 133K and will grow at 1K per month (average) new subs, so I'm having issues with the list upload job being killed using the business plan. Haven't even sent a full campaign if it won't pull the list up without choking. I know it's not really the right plan to use, so I'm curious to know which HG plan you're using?

  • Vote Up0Vote Down GPZsGPZs
    Posts: 5Sendy user

    For more info per the post above, I'm also looking at Dreamhost and Liquidweb for potential VPS hosting. I'd prefer at this point to stay with managed hosting so the server side software (other than what I use, which is fairly minimal) is kept up to date and secure for me.

    I don't need tons of storage, overall files right now are at roughly 1 GIG, so it's more important with all things considered to have speed and server resources as opposed to tons of storage or massive amounts of bandwidth. If anyone has input on the VPS's they prefer, I'm listening. Have read through this thread several times, but much of the info is somewhat old.

    As an FYI, not looking for AWS or droplets quite yet and eventually may have my own linux network as a segregated network at my office. I have a 10 day deadline until the next marketing campaign, so I am currently focusing on the hosting side of this equation to be solved.

  • Vote Up0Vote Down GPZsGPZs
    Posts: 5Sendy user

    Adding to the last two (2) above posts, I've given up on Hostgator (HG) and did the install for AWS EC t2 that @colcol was gracious enough to documents and post a link to here in this discussion on page 4. MAD PROPS to you, sir, for taking the time to do that!!

    It's definitely worth taking the time to do the AWS setup and it's a bit daunting at first, but once it's finally complete, you'll be glad you took the time to do it. One note on the CSV upload, save yourself some time and break the uploads in to 20K chunks if you have a large list, trust me on this. Sendy doesn't seem to want to allow a list much larger than this to be uploaded via CSV, no matter what PHP settings you use server side.

    Huge thanks to @Ben @colcol and many other members that have posted + contributed here on this thread and in the discussion forums for silently assisting me in this process.

  • Vote Up0Vote Down AlexJAlexJ
    Posts: 5Sendy user

    Here is my current and tested guide for installing Sendy v4 on DigitalOcean including automated database backups and https configuration: https://medium.com/@alexjacobs/installing-sendy-as-a-replacement-for-mailchimp-2019-version-4-update-the-complete-guide-with-a9358bbb2399 .

  • Vote Up0Vote Down jamescridlandjamescridland
    Posts: 15Sendy user

    If Sendy works quite happily on a t2.micro on EC2, then it should work quite happily on a $5/month AWS Lightsail instance, if that helps.

    I'm shifting my Sendy installation over from a shared EC2 instance to its own $5/month Lightsail box this afternoon. (I use an Amazon RDS database, too, so could have got away with an even smaller $3.50 Lightsail box, but decided to avoid that.)

  • Vote Up0Vote Down sinistersoftsinistersoft
    Posts: 3Sendy user

    Dreamhost. No issues at all.

  • Vote Up0Vote Down solamathewsolamathew
    Posts: 1Sendy user

    I use Namecheap Shared hosting but unfortunately it can only work for sending broadcast messages.

    It doesn’t work for automation.

    I was told to migrate to VPS or Dedicated server to be able to set my cron at */1.

  • Vote Up0Vote Down klevrklevr
    Posts: 1Sendy user

    I like DigitalOcean for these types of projects. They have plans as low as $5 if price is a concern, and the hardware is top notch.

  • Vote Up0Vote Down chrisatisbchrisatisb
    Posts: 9Sendy user

    Synology DiskStation on premise.

  • Vote Up0Vote Down rayholtrayholt
    Posts: 5Sendy user

    @solamathew Saw your post about crons at 1 minute increments. I also have shared hosting, but I'm not allowed to do every 1 min either. What I can do though is set up duplicate crons for autoresponders.php at the following intervals 0/30, 1/31, 2/32, 3/33,... all the way up to 29/59. So 30 cron jobs setup and this worked for me. Hope it helps.

  • Vote Up0Vote Down GPZsGPZs
    Posts: 5Sendy user

    @chrisatisb Curious to know how you've set this up? I'm a fan of Synology products and would like to hear any details on your config?

  • Vote Up0Vote Down rickcogleyrickcogley
    Posts: 2Sendy user

    I'd been using webfaction (shared hosting based on centos), but decided to try something new. I got it up and running via Laravel Forge on a Digital Ocean droplet (a small one, about 10 USD / month) running mysql 8. Forge is nice because you just commit to git and it deploys.

    Forge assumes nginx so you need to tweak the nginx config of the forge "site" to make it work (someone shared a variant of this in a gist):

    # FORGE CONFIG (DO NOT REMOVE!)
    include forge-conf/mysendy.com/before/*;
    
    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name mysendy.com;
        server_tokens off;
        root /home/rcsendy01/mysendy.com/;
    
        # FORGE SSL (DO NOT REMOVE!)
        ssl_certificate /etc/nginx/ssl/mysendy.com/844049/server.crt;
        ssl_certificate_key /etc/nginx/ssl/mysendy.com/844049/server.key;
    
        ssl_protocols TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/nginx/dhparams.pem;
    
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options "nosniff";
    
        index index.html index.htm index.php;
    
        charset utf-8;
    
        # FORGE CONFIG (DO NOT REMOVE!)
        include forge-conf/mysendy.com/server/*;
    
        location / {
            try_files $uri $uri/ $uri.php?$args;
        }
    
        location /l/ {
            rewrite ^/l/([a-zA-Z0-9/]+)$ /l.php?i=$1 last;
        }
    
        location /t/ {
            rewrite ^/t/([a-zA-Z0-9/]+)$ /t.php?i=$1 last;
        }
    
        location /w/ {
            rewrite ^/w/([a-zA-Z0-9/]+)$ /w.php?i=$1 last;
        }
    
        location /unsubscribe/ {
            rewrite ^/unsubscribe/(.*)$ /unsubscribe.php?i=$1 last;
        }
    
        location /subscribe/ {
            rewrite ^/subscribe/(.*)$ /subscribe.php?i=$1 last;
        }
    
        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }
    
        access_log off;
        error_log  /var/log/nginx/mysendy.com-error.log error;
    
        error_page 404 /index.php;
    
    
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.4-fpm-rcsendy01.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    
        location ~ /\.ht {
            deny all;
        }
    
        location ~ /\.(?!well-known).* {
            deny all;
        }
    }
    
    # FORGE CONFIG (DO NOT REMOVE!)
    include forge-conf/mysendy.com/after/*;
    

    Don't just copy paste that; instead you need to go line by line and "weave" it into whatever forge sets up for you. Also, let forge install the letsencrypt cert by itself. It will write the "forge ssl" section by itself.

    Mysql 8 needed sql_mode set, but the setting cited in this forum did not work for v 8. Adding this line to /etc/mysql/mysql.conf.d worked, and I restarted mysql via the forge dash:

    sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
    

    I tried Digital Ocean's managed databases and, eventually got it working. It also defaults to mysql v8, but since it's a cluster, they require primary keys. That means, if you restore your sendy db into a DO managed db, you need to do a SET SESSION to turn that requirement off, in your sql dump file, before restoring it. See the SET SESSION line:

    -- phpMyAdmin SQL Dump
    -- version 4.9.4
    -- https://www.phpmyadmin.net/
    --
    -- Host: localhost
    -- Generation Time: Jun 14, 2020 at 10:37 AM
    -- Server version: 5.6.48-88.0
    -- PHP Version: 7.2.31
    
    SET SESSION sql_require_primary_key = 0;    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";
    ...etc...
    

    I gave up on using a DO managed database and just decided to setup a cron job backup. I'm using gobackup, an easy-to-use golang program to backup to local and aws s3. It needs a yml config, which looks like:

    # https://github.com/huacnlee/gobackup
    # gobackup config example
    # -----------------------
    # Put this file in following place:
    # ~/.gobackup/gobackup.yml or /etc/gobackup/gobackup.yml
    models:
      forge_local:
        compress_with:
          type: tgz
        encrypt_with:
          type: openssl
          password: EnCrYpTpAsS-changeme
          salt: false
          openssl: true
        store_with:
          type: local
          keep: 10
          path: /home/forge/backups
        databases:
          rcsendy01:
            type: mysql
            host: localhost
            port: 3306
            database: rcsendy01
            username: rcsendy01
            password: YourMysqlPassword123
        archive:
          includes:
            - /home/forge/.forge/
            - /home/forge/.ssh/
            - /home/rcsendy01/.forge/
            - /home/rcsendy01/.ssh/
            - /home/rcsendy01/.letsencrypt-renew/
            - /etc/nginx/nginx.conf
            - /etc/redis/redis.conf
            - /etc/logrotate.d/
          excludes:
            - /home/forge/.ssh/known_hosts
            - /home/rcsendy01/.ssh/known_hosts
            - /etc/logrotate.d/syslog
      forge_s3:
        compress_with:
          type: tgz
        encrypt_with:
          type: openssl
          password: EnCrYpTpAsS-changeme
          salt: false
          openssl: true
        store_with:
          type: s3
          keep: 20
          bucket: our-forge-backups-001
          region: us-east-1
          path: backups
          access_key_id: ABCDEFGHIJILMN123
          secret_access_key: ZYX123321123321ABCDEFGHIJKLMNOP
        databases:
          rcsendy01:
            type: mysql
            host: localhost
            port: 3306
            database: rcsendy01
            username: rcsendy01
            password: RgjNauwEdPsBBRAwrTe5
        archive:
          includes:
            - /home/forge/.forge/
            - /home/forge/.ssh/
            - /home/rcsendy01/.forge/
            - /home/rcsendy01/.ssh/
            - /home/rcsendy01/.letsencrypt-renew/
            - /etc/nginx/nginx.conf
            - /etc/redis/redis.conf
            - /etc/logrotate.d/
          excludes:
            - /home/forge/.ssh/known_hosts
            - /home/rcsendy01/.ssh/known_hosts
            - /etc/logrotate.d/syslog
    

    That sets up two targets - one local and one on s3. It includes some config files you might want to backup, besides the mysql dump.

    You should make an IAM credential (programmatic is fine) and assign a policy that only allows the needed access to the bucket. Put its credentials in the yaml. Then you can run the backup via gobackup perform or make a crontab entry:

    0 11 * * * /usr/local/bin/gobackup perform > ~/.gobackup/gobackup.log
    

    To decrypt the backup files:

    % openssl enc -d -aes-256-cbc -in /path/to/backup.tar.gz.enc -out /path/to/restore.tar.gz
      password: ****
    % tar -zxvf /path/to/restore.tar.gz
    

    The openssl line will prompt for the encrypt password you set in the yml.

    Hope this helps someone.

  • Vote Up0Vote Down SegunmarkSegunmark
    Posts: 2Sendy user

    I found this http://sendyhosting.co/ May be helpful