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
.DS_Store
dump.rdb
docker-compose.override.yml

View file

@ -1,5 +1,5 @@
# 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.

View file

@ -1,22 +1,22 @@
FROM node:10.14-jessie
RUN apt-get update && apt-get install -y pwgen netcat
# First install dependencies
COPY ../server/package.json ./app/server
COPY ../client/package.json ./app/client
COPY ../shared/package.json ./app/shared
COPY ../zone-mta/package.json ./app/zone-mta
COPY server/package.json /app/server/package.json
COPY client/package.json /app/client/package.json
COPY shared/package.json /app/shared/package.json
COPY zone-mta/package.json /app/zone-mta/package.json
WORKDIR /app/
ENV NODE_ENV production
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
# 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
EXPOSE 3000
ENTRYPOINT ["bash", "/app/docker/docker-entrypoint.sh"]
EXPOSE 3000 3003 3004
ENTRYPOINT ["bash", "/app/docker-entrypoint.sh"]

View file

@ -14,10 +14,12 @@
* Automation (triggered and RSS campaigns)
* Multiple users with granular user permissions and flexible sharing
* 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
@ -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`)
### 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)
@ -54,14 +55,14 @@ Thus, by running this script below, you agree with the Let's Encrypt's Terms of
sudo su -
```
2. Install git
2. Install GIT
For Centos 7 type:
```
yum install -y git
```
For Ubuntu 18.04 LTS type:
For Ubuntu 18.04 LTS type
```
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
#### Requirements:
### Deployment with Docker and Docker compose
* [Docker](https://www.docker.com/)
* [Docker Compose](https://docs.docker.com/compose/)
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.
- http://localhost:3000 - trusted endpoint
- http://localhost:3003 - sandbox endpoint
- http://localhost:3004 - public endpoint
#### Steps:
Depending on how you have configured your system and Docker you may need to prepend the commands below with `sudo`.
To make this publicly accessible, you should add reverse proxy that makes these endpoints publicly available over HTTPS.
* 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`
* 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`
* Start: `docker-compose start`
* Open [http://localhost:3000/](http://localhost:3000/) (change the host name `localhost` to the name of the host where you are deploying the system).
* Authenticate as user `admin` with password `test`
* Navigate to [http://localhost:3000/settings](http://localhost:3000/settings) and update service configuration.
* Navigate to [http://localhost:3000/users/account](http://localhost:3000/users/account) and update user information and password.
To deploy Mailtrain with Docker, you need the following three dependencies installed:
- [Docker](https://www.docker.com/)
- [Docker Compose](https://docs.docker.com/compose/)
- Git - Typically already present. If not, just use the package manager of your OS distribution to install it.
These are the steps to start Mailtrain via docker-compose:
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

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