This is the unofficial Sendy docker repository.
-
Maintained by: Sendy Users
-
Where to get help: the Sendy Troubleshooting & Support Guide, the Sendy Community Forums
-
License Required: Purchasing details
-
Where to file docker-related issues: https://github.com/bubbajames-docker/sendy/issues
-
Where to file application issues: see the Sendy Troubleshooting & Support Guide
Sendy is a self-hosted email newsletter application that lets you send trackable emails via Amazon Simple Email Service (SES). This makes it possible for you to send authenticated bulk emails at an insanely low price without sacrificing deliverability.
For more information and related downloads for Sendy Server and other products, please visit Send.co.
Starting a Sendy instance is simple.
$ docker run -d \
--name sendy \
-e SENDY_FQDN=campaigns.example.com \
-e MYSQL_HOST=db_sendy \
-e MYSQL_PASSWORD=db_password \
bubbajames/sendy:tag
... where sendy
is the name you want to assign to your container, campaigns.example.com
is your FQDN of Sendy server, db_sendy
is your database server instance, db_password
is the database user's password and tag
is the tag specifying the Sendy version you want. See the list of tags above.
HTTP protocol used in Sendy APP_PATH (http
or https
). Default: http
The fully qualified domain name of your Sendy installation. This must match the FQDN associated with your license. You can purchase a license here.
The MySQL server hosting your Sendy database.
The Sendy database name. Default: sendy
.
Database user. Default: sendy
.
Database user's password. Not recommended for sensitive data! (see: Docker Secrets)
Database port. Default: 3306
.
As an alternative to passing sensitive information via environment variables, _FILE
may be appended to the previously listed environment variables, causing the initialization script to load the values for those variables from files present in the container. In particular, this can be used to load passwords from Docker secrets stored in /run/secrets/<secret_name> files. (See repository for sample secrets)
For example:
$ docker run -d --name sendy -e MYSQL_PASSWORD_FILE=/run/secrets/mysql-root -d sendy
Pretty minimalistic Dockerfile
as everything you need is already bundled. Just provide environment variables or environment file.
FROM bubbajames/sendy:5.2
# ... additional apache/php configurations here ...
# e.g. copy your SSL Certificate and apache configurations if not using a load balancer.
The following starts an instance specifying an environment file.
$ docker run -d -name sendy --env_file sendy.env -p 80:80 sendy
SENDY_FQDN=campaigns.example.com
MYSQL_HOST=db_sendy
MYSQL_DATABASE=sendy
MYSQL_USER=sendy
MYSQL_PASSWORD_FILE=/run/secrets/db_password
# MYSQL_PASSWORD=db_password
Starts an HAProxy load balancer instance for SSL termination, a Sendy instance and a MySQL database instance with mounted volume for persisted data between restarts. Also uses Docker Secrets to avoid exposing sensitive data via 'inspect'.
The latest docker-compose.yml
and sample files are available from the image repository. It is highly advised to clone this repository to ensure the latest samples are used.
version: "3.7"
# Volumes for persisted data.
volumes:
data_sendy:
labels:
co.sendy.description: "Data volume for Sendy Database."
# Secret files so they're not exposed via 'docker inspect'
secrets:
db_password:
file: secrets/db_password
db_root_password:
file: secrets/db_root_password
services:
# Database: MySQL
db_sendy:
hostname: db_sendy
container_name: db_sendy
image: mysql:5.6
env_file:
- sendy.env
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
secrets:
- db_root_password
- db_password
volumes:
- data_sendy:/var/lib/mysql
# WebApp: Apache2+PHP+Sendy
sendy:
hostname: sendy
container_name: sendy
depends_on:
- db_sendy
image: sendy:5.2
build:
context: .
# Uncomment to enabled XDEBUG build
# target: debug
env_file:
- sendy.env
secrets:
- db_password
ports:
- 8080:80
# Load Balancer: HAProxy
load-balancer:
hostname: lb_sendy
container_name: lb_sendy
image: lb_sendy
build:
context: .
dockerfile: haproxy/Dockerfile
env_file:
- sendy.env
ports:
- 80:80
- 443:443
$ docker-compose up -d
$ docker-compose down
Crontab is installed and configured with the following jobs.
Schedule your marketing campaigns to send at specific times in the future. This job executes every 5 minutes to determine if any campaigns should be started.
Set up autoresponders to incoming emails. This job executes every 1 minute to determine if any emails require an autoresponse.
Import list of contacts in CSV files. This job executes every 1 minute to determine if any Import List jobs have been created and initiate CSV file import if needed.
Please read Brad Touesnard's article How to Create Your Own SSL Certificate Authority for Local HTTPS Development which inspired the generateSSLCerticate.sh
script used in this project.
Please see license in repository
As with all Docker images, these likely also contain other software that may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained).
As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within.