How to setup Mail Piler in Ubuntu 24.04
Email archiving provides lots of benefits to your company. Piler is a feature rich open source email archiving solution, and a viable alternative to commercial email archiving products.
Piler has a nice GUI written in PHP supporting several authentication methods (AD/LDAP, SSO, Google OAuth, 2 FA, IMAP, POP3)
Benefits Of Email Archiving
- Business continuity and disaster recovery: -Piler gives you a secure central repository of emails providing the necessary information even if your mail servers are down.
- Regulatory and compliance requirements:- Governmental agencies and other regulatory organizations require you to preserve emails for several years. To meet these obligations piler saves your emails in its long term storage.
- Legal discovery and investigations : Piler helps you to provide relevant information in a timely manner in case of legal discovery, audit or other events.
- Storage management : Piler saves storage space by compression and smart deduplication. It also allows you to offload data from the mail server to piler, thus minimizes storage costs.
Features of Piler
- Archiving
- Searching
- Web interface
- Monitoring / Audit
- Import / Export
Piler supports
⦁ archiving and retention rules
⦁ legal hold
⦁ deduplication
⦁ digital fingerprinting and verification
⦁ full text search
⦁ tagging emails
⦁ view, export, restore emails
⦁ bulk import/export messages
⦁ audit logs
⦁ Google Apps
⦁ Office 365
⦁ and many more
Run Script to install Mail Piler
#!/bin/bash
#
#
# This script installs the latest open source version of Mail Piler (mailpiler.org) from the master
# branch on GitHub by compiling it from source. It also installs all dependencies, including a MySQL database.
#
# You should run this script as root on a vanilla Ubuntu 24.04 installation.
#
#
set -o errexit
set -o pipefail
set -o nounset
set -x
PILER_HOSTNAME="${PILER_HOSTNAME:-piler.yourdomain.com}"
MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-yourpassword}"
MYSQL_PILER_PASSWORD="${MYSQL_PILER_PASSWORD:-yourpassword}"
SERVER_ID="${SERVER_ID:-0}"
USE_SMTP_GATEWAY="${USE_SMTP_GATEWAY:-0}"
SPHINX_WORKER_LISTEN_ADDRESS="${SPHINX_WORKER_LISTEN_ADDRESS:-}"
PHP_FPM_SOCKET="/var/run/php/php8.3-fpm.sock"
MYSQL_HOSTNAME="localhost"
MYSQL_DATABASE="piler"
MYSQL_USERNAME="piler"
PILER_TARBALL="https://github.com/jsuto/piler/archive/refs/heads/master.zip"
PILER_USER="piler"
CONFIG_SITE_PHP="/etc/piler/config-site.php"
CONFIG_SITE_DIST_PHP="/etc/piler/config-site.dist.php"
export DEBIAN_FRONTEND=noninteractive
install_prerequisites() {
apt-get update
apt-get -y --no-install-recommends install \
wget rsyslog openssl sysstat php8.3-cli php8.3-cgi php8.3-mysql php8.3-fpm php8.3-zip php8.3-ldap \
php8.3-gd php8.3-curl php8.3-xml ca-certificates zip catdoc unrtf poppler-utils nginx tnef libzip-dev \
libtre5 libwrap0 cron libmariadb-dev python3 python3-mysqldb libmariadb-dev mariadb-client \
mariadb-server build-essential libssl-dev libtre-dev libzip-dev unzip
}
install_manticore() {
wget https://repo.manticoresearch.com/manticore-repo.noarch.deb
dpkg -i manticore-repo.noarch.deb
apt update
apt -y install manticore manticore-extra
}
create_user() {
egrep -i "^x$PILER_USER:" /etc/passwd || adduser --no-create-home --disabled-password --disabled-login --gecos "" $PILER_USER
# egrep -i "^x$PILER_USER:" /etc/passwd || adduser --disabled-password --gecos "" --shell /bin/bash $PILER_USER
}
create_mysql_user_and_database() {
mysql -u root -p"$MYSQL_ROOT_PASSWORD" -e "CREATE USER IF NOT EXISTS '$MYSQL_USERNAME'@'$MYSQL_HOSTNAME';"
mysql -u root -p"$MYSQL_ROOT_PASSWORD" -e "SET PASSWORD FOR '$MYSQL_USERNAME'@'$MYSQL_HOSTNAME' = PASSWORD('$MYSQL_PILER_PASSWORD');"
mysql -u root -p"$MYSQL_ROOT_PASSWORD" -e "CREATE DATABASE IF NOT EXISTS $MYSQL_DATABASE CHARACTER SET 'utf8mb4';"
mysql -u root -p"$MYSQL_ROOT_PASSWORD" -e "GRANT ALL PRIVILEGES ON $MYSQL_DATABASE.* to '$MYSQL_USERNAME'@'$MYSQL_HOSTNAME' IDENTIFIED BY '$MYSQL_PILER_PASSWORD';"
mysql -u root -p"$MYSQL_ROOT_PASSWORD" -e "FLUSH PRIVILEGES;"
mysql -u $MYSQL_USERNAME -p"$MYSQL_PILER_PASSWORD" $MYSQL_DATABASE < /etc/piler/db-mysql.sql
}
fix_mysql_settings() {
cat > /etc/mysql/mariadb.conf.d/99-piler.cnf << PILER_CNF
[mysqld]
innodb_buffer_pool_size=512M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=64M
innodb_log_file_size=64M
innodb_read_io_threads=4
innodb_write_io_threads=4
innodb_log_files_in_group=2
innodb_file_per_table
PILER_CNF
}
start_mysql() {
fix_mysql_settings
service mysql restart
}
install_piler() {
mkdir -p tmp && wget "${PILER_TARBALL}" -O tmp/piler-master.zip
unzip tmp/piler-master -d tmp
pushd tmp/piler-master
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-database=mariadb --enable-tcpwrappers --enable-memcached
make clean all install
cp ./contrib/webserver/piler-nginx.conf /etc/piler/piler-nginx.conf.dist
cp ./etc/sphinx.conf.dist /etc/piler/sphinx.conf
cp ./util/db-mysql.sql /etc/piler/db-mysql.sql
popd
crontab -u "$PILER_USER" /usr/share/piler/piler.cron
touch /var/piler/.bash_history
chown "${PILER_USER}:${PILER_USER}" /var/piler/.bash_history
}
create_my_cnf() {
local user=$1
local password=$2
local my_cnf=$3
printf "[client]\\n\\nhost = %s\\nuser = %s\\npassword = %s\\n" "$MYSQL_HOSTNAME" "$user" "$password" > "$my_cnf"
printf "\\n\\n[mysqldump]\\n\\nhost = %s\\nuser = %s\\npassword = %s\\n" "$MYSQL_HOSTNAME" "$user" "$password" >> "$my_cnf"
chown $PILER_USER:$PILER_USER "$my_cnf"
chmod 600 "$my_cnf"
}
fix_config_site_php() {
cp $CONFIG_SITE_DIST_PHP $CONFIG_SITE_PHP
sed -i -e "s%HOSTNAME%${PILER_HOSTNAME}%g" -e "s%MYSQL_PASSWORD%${MYSQL_PILER_PASSWORD}%g" "$CONFIG_SITE_PHP"
{
echo "\$config['SERVER_ID'] = $SERVER_ID;"
echo "\$config['USE_SMTP_GATEWAY'] = $USE_SMTP_GATEWAY;"
echo "\$config['SPHINX_VERSION'] = 331;"
} >> "$CONFIG_SITE_PHP"
if [[ "$SPHINX_WORKER_LISTEN_ADDRESS" ]]; then
echo "\$config['SPHINX_WORKER_LISTEN_ADDRESS'] = '$SPHINX_WORKER_LISTEN_ADDRESS';" >> "$CONFIG_SITE_PHP"
fi
echo "\$config['ARCHIVE_HOST'] = '$PILER_HOSTNAME';" >> "$CONFIG_SITE_PHP"
}
add_systemd_services() {
pushd /etc/systemd/system
ln -sf /usr/libexec/piler/pilersearch.service .
ln -sf /usr/libexec/piler/piler.service .
ln -sf /usr/libexec/piler/piler-smtp.service .
popd
systemctl daemon-reload
systemctl enable pilersearch
systemctl enable piler
systemctl enable piler-smtp
}
create_cipher_key() {
dd if=/dev/urandom bs=56 count=1 of=/etc/piler/piler.key
chmod 640 /etc/piler/piler.key
chown piler:piler /etc/piler/piler.key
}
fix_configs() {
touch /etc/piler/MANTICORE
if [[ ! -f /etc/piler/piler-nginx.conf ]]; then
sed -e "s%PILER_HOST%$PILER_HOSTNAME%g" -e "s%PHP_FPM_SOCKET%$PHP_FPM_SOCKET%g" /etc/piler/piler-nginx.conf.dist > /etc/piler/piler-nginx.conf
ln -s /etc/piler/piler-nginx.conf /etc/nginx/sites-enabled/piler.conf
nginx -t
nginx -s reload
fi
if [[ ! -f /etc/piler/piler.conf ]]; then
sed -e "s/verystrongpassword/$MYSQL_PILER_PASSWORD/g" -e "s/piler.yourdomain.com/$PILER_HOSTNAME/g" /etc/piler/piler.conf.dist > /etc/piler/piler.conf
chmod 600 /etc/piler/piler.conf
chown $PILER_USER:$PILER_USER /etc/piler/piler.conf
fi
cp /etc/piler/manticore.conf.dist /etc/piler/manticore.conf
sed -i -e "s/MYSQL_HOSTNAME/${MYSQL_HOSTNAME}/g" \
-e "s/MYSQL_DATABASE/${MYSQL_DATABASE}/g" \
-e "s/MYSQL_USERNAME/${MYSQL_USERNAME}/g" \
-e "s/MYSQL_PASSWORD/${MYSQL_PILER_PASSWORD}/g" \
/etc/piler/manticore.conf
}
create_run_piler() {
cat <<EOF > /etc/systemd/system/pilerrun.service
[Unit]
Description=Create piler directory in /var/run
After=network.target
[Service]
Type=simple
ExecStartPre=-/usr/bin/mkdir /var/run/piler
ExecStart=/usr/bin/chown piler:piler /var/run/piler
Restart=on-abort
[Install]
WantedBy=multi-user.target
EOF
systemctl start pilerrun.service
systemctl enable pilerrun.service
}
install_prerequisites
install_manticore
create_user
install_piler
create_mysql_user_and_database
start_mysql
create_my_cnf "root" "${MYSQL_ROOT_PASSWORD}" /etc/piler/.my.cnf-root
create_my_cnf "piler" "${MYSQL_PILER_PASSWORD}" /etc/piler/.my.cnf
fix_configs
fix_config_site_php
add_systemd_services
create_cipher_key
create_run_piler
systemctl start pilersearch
systemctl start piler
systemctl start piler-smtp
root@bitscentric:/etc/nginx/sites-enabled# vim piler.conf
server_name piler.bitscentric.com;
Now, open any browser and search http://piler.bitscentric.com or http://piler.domainname
Log in as administrator using the following account:
Email:- admin@local
Password:- pilerrocks
Email:- auditor@local
Password:- auditor