freepbx-oss/install-nginx.sh
2025-03-02 18:07:11 -07:00

191 lines
6.1 KiB
Bash

#!/bin/bash
# Check that we're running with effective UID 0, if not, ask for sudo
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exec sudo "$0" "$@"
fi
# Check that we're running at least debian 12 or later
if [ "$BYPASS_VERSION_CHECK" != "true" ]; then
if [ "$(lsb_release -sc)" != "bookworm" ]; then
# This script must be run on Debian 12 Bookworm, you are running $(lsb_release -sc)
echo "This script must be run on Debian 12 Bookworm, you are running $(lsb_release -sc)" 1>&2
exit 1
fi
fi
# Install Flags
# --edge - Install FreePBX Edge version
# Check all flags are valid
for i in "$@"; do
case $i in
--edge)
EDGE=true
shift
;;
-y)
SKIP_PROMPT=true
shift
;;
*)
echo "Invalid flag: $i" 1>&2
exit 1
;;
esac
done
# If not skip, ask for confirmation
# if [ "$SKIP_PROMPT" != true ]; then
# read -p "This script will install FreePBX Open-Source, Asterisk 20, and many other dependencies, do you want to continue? (y/n): " -n 1 -r
# echo
# if [[ ! $REPLY =~ ^[Yy]$ ]]; then
# exit 1
# fi
# fi
apt-get update;
apt-get upgrade;
# Install dependencies
apt -y install build-essential git curl wget libnewt-dev libssl-dev libncurses5-dev subversion libsqlite3-dev libjansson-dev libxml2-dev uuid-dev default-libmysqlclient-dev htop sngrep lame ffmpeg mpg123 git vim curl wget libnewt-dev libssl-dev libncurses5-dev subversion libsqlite3-dev build-essential libjansson-dev libxml2-dev uuid-dev expect;
# Install LAMP stack
# apt install -y linux-headers-`uname -r` # Doesn't seem to be needed?
apt-get install -y build-essential openssh-server nginx mariadb-server mariadb-client bison flex php8.2 php8.2-curl php8.2-cli php8.2-common php8.2-mysql php8.2-gd php8.2-mbstring php8.2-intl php8.2-xml php8.2-zip unzip zip php8.2-fpm php-pear curl sox libncurses5-dev libssl-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool autoconf git unixodbc-dev uuid uuid-dev libasound2-dev libogg-dev libvorbis-dev libicu-dev libcurl4-openssl-dev odbc-mariadb libical-dev libneon27-dev libsrtp2-dev libspandsp-dev sudo subversion libtool-bin python-dev-is-python3 unixodbc vim wget libjansson-dev software-properties-common nodejs npm ipset iptables fail2ban php-soap;
# Install Asterisk
cd /usr/src;
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz;
# Check sha256 checksum from http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.sha256 automatically
ASTCHKSUM=$(sha256sum asterisk-20-current.tar.gz | cut -d' ' -f1);
OLASTCHKSUM=$(curl -s http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.sha256 | cut -d' ' -f1);
if [ "$ASTCHKSUM" != "$OLASTCHKSUM" ]; then
echo "Checksum mismatch, exiting...";
exit 1;
fi
tar xvf asterisk-20-current.tar.gz;
cd asterisk-20*/;
contrib/scripts/get_mp3_source.sh;
contrib/scripts/install_prereq install;
./configure --libdir=/usr/lib64 --with-pjproject-bundled --with-jansson-bundled;
make menuselect.makeopts;
menuselect/menuselect --enable app_macro menuselect.makeopts;
# make menuselect; # In theory i can just skip this?
make;
make install;
make samples;
make config;
ldconfig;
groupadd asterisk;
useradd -r -d /var/lib/asterisk -g asterisk asterisk;
usermod -aG audio,dialout,www-data asterisk;
usermod -aG asterisk www-data
chown -R asterisk:asterisk /etc/asterisk;
chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk;
chown -R asterisk:asterisk /usr/lib64/asterisk;
sed -i 's|#AST_USER|AST_USER|' /etc/default/asterisk;
sed -i 's|#AST_GROUP|AST_GROUP|' /etc/default/asterisk;
sed -i 's|;runuser|runuser|' /etc/asterisk/asterisk.conf;
sed -i 's|;rungroup|rungroup|' /etc/asterisk/asterisk.conf;
echo "/usr/lib64" >> /etc/ld.so.conf.d/x86_64-linux-gnu.conf;
ldconfig;
# Configure Nginx
rm -rf /etc/nginx/sites-available/default # Kinda scary, will find better approach some time
cat <<EOF > /etc/nginx/conf.d/freepbx.conf
server {
listen 80 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.php;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
EOF
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/8.2/fpm/php.ini;
sed -i 's/\(^memory_limit = \).*/\1256M/' /etc/php/8.2/fpm/php.ini;
systemctl restart nginx;
systemctl restart php8.2-fpm
rm /var/www/html/index.html;
# Configure ODBC
cat <<EOF > /etc/odbcinst.ini
[MySQL]
Description = ODBC for MySQL (MariaDB)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
FileUsage = 1
EOF
cat <<EOF > /etc/odbc.ini
[MySQL-asteriskcdrdb]
Description = MySQL connection to 'asteriskcdrdb' database
Driver = MySQL
Server = localhost
Database = asteriskcdrdb
Port = 3306
Socket = /var/run/mysqld/mysqld.sock
Option = 3
EOF
# Install FreePBX
cd /usr/local/src;
#wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-17.0-latest.tgz;
if [ "$EDGE" = true ]; then
wget https://mirror.freepbx.org/modules/packages/freepbx/freepbx-17.0-latest-EDGE.tgz;
mv freepbx-17.0-latest-EDGE.tgz freepbx-17.tgz;
else
wget https://mirror.freepbx.org/modules/packages/freepbx/freepbx-17.0-latest.tgz;
mv freepbx-17.0-latest.tgz freepbx-17.tgz;
fi
tar zxvf freepbx-17.tgz;
cd /usr/local/src/freepbx/;
./start_asterisk start;
./install -n;
# Install modules
fwconsole ma installall;
fwconsole reload;
fwconsole restart;
# Setup FreePBX systemd
cat <<EOF > /etc/systemd/system/freepbx.service
[Unit]
Description=FreePBX VoIP Server
After=mariadb.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/fwconsole start -q
ExecStop=/usr/sbin/fwconsole stop -q
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload;
systemctl enable freepbx;
echo "FreePBX Open-Source has been installed successfully!";
echo "You can access FreePBX at http://$(hostname -I | cut -d' ' -f1)/";