2014-08-17 12:48:27 +00:00
|
|
|
#!/bin/bash
|
|
|
|
# Use this script to launch Mail-in-a-Box within a docker container.
|
|
|
|
# ==================================================================
|
|
|
|
#
|
2015-01-30 22:40:58 +00:00
|
|
|
# Run this script from the base directory of the Mail-in-a-Box
|
|
|
|
# repository (i.e. run as 'containers/docker/run').
|
|
|
|
#
|
2014-08-17 12:48:27 +00:00
|
|
|
# A base image is created first. The base image installs Ubuntu
|
|
|
|
# packages and pulls in the Mail-in-a-Box source code. This is
|
|
|
|
# defined in Dockerfile at the root of this repository.
|
|
|
|
#
|
|
|
|
# A mailinabox-userdata container is started next. This container
|
|
|
|
# contains nothing but a shared volume for storing user data.
|
|
|
|
# It is segregated from the rest of the live system to make backups
|
|
|
|
# easier.
|
|
|
|
#
|
|
|
|
# The mailinabox-services container is started last. It is the
|
|
|
|
# real thing: it runs the mailinabox image. This container will
|
|
|
|
# initialize itself and will initialize the mailinabox-userdata
|
|
|
|
# volume if the volume is new.
|
|
|
|
|
|
|
|
# Build or rebuild the image.
|
|
|
|
# Rebuilds are very fast.
|
|
|
|
|
2015-02-22 10:36:10 +00:00
|
|
|
HOST_HTTP_PORT=${HOST_HTTP_PORT:-80}
|
|
|
|
HOST_HTTPS_PORT=${HOST_HTTPS_PORT:-443}
|
|
|
|
HOST_USERDATA_VOLUME=${HOST_USERDATA_VOLUME:-/home/user-data}
|
|
|
|
|
2015-01-30 22:40:58 +00:00
|
|
|
tput setaf 2
|
|
|
|
echo "Building/updating base image (mailinabox)..."
|
|
|
|
tput setaf 7
|
|
|
|
|
|
|
|
docker build -q -t mailinabox .
|
|
|
|
|
|
|
|
if ! docker ps -a | grep mailinabox-userdata > /dev/null; then
|
|
|
|
tput setaf 2
|
|
|
|
echo
|
|
|
|
echo "Creating a new container for your data (mailinabox-userdata)..."
|
|
|
|
tput setaf 7
|
|
|
|
|
|
|
|
docker run -d \
|
2014-08-17 12:48:27 +00:00
|
|
|
--name mailinabox-userdata \
|
2015-02-22 10:36:10 +00:00
|
|
|
-v $HOST_USERDATA_VOLUME:/home/user-data \
|
|
|
|
phusion/baseimage:0.9.16
|
2015-01-30 22:40:58 +00:00
|
|
|
else
|
|
|
|
tput setaf 2
|
|
|
|
echo
|
|
|
|
echo "Using existing container mailinabox-userdata for your data."
|
|
|
|
tput setaf 7
|
2014-08-17 12:48:27 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
# End a running container.
|
2015-01-30 22:40:58 +00:00
|
|
|
|
|
|
|
if docker ps -a | grep mailinabox-services > /dev/null; then
|
|
|
|
tput setaf 2
|
|
|
|
echo
|
|
|
|
echo "Destroying mailinabox-services container..."
|
|
|
|
tput setaf 7
|
|
|
|
|
|
|
|
docker rm -f mailinabox-services
|
2014-08-17 12:48:27 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
# Start container.
|
2015-01-30 22:40:58 +00:00
|
|
|
|
|
|
|
tput setaf 2
|
|
|
|
echo
|
|
|
|
echo "Starting new container (mailinabox-services)..."
|
|
|
|
tput setaf 7
|
|
|
|
|
2015-02-22 10:36:10 +00:00
|
|
|
# Run the services container detached.
|
2015-01-30 22:40:58 +00:00
|
|
|
# Notes:
|
|
|
|
# * Passing through SKIP_NETWORK_CHECKS makes it easier to do testing
|
|
|
|
# on a residential network.
|
2015-02-22 10:36:10 +00:00
|
|
|
# * --privileged flag cause an issue with bind9/named failing to start in this case
|
|
|
|
# see docker/docker#7318
|
2015-01-30 22:40:58 +00:00
|
|
|
docker run \
|
2015-01-24 10:29:16 +00:00
|
|
|
-v /dev/urandom:/dev/random \
|
2015-02-22 10:36:10 +00:00
|
|
|
-p 25:25 \
|
|
|
|
-p 53:53/udp \
|
|
|
|
-p 53:53/tcp \
|
|
|
|
-p $HOST_HTTP_PORT:80 \
|
|
|
|
-p $HOST_HTTPS_PORT:443 \
|
|
|
|
-p 587:587 \
|
|
|
|
-p 993:993 \
|
|
|
|
-p 4190:4190 \
|
2014-08-17 12:48:27 +00:00
|
|
|
--name mailinabox-services \
|
2015-01-24 10:29:16 +00:00
|
|
|
--volumes-from mailinabox-userdata \
|
2015-01-30 22:40:58 +00:00
|
|
|
-e "SKIP_NETWORK_CHECKS=$SKIP_NETWORK_CHECKS" \
|
2015-02-22 10:36:10 +00:00
|
|
|
-d \
|
|
|
|
-t \
|
2015-01-30 22:40:58 +00:00
|
|
|
mailinabox
|
2015-02-22 10:36:10 +00:00
|
|
|
|
|
|
|
tput setaf 2
|
|
|
|
echo
|
|
|
|
echo "Initializing container (mailinabox-services)..."
|
|
|
|
tput setaf 7
|
|
|
|
|
|
|
|
# run init.sh
|
|
|
|
docker exec \
|
|
|
|
-it \
|
|
|
|
mailinabox-services \
|
|
|
|
/usr/local/mailinabox/containers/docker/init.sh
|
|
|
|
|
|
|
|
tput setaf 2
|
|
|
|
echo
|
|
|
|
echo "Restarting container..."
|
|
|
|
tput setaf 7
|
|
|
|
|
|
|
|
docker restart mailinabox-services
|