Questo tutorial ti mostrerà come installare Mailtrain v2 su Ubuntu 20.04 senza Docker. Mailtrain è un'app di newsletter self-hosted open source, un'alternativa ai fornitori di servizi di posta elettronica commerciali come Mailchimp. Puoi utilizzare Mailtrain per inviare e-mail ai tuoi abbonati e-mail tramite il tuo server di posta elettronica o utilizzando qualsiasi servizio di inoltro SMTP (Sendinblue, SendGrid, AmazonSES, Mailgun, ecc.).
Mailtrain è rilasciato secondo i termini della licenza GPL v3.0, basata su Node.js e MySQL/MariaDB. L'ultima versione è la v2, rilasciata a giugno 2021. Le caratteristiche di Mailtrain sono le seguenti:
- Ti permette di gestire facilmente mailing list di grandi dimensioni (come 1 milione di iscritti).
- Puoi aggiungere abbonati manualmente, tramite l'API, o importarli da un file CSV.
- Supporta campi personalizzati (campi di testo, numeri, menu a discesa o caselle di controllo), unisci tag e moduli personalizzati.
- Segmentazione dell'elenco.
- Campagna RSS:genera automaticamente la newsletter dal feed RSS e inviala agli iscritti.
- Gli abbonati possono caricare le loro chiavi pubbliche GPG e Mailtrain crittograferà la newsletter per loro.
- Ti permette di controllare le statistiche sui clic individuali per ogni link.
- Editor avanzati di modelli di email e editor di codice HTML.
- Automazione:invia email specifiche quando l'utente attiva il tuo trigger predefinito.
- Puoi creare un elenco e-mail aperto (consenti l'iscrizione pubblica) e un elenco e-mail chiuso (gli iscritti vengono aggiunti all'elenco dall'amministratore).
- Crea più utenti con autorizzazioni utente granulari e condivisione flessibile.
- Spazi dei nomi gerarchici per situazioni a livello aziendale
- Localizza l'interfaccia utente per utente
- Esportazione elenco
- Possibilità di inviare a più elenchi con prevenzione della doppia consegna.
- Configurazioni di invio multiple
- SMTP Throttling per impedire al server di inviare un grande volume di e-mail in un breve lasso di tempo, migliorando la consegna delle e-mail.
Fase 1:scegli il provider di hosting giusto
Il self-hosting può farti risparmiare un sacco di soldi. Mailtrain è un software gratuito e open source. Devi solo pagare $ 26 al mese per il VPS (server privato virtuale), che può eseguire un server di posta completo e la piattaforma di email marketing di Mailtrain. Può gestire facilmente milioni di abbonati. Quindi il tuo costo totale è sempre di $ 26 al mese, indipendentemente dal numero di abbonati che hai . Se possiedi milioni di abbonati su MailChimp, il costo sarebbe di migliaia di dollari al mese.
Non è un compito facile trovare un provider VPS (Virtual Private Server) adatto per l'hosting di posta elettronica e l'email marketing. Molte società di hosting come DigitalOcean bloccano la porta 25. DigitalOcean non sbloccherà la porta 25, quindi dovrai configurare l'inoltro SMTP per bypassare il blocco, il che può costarti denaro aggiuntivo. Se utilizzi Vultr VPS, la porta 25 è bloccata per impostazione predefinita. Possono sbloccarlo se apri un ticket di supporto, ma possono bloccarlo di nuovo in qualsiasi momento se decidono che la tua attività di invio e-mail non è consentita. Vultr potrebbe effettivamente bloccarlo nuovamente se utilizzi i loro server per inviare newsletter.
Un altro problema è che i grandi provider di hosting ben noti come DigitalOcean o Vultr subiscono abusi da parte degli spammer. Spesso l'indirizzo IP del server si trova in diverse blacklist. Vultr ha alcuni interi intervalli IP nella lista nera.
ScalaHosting è un'ottima opzione per eseguire un server di posta perché
- Non bloccano la porta 25.
- L'indirizzo IP non è in nessuna lista nera di email. (Almeno questo è vero nel mio caso. Ho scelto il data center di Dallas.) Sicuramente non vuoi essere elencato nella temuta lista nera IP di Microsoft Outlook o nella lista nera di SpamRats. Alcune blacklist bloccano un intero intervallo IP e non hai modo di rimuovere il tuo indirizzo IP da questo tipo di blacklist.
- Puoi modificare il record PTR per migliorare la consegna delle email.
- Ti consentono di inviare newsletter ai tuoi abbonati e-mail con no limiti orari o limite giornaliero, qualunque. Tieni presente che non sei autorizzato a inviare spam, noto anche come non richiesto e-mail di massa. Se il destinatario non ti dà esplicitamente il permesso di inviare e-mail e tu invii e-mail a lui, si tratta di un'e-mail non richiesta.
Consiglio di seguire il tutorial collegato di seguito per configurare correttamente un server VPS Linux su ScalaHosting. Usa il codice coupon linuxbabe2021
su ScalaHostingpagina di pagamento per risparmiare $ 100 se scegli di pagare 12 mesi in anticipo.
- Come creare un server VPS Linux su ScalaHosting
Hai anche bisogno di un nome di dominio. Ho registrato il mio nome di dominio da NameCheap perché il prezzo è basso e ti danno protezione della privacy whois gratis per tutta la vita.
Se non hai ancora il tuo server di posta, ti consiglio di utilizzare il programma gratuito iRedMail per configurare rapidamente il tuo server di posta prima di installare Mailtrain, in modo da non dover spendere soldi per il servizio di inoltro SMTP commerciale.
Passaggio 2:aggiungi utente Sudo
Ho installato Mailtrain con un utente sudo su Ubuntu 20.04. Per ottenere i migliori risultati, dovresti anche seguire questo tutorial con un utente sudo, non root. Per aggiungere un utente sudo, esegui semplicemente il seguente comando sul server
sudo adduser username sudo adduser username sudo
Quindi passa al nuovo utente.
su - username
Fase 3:installa il server di database MariaDB
Nota :Se hai seguito il mio tutorial di iRedMail per configurare il tuo server di posta elettronica, dovresti già avere MariaDB attivo e funzionante, quindi puoi saltare questo passaggio.
I dati dei tuoi iscritti verranno archiviati in un database. Mailtrain supporta MySQL e MariaDB. MariaDB è un sostituto drop-in di MySQL. È stato sviluppato da ex membri del team MySQL preoccupati che Oracle possa trasformare MySQL in un prodotto closed-source. Quindi installiamo il server del database MariaDB.
Immettere il comando seguente per installare MariaDB su Ubuntu 20.04.
sudo apt install mariadb-server mariadb-client
Dopo l'installazione, il server MariaDB dovrebbe essere avviato automaticamente. Usa systemctl per verificarne lo stato.
systemctl status mariadb
Uscita:
● mariadb.service - MariaDB 10.3.22 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-04-10 14:19:16 UTC; 18s ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Main PID: 9161 (mysqld) Status: "Taking your SQL requests now..." Tasks: 31 (limit: 9451) Memory: 64.7M CGroup: /system.slice/mariadb.service └─9161 /usr/sbin/mysqld
Se non è in esecuzione, avvialo con questo comando:
sudo systemctl start mariadb
Per consentire a MariaDB di avviarsi automaticamente all'avvio, esegui
sudo systemctl enable mariadb
Ora esegui lo script di sicurezza post-installazione.
sudo mysql_secure_installation
Quando ti chiede di inserire la password di root di MariaDB, premi il tasto Invio poiché la password di root non è ancora impostata. Quindi inserisci y per impostare la password di root per il server MariaDB.
Successivamente, puoi premere Invio per rispondere a tutte le domande rimanenti, che rimuoveranno l'utente anonimo, disabiliteranno l'accesso root remoto e rimuoveranno il database di test. Questo passaggio è un requisito di base per la sicurezza del database MariaDB. (Nota che Y è in maiuscolo, il che significa che è la risposta predefinita.)
Fase 4:crea un database e un utente per Mailtrain
Esegui il comando seguente per accedere alla console MariaDB.
sudo mysql -u root
Crea un database per Mailtrain usando il comando seguente. L'ho chiamato mailtrainv2
, ma puoi usare il nome che preferisci. (Non tralasciare il punto e virgola.)
create database mailtrainv2;
Quindi immettere il comando seguente per creare un utente del database per Mailtrain e concedere all'utente tutti i privilegi del database del mailtrain. Sostituisci mailtrain
e mailtrain_password
con il nome utente e la password preferiti.
grant all privileges on mailtrainv2.* to mailtrain@localhost identified by 'mailtrain_password';
Svuota la tabella dei privilegi per rendere effettive le modifiche, quindi esci dalla console di MariaDB.
flush privileges; exit;
Passaggio 5:installa Node.js
Mailtrain è basato su Node.js, che è un ambiente di runtime JavaScript che traduce il codice JavaScript leggibile dall'uomo in codice macchina. Quindi dobbiamo installare Node.js su Ubuntu per eseguire Mailtrain. Mailtrain v2 richiede Node.js 14+. Questo tutorial installerà Node.js e il gestore di pacchetti (npm) dal repository upstream.
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - sudo apt install nodejs
Per controllare la tua versione di Node.js e npm, esegui
node -v npm -v
Uscita:
Nota che non consiglio di installare l'ultima versione LTS di Node.js (v16) dal repository nodesource.com, perché non è molto compatibile con Mailtrain v2. Per compilare e installare componenti aggiuntivi nativi da npm devi anche installare gli strumenti di compilazione:
sudo apt install -y build-essential
Per modificare le immagini nell'editor dei modelli di posta elettronica e negli editor HTML, devi installare ImageMagick.
sudo apt install imagemagick
Passaggio 6:installa Redis Cache
È possibile installare il server Redis per la cache di sessione. Ciò consentirà a Mailtrain di eseguire 5 processi invece del singolo processo predefinito, il che accelererà la consegna delle e-mail se hai molti abbonati e-mail (tieni presente che ciò aumenterà l'utilizzo della memoria di circa 250 MB).
sudo apt install redis
Dopo l'installazione, Redis dovrebbe essere avviato automaticamente. Puoi verificarne lo stato con:
systemctl status redis
Esempio di output:
● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-10-27 20:01:10 HKT; 4 days ago Docs: http://redis.io/documentation, man:redis-server(1) Main PID: 1359 (redis-server) Tasks: 4 (limit: 15514) Memory: 10.8M CGroup: /system.slice/redis-server.service └─1359 /usr/bin/redis-server 127.0.0.1:6379
Se non è in esecuzione, puoi avviarlo con:
sudo systemctl start redis
Abilita l'avvio automatico all'avvio:
sudo systemctl enable redis
Fase 7:esegui Mailtrain
Dovresti lavorare nella tua home directory per questo passaggio.
cd ~
Quindi recupera i file Mailtrain da Github. (Per favore non usare sudo
durante l'esecuzione dei comandi git.)
sudo apt install git git clone https://github.com/Mailtrain-org/mailtrain.git cd mailtrain/ git checkout v2
Importare i dati SQL iniziali nel database mailtrain utilizzando il comando seguente. Devi inserire la password di mailtrain
utente creato nel passaggio 4.
mysql -u mailtrain -p mailtrainv2 < ~/mailtrain/server/setup/sql/mailtrain.sql
Crea il production.yaml
file di configurazione con un editor di testo a riga di comando come Nano.
nano ~/mailtrain/server/config/production.yaml
In questo file puoi aggiungere configurazioni che sovrascrivono le configurazioni predefinite in ~/mailtrain/server/config/default.yaml
file. Abbiamo solo bisogno di aggiungere le seguenti configurazioni. Nota che dovrebbe esserci uno spazio dopo ogni due punti.
user: mailtrain group: mailtrain roUser: nobody roGroup: nobody www: host: 127.0.0.1 proxy: true secret: "Replace this with some random characters" trustedUrlBase: http://mailtrain.example.com sandboxUrlBase: http://sbox-mailtrain.example.com publicUrlBase: http://newsletter.example.com mysql: user: mailtrain password: mailtrain_password database: mailtrainv2 redis: enabled: true log: level: info builtinZoneMTA: enabled: false queue: processes: 5
Mailtrain richiede l'utilizzo di 3 endpoint URL.
mailtrain.example.com
:l'URL attendibile utilizzato dagli utenti che hanno effettuato l'accesso.sbox-mailtrain.example.com
:viene utilizzato per ospitare editor di modelli, non mostrato a nessun utente.newsletter.example.com
:l'URL pubblico visto dai visitatori.
Salva e chiudi il file. Quindi crea il mailtrain
utente e gruppo per l'esecuzione del demone mailtrain. Tieni presente che non è necessario creare una password per questo utente, quindi creiamo un utente di sistema anziché un utente normale.
sudo adduser --system --group --no-create-home mailtrain
Crea un file di configurazione per il report worker.
nano ~/mailtrain/server/services/workers/reports/config/production.yaml
Aggiungi le seguenti configurazioni.
log: level: warn mysql: user: mailtrain password: mailtrain_password database: mailtrainv2
Salva e chiudi il file.
Ora assicurati di essere nel ~/mailtrain/
directory.
cd ~/mailtrain
installare i pacchetti di nodi richiesti. Quello che segue è un singolo comando. Si prega di non utilizzare sudo
.
for idx in client shared server mvis/client mvis/server mvis/test-embed mvis/ivis-core/client mvis/ivis-core/server mvis/ivis-core/shared mvis/ivis-core/embedding; do (cd $idx && npm install) done
Se riscontri il seguente messaggio di errore, puoi ignorarlo.
-bash: cd: mvis/ivis-core/client: No such file or directory -bash: cd: mvis/ivis-core/server: No such file or directory -bash: cd: mvis/ivis-core/shared: No such file or directory -bash: cd: mvis/ivis-core/embedding: No such file or directory
Passa a ~/mailtrain/client/
directory.
cd ~/mailtrain/client
Crea i pacchetti di nodi.
npm run build
Copia la cartella del treno di posta in /var/www/.
sudo mkdir -p /var/www/ cd ~ sudo cp ~/mailtrain /var/www/mailtrainv2 -r
Quindi cambia l'autorizzazione di /var/www/mailtrainv2/
.
sudo chown mailtrain:mailtrain /var/www/mailtrainv2/ -R sudo chmod o-rwx /var/www/mailtrainv2/server/config/
Crea un file dell'unità di servizio systemd per mailtrain.
sudo nano /etc/systemd/system/mailtrainv2.service
Aggiungi le seguenti righe a questo file.
[Unit] Description=Mailtrain server After=syslog.target network.target mariadb.service redis-server.service [Service] Environment="NODE_ENV=production" WorkingDirectory=/var/www/mailtrainv2/server ExecStart=/usr/bin/node index.js Type=simple Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
Salva e chiudi questo file. Quindi avvia mailtrainv2.service
.
sudo systemctl enable --now mailtrainv2.service
Controlla il suo stato. Assicurati che sia in esecuzione.
sudo systemctl status mailtrainv2.service
Esempio di output:
● mailtrainv2.service - Mailtrain server Loaded: loaded (/etc/systemd/system/mailtrainv2.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-11-01 16:42:10 HKT; 8s ago Main PID: 2794663 (mailtrain) Tasks: 25 (limit: 15514) Memory: 258.0M CGroup: /system.slice/mailtrainv2.service ├─2794663 mailtrain ├─2794693 mailtrain: worker executor └─2794701 /usr/bin/node /var/www/mailtrainv2/server/services/importer.js
Se non è in esecuzione, puoi controllare il registro.
sudo journalctl -eu mailtrainv2
Se mailtrainv2.service è in esecuzione, puoi controllare quali porte sta utilizzando con il seguente comando.
sudo netstat -lnpt | grep mailtrain
Fase 8:configurazione del proxy inverso
Possiamo usare Nginx o Apache server web per configurare il proxy inverso.
Nginx
Se usi iRedMail, dovresti scegliere Nginx.
Installa il server web Nginx.
sudo apt install nginx
Crea 3 host virtuali Nginx per i 3 endpoint URL.
sudo nano /etc/nginx/sites-enabled/mailtrain.example.com.conf sudo nano /etc/nginx/sites-enabled/sbox-mailtrain.example.com.conf sudo nano /etc/nginx/sites-enabled/newsletter.example.com.conf
Il contenuto dei 3 file è il seguente:
mailtrain.example.com.conf
server { listen 80; server_name mailtrain.example.com; access_log /var/log/nginx/mailtrain.access; error_log /var/log/nginx/mailtrain.error; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
sbox-mailtrain.example.com
server { listen 80; server_name sbox-mailtrain.example.com; access_log /var/log/nginx/sbox-mailtrain.access; error_log /var/log/nginx/sbox-mailtrain.error; location / { proxy_pass http://127.0.0.1:3003; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
newsletter.example.com.conf
server { listen 80; server_name newsletter.example.com; access_log /var/log/nginx/newsletter.access; error_log /var/log/nginx/newsletter.error; location / { proxy_pass http://127.0.0.1:3004; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Salva e chiudi i file. Quindi testa le configurazioni di Nginx.
sudo nginx -t
Se il test ha esito positivo, ricarica Nginx.
sudo systemctl reload nginx
Apache
Installa il server web Apache.
sudo apt install apache2
Crea 3 host virtuali Apache per i 3 endpoint URL.
sudo nano /etc/apache/sites-enabled/mailtrain.example.com.conf sudo nano /etc/apache/sites-enabled/sbox-mailtrain.example.com.conf sudo nano /etc/apache/sites-enabled/newsletter.example.com.conf
Il contenuto dei 3 file è il seguente:
mailtrain.example.com
<VirtualHost *:80> ServerName mailtrain.example.com ServerSignature Off ProxyPreserveHost On ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ ErrorLog /var/log/apache2/mailtrain.linuxbabe.org.error </VirtualHost>
sbox-mailtrain.example.com
<VirtualHost *:80> ServerName sbox-mailtrain.example.com ServerSignature Off ProxyPreserveHost On ProxyPass / http://127.0.0.1:3003/ ProxyPassReverse / http://127.0.0.1:3003/ ErrorLog /var/log/apache2/sbox.mailtrain.linuxbabe.org.error </VirtualHost>
newsletter.example.com.conf
<VirtualHost *:80> ServerName newsletter.example.com ServerSignature Off ProxyPreserveHost On ProxyPass / http://127.0.0.1:3004/ ProxyPassReverse / http://127.0.0.1:3004/ ErrorLog /var/log/apache2/newsletter.linuxbabe.org.error </VirtualHost>
Salva e chiudi i file. Devi abilitare 3 moduli in Apache.
sudo a2enmod proxy proxy_http headers
Quindi abilita i 3 host virtuali.
sudo a2ensite mailtrain.example.com.conf newsletter.example.com.conf sbox-mailtrain.example.com.conf
Riavvia il server web Apache.
sudo systemctl restart apache2
Passaggio 6:abilita HTTPS
Per crittografare il traffico HTTP quando visiti il server Plex dall'esterno, possiamo abilitare HTTPS installando un certificato TLS gratuito emesso da Let's Encrypt. Esegui il comando seguente per installare il client Let's Encrypt (certbot) su Ubuntu.
sudo apt install certbot
Se usi Nginx server web, devi anche installare il plugin Certbot Nginx.
sudo apt install python3-certbot-nginx
Quindi esegui i seguenti 3 comandi per ottenere e installare il certificato TLS.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d mailtrain.example.com sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d sbox.mailtrain.example.com sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d newsletter.example.com
Se usi Apache server web, devi anche installare il plugin Certbot Apache.
sudo apt install python3-certbot-apache
Quindi esegui il comando seguente per ottenere e installare il certificato TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d mailtrain.example.com sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d sbox.mailtrain.example.com sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d newsletter.example.com
Dove:
--nginx
:usa il plugin nginx.--apache
:usa il plugin Apache.--agree-tos
:Accetta i termini di servizio.--redirect
:Forza HTTPS tramite reindirizzamento 301.--hsts
: Aggiungi l'intestazione Strict-Transport-Security a ogni risposta HTTP. Forzare il browser a utilizzare sempre TLS per il dominio. Difende dallo stripping SSL/TLS.--staple-ocsp
: Abilita la pinzatura OCSP. Una risposta OCSP valida viene pinzata al certificato offerto dal server durante TLS.--email
:il tuo indirizzo email, che viene utilizzato per il recupero dell'account e altri importanti messaggi di notifica.
Il certificato dovrebbe ora essere ottenuto e installato automaticamente.
Ora dovresti modificare /var/www/mailtrainv2/server/config/production.yaml
file e cambia http
a https
. Quindi riavvia il servizio mailtrain.
sudo systemctl restart mailtrainv2
Fase 7:configurazione di Mailtrain
Vai a https://mailtrain.example.com
. Accedi con nome utente admin
e password test
.
Quindi vai su Administration
-> Users
pagina per modificare l'indirizzo email e la password del tuo account.
admin
a qualcos'altro. L'interfaccia web di Mailtrain non fornisce tale opzione, ma puoi cambiare il nome utente nel database MariaDB usando il comando SQL.
Vai a Administration
-> Global Settings
pagina per modificare le configurazioni predefinite. Dovresti cambiare l'indirizzo del servizio da http://localhost:3000/
al tuo sottodominio (https://newsletter.example.com
).
Quindi, vai su Administration
-> send configurations
per configurare le impostazioni SMTP, in modo che il tuo Mailtrain possa inviare e-mail. Per impostazione predefinita, Mailtrain è configurato per utilizzare ZoneMTA. Fare clic sul pulsante Modifica per modificare l'impostazione predefinita.
In Mailer Settings
, puoi utilizzare SMTP se hai il tuo server di posta elettronica o utilizzi Amazon SES. In realtà, puoi anche utilizzare altri servizi di inoltro SMTP in SMTP
scheda. Nello screenshot qui sotto, utilizzo il mio server di posta elettronica. Le email verranno inviate sulla porta 587 con crittografia STARTTLS.
Se Mailtrain è installato sul tuo server di posta elettronica, dovresti utilizzare le seguenti impostazioni SMTP. Il nome host dovrebbe essere 127.0.0.1
e la porta dovrebbe 25
. Non è necessario abilitare la crittografia o l'autenticazione quando si parla con localhost.
Salva le tue impostazioni. Quindi puoi creare un elenco per testare le funzionalità di Mailtrain.
Gestione di utenti e ruoli
Mailtrain v2 supporta più utenti con autorizzazioni utente granulari e condivisione flessibile. Puoi creare utenti aggiuntivi nell'interfaccia web di Mailtrain. Per impostazione predefinita, un utente può assumere 3 ruoli.
- Master globale:questo è l'utente super amministratore.
- Amministratore della campagna
- Nessuno
Le autorizzazioni associate a ciascun ruolo sono definite in /var/www/mailtrainv2/server/config/default.yaml
file.