Updates in install scripts

This commit is contained in:
root 2018-12-25 18:07:03 +01:00
parent 3f4044c0a9
commit 7b520387d2
10 changed files with 183 additions and 91 deletions

1
.gitignore vendored
View file

@ -5,5 +5,4 @@ node_modules
npm-debug.log npm-debug.log
.DS_Store .DS_Store
dump.rdb dump.rdb
docker-compose.override.yml

View file

@ -1,5 +1,5 @@
# Changelog # Changelog
## 2.0.0 2018-11-23 ## 2.0.0-rc1 2018-12-25
* This is a complete rewrite of Mailtrain v1 with many features added. Just check it out. * This is a complete rewrite of Mailtrain v1 with many features added. Just check it out.

View file

@ -1,22 +1,22 @@
FROM node:10.14-jessie FROM node:10.14-jessie
RUN apt-get update && apt-get install -y pwgen netcat
# First install dependencies # First install dependencies
COPY ../server/package.json ./app/server COPY server/package.json /app/server/package.json
COPY ../client/package.json ./app/client COPY client/package.json /app/client/package.json
COPY ../shared/package.json ./app/shared COPY shared/package.json /app/shared/package.json
COPY ../zone-mta/package.json ./app/zone-mta COPY zone-mta/package.json /app/zone-mta/package.json
WORKDIR /app/ WORKDIR /app/
ENV NODE_ENV production
RUN for idx in client shared server zone-mta; do (cd $idx && npm install); done RUN for idx in client shared server zone-mta; do (cd $idx && npm install); done
# Later, copy the app files. That improves development speed as buiding the Docker image will not have # Later, copy the app files. That improves development speed as buiding the Docker image will not have
# to download and install all the NPM dependencies every time there's a change in the source code # to download and install all the NPM dependencies every time there's a change in the source code
COPY .. /app COPY . /app
RUN cd client && npm run build RUN cd client && npm run build
EXPOSE 3000 EXPOSE 3000 3003 3004
ENTRYPOINT ["bash", "/app/docker/docker-entrypoint.sh"] ENTRYPOINT ["bash", "/app/docker-entrypoint.sh"]

View file

@ -14,10 +14,12 @@
* Automation (triggered and RSS campaigns) * Automation (triggered and RSS campaigns)
* Multiple users with granular user permissions and flexible sharing * Multiple users with granular user permissions and flexible sharing
* Hierarchical namespaces for enterprise-level situations * Hierarchical namespaces for enterprise-level situations
* Builtin Zone-MTA (https://github.com/zone-eu/zone-mta) for close-to-zero setup of mail delivery
## Recommended minimal hardware Requirements
* 2 vCPU
* 4096 MB RAM
## Hardware Requirements
* 1 vCPU
* 2048 MB RAM
## Quick Start ## Quick Start
@ -34,7 +36,6 @@ The recommended deployment of Mailtrain would use 3 DNS entries that all points
- *sbox.mailtrain.example.com* - sandbox endpoint (CNAME record `sbox.mailtrain` under `example.com` domain that points to `lists`) - *sbox.mailtrain.example.com* - sandbox endpoint (CNAME record `sbox.mailtrain` under `example.com` domain that points to `lists`)
### Installation on fresh CentOS 7 or Ubuntu 18.04 LTS (public website secured by SSL) ### Installation on fresh CentOS 7 or Ubuntu 18.04 LTS (public website secured by SSL)
This will setup a publicly accessible Mailtrain instance. All endpoints (trusted, sandbox, public) will provide both HTTP (on port 80) This will setup a publicly accessible Mailtrain instance. All endpoints (trusted, sandbox, public) will provide both HTTP (on port 80)
@ -54,14 +55,14 @@ Thus, by running this script below, you agree with the Let's Encrypt's Terms of
sudo su - sudo su -
``` ```
2. Install git 2. Install GIT
For Centos 7 type: For Centos 7 type:
``` ```
yum install -y git yum install -y git
``` ```
For Ubuntu 18.04 LTS type: For Ubuntu 18.04 LTS type
``` ```
apt-get install -y git apt-get install -y git
``` ```
@ -162,23 +163,43 @@ All endpoints (trusted, sandbox, public) will provide only HTTP as follows:
## Quick Start - Deploy with Docker ### Deployment with Docker and Docker compose
#### Requirements:
* [Docker](https://www.docker.com/) This setup starts a stack composed of Mailtrain, MongoDB, Redis, and MariaDB. It will setup a locally accessible Mailtrain instance with HTTP endpoints as follows.
* [Docker Compose](https://docs.docker.com/compose/) - http://localhost:3000 - trusted endpoint
- http://localhost:3003 - sandbox endpoint
- http://localhost:3004 - public endpoint
#### Steps: To make this publicly accessible, you should add reverse proxy that makes these endpoints publicly available over HTTPS.
Depending on how you have configured your system and Docker you may need to prepend the commands below with `sudo`.
* Download Mailtrain files using git: `git clone git://github.com/Mailtrain-org/mailtrain.git` (or download [zipped repo](https://github.com/Mailtrain-org/mailtrain/archive/master.zip)) and open Mailtrain folder `cd mailtrain` To deploy Mailtrain with Docker, you need the following three dependencies installed:
* Copy the file `docker-compose.override.yml.tmpl` to `docker-compose.override.yml` and modify it if you need to.
* Bring up the stack with: `docker-compose up -d` - [Docker](https://www.docker.com/)
* Start: `docker-compose start` - [Docker Compose](https://docs.docker.com/compose/)
* Open [http://localhost:3000/](http://localhost:3000/) (change the host name `localhost` to the name of the host where you are deploying the system). - Git - Typically already present. If not, just use the package manager of your OS distribution to install it.
* Authenticate as user `admin` with password `test`
* Navigate to [http://localhost:3000/settings](http://localhost:3000/settings) and update service configuration. These are the steps to start Mailtrain via docker-compose:
* Navigate to [http://localhost:3000/users/account](http://localhost:3000/users/account) and update user information and password.
1. Download Mailtrain using git
```
git clone https://github.com/Mailtrain-org/mailtrain.git
cd mailtrain
git checkout development
```
2. Deploy Mailtrain via docker-compose (in the root directory of the Mailtrain project). This will take quite some time when run for the first time. Subsequent executions will be fast.
```
docker-compose up
```
You can specify Mailtrain's URL bases via the `MAILTRAIN_SETTINGS` environment variable as follows. The `--withProxy` parameter is to be used when Mailtrain is put behind a reverse proxy.
```
MAILTRAIN_SETTINGS="--trustedUrlBase https://mailtrain.example.com --sandboxUrlBase https://sbox.mailtrain.example.com --publicUrlBase https://lists.example.com --withProxy" docker-compose up
```
3. Open the trusted endpoint http://localhost:3000
4. Authenticate as `admin`:`test`
## License ## License

41
docker-compose.yml Normal file
View file

@ -0,0 +1,41 @@
version: '3'
services:
mysql:
image: mariadb:10.4
environment:
- MYSQL_ROOT_PASSWORD=mailtrain
- MYSQL_DATABASE=mailtrain
- MYSQL_USER=mailtrain
- MYSQL_PASSWORD=mailtrain
volumes:
- mysql-data:/var/lib/mysql
redis:
image: redis:5
volumes:
- redis-data:/data
mongo:
image: mongo:4-xenial
volumes:
- mongo-data:/data/db
mailtrain:
build: .
command: ${MAILTRAIN_SETTINGS}
ports:
- "3000:3000"
- "3003:3003"
- "3004:3004"
volumes:
- mailtrain-files:/app/server/files
- mailtrain-reports:/app/protected/reports
volumes:
mysql-data:
redis-data:
mongo-data:
mailtrain-files:
mailtrain-reports:

91
docker-entrypoint.sh Normal file
View file

@ -0,0 +1,91 @@
#!/bin/bash
set -e
function printHelp {
cat <<EOF
Optional parameters:
--trustedUrlBase XXX - sets the trusted url of the instance (default: http://localhost:3000)
--sandboxUrlBase XXX - sets the sandbox url of the instance (default: http://localhost:3003)
--publicUrlBase XXX - sets the public url of the instance (default: http://localhost:3004)
--withProxy - use if Mailtrain is behind an http reverse proxy
EOF
exit 1
}
urlBaseTrusted=http://localhost:3000
urlBaseSandbox=http://localhost:3003
urlBasePublic=http://localhost:3004
wwwProxy=false
while [ $# -gt 0 ]; do
case "$1" in
--help)
printHelp
;;
--trustedUrlBase)
urlBaseTrusted="$2"
shift 2
;;
--sandboxUrlBase)
urlBaseSandbox="$2"
shift 2
;;
--publicUrlBase)
urlBasePublic="$2"
shift 2
;;
--withProxy)
wwwProxy=true
shift 1
;;
*)
echo "Error: unrecognized option $1."
printHelp
esac
done
cat > server/config/production.yaml <<EOT
www:
host: 0.0.0.0
proxy: $wwwProxy
secret: "`pwgen -1`"
trustedUrlBase: $urlBaseTrusted
sandboxUrlBase: $urlBaseSandbox
publicUrlBase: $urlBasePublic
mysql:
host: mysql
redis:
enabled: true
host: redis
log:
level: info
builtinZoneMTA:
log:
level: warn
mongo: mongodb://mongo:27017/zone-mta
redis: redis://redis:6379/2
queue:
processes: 5
EOT
cat >> server/services/workers/reports/config/production.yaml <<EOT
log:
level: warn
EOT
# Wait for the other services to start
while ! nc -z mysql 3306; do sleep 1; done
while ! nc -z redis 6379; do sleep 1; done
while ! nc -z mongo 27017; do sleep 1; done
cd server
NODE_ENV=production node index.js

View file

@ -1,14 +0,0 @@
version: '2'
services:
mysql:
restart: always
redis:
restart: always
mailtrain:
build: ./
# volumes:
# - ./:/app
ports:
- "3000:3000"
restart: always

View file

@ -1,33 +0,0 @@
# FIXME - this is not yet upgraded to Mailtrain 2
version: '2'
services:
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=mailtrain
- MYSQL_DATABASE=mailtrain
- MYSQL_USER=mailtrain
- MYSQL_PASSWORD=mailtrain
volumes:
- mailtrain-mysq-data:/var/lib/mysql
redis:
image: redis:3.0
volumes:
- mailtrain-redis-data:/data
mailtrain:
image: mailtrain:latest
depends_on:
- mysql
- redis
volumes:
- mailtrain-node-config:/app/config
- mailtrain-node-data:/app/public/grapejs/uploads
- mailtrain-node-data:/app/public/mosaico/uploads
- mailtrain-node-reports:/app/protected/reports
volumes:
mailtrain-mysq-data: {}
mailtrain-redis-data: {}
mailtrain-node-data: {}
mailtrain-node-config: {}
mailtrain-node-reports: {}

View file

@ -1,4 +0,0 @@
#!/bin/bash
set -e
bash

View file

@ -1,9 +0,0 @@
[mysql]
host="mysql"
[redis]
enabled=true
host="redis"
[reports]
enabled=true