FROM ubuntu:focal AS build-asterisk ENV DEBIAN_FRONTEND=noninteractive ARG ASTERISK_VER=18.2.0 ARG BCG729_VER=1.1.1 ARG ASTERISK_G72X_VER=master WORKDIR /usr/src RUN apt-get update && \ apt-get install --no-install-recommends --yes \ git build-essential subversion checkinstall autoconf automake bison flex graphviz cmake curl ca-certificates libresample1-dev libiksemel-dev libopus-dev pkg-config RUN cd /usr/src && \ mkdir asterisk && \ curl -fSL --connect-timeout 30 http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-${ASTERISK_VER}.tar.gz | tar xz --strip 1 -C asterisk && \ cd asterisk && \ ./contrib/scripts/get_mp3_source.sh && \ ./contrib/scripts/install_prereq install RUN cd /usr/src/asterisk && git clone https://github.com/felipem1210/asterisk-res_json.git && ./asterisk-res_json/install.sh RUN cd /usr/src/asterisk && ./configure --prefix=/usr --libdir=/usr/lib --with-pjproject-bundled --with-jansson-bundled --with-resample --with-ssl=ssl --with-srtp && \ make menuselect/menuselect menuselect-tree menuselect.makeopts && \ menuselect/menuselect \ --enable-category MENUSELECT_ADDONS \ --enable-category MENUSELECT_CHANNELS \ --enable-category MENUSELECT_APPS \ --enable-category MENUSELECT_CDR \ --enable-category MENUSELECT_FORMATS \ --enable-category MENUSELECT_FUNCS \ --enable-category MENUSELECT_PBX \ --enable-category MENUSELECT_RES \ --enable-category MENUSELECT_CEL \ \ menuselect/menuselect \ --enable BETTER_BACKTRACES \ --enable DONT_OPTIMIZE \ --enable app_confbridge \ --enable app_macro \ --enable app_meetme \ --enable app_mysql \ --enable app_page \ --enable binaural_rendering_in_bridge_softmix \ --enable chan_motif \ --enable codec_silk \ --enable codec_opus \ --enable format_mp3 \ --enable res_ari \ --enable res_chan_stats \ --enable res_calendar \ --enable res_calendar_caldav \ --enable res_calendar_icalendar \ --enable res_endpoint_stats \ --enable res_pktccops \ --enable res_snmp \ --enable res_srtp \ --enable res_xmpp \ --disable-category MENUSELECT_CORE_SOUNDS \ --disable-category MENUSELECT_EXTRA_SOUNDS \ --disable-category MENUSELECT_MOH \ --disable BUILD_NATIVE \ --disable app_ivrdemo \ --disable app_meetme \ --disable app_saycounted \ --disable app_skel \ --disable cdr_pgsql \ --disable cel_pgsql \ --disable cdr_sqlite3_custom \ --disable cel_sqlite3_custom \ --disable cdr_mysql \ --disable cdr_tds \ --disable cel_tds \ --disable cdr_radius \ --disable cel_radius \ --disable cdr_syslog \ --disable chan_alsa \ --disable chan_console \ --disable chan_oss \ --disable chan_mgcp \ --disable chan_skinny \ --disable chan_ooh323 \ --disable chan_mobile \ --disable chan_unistim \ --disable res_digium_phone \ --disable res_calendar_ews \ --disable res_calendar_exchange \ --disable res_stasis_mailbox \ --disable res_mwi_external \ --disable res_mwi_external_ami \ --disable res_config_pgsql \ --disable res_config_mysql \ --disable res_config_ldap \ --disable res_config_sqlite3 \ --disable res_phoneprov \ --disable res_pjsip_phoneprov_provider \ && \ make && \ checkinstall --install=yes --default --pakdir=/usr/src/packages --pkgname=asterisk-rrt --pkgversion=${ASTERISK_VER} && \ checkinstall --install=yes --default --pakdir=/usr/src/packages --pkgname=asterisk-rrt-dev --pkgversion=${ASTERISK_VER} make install-headers && \ checkinstall --install=yes --default --pakdir=/usr/src/packages --pkgname=asterisk-rrt-config --pkgversion=${ASTERISK_VER} make config && \ checkinstall --install=yes --default --pakdir=/usr/src/packages --pkgname=asterisk-rrt-samples --pkgversion=${ASTERISK_VER} make samples && \ ldconfig && \ cd /usr/src && \ mkdir bcg729 && \ curl -fSL --connect-timeout 30 https://github.com/BelledonneCommunications/bcg729/archive/${BCG729_VER}.tar.gz | tar xz --strip 1 -C bcg729 && \ cd bcg729 && \ cmake . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_PREFIX_PATH=/usr && \ make && \ checkinstall --install=yes --default --pakdir=/usr/src/packages --pkgname=bcg729-rrt --pkgversion=${BCG729_VER} --spec=none && \ ldconfig && \ cd /usr/src && \ mkdir asterisk-g72x && \ curl -fSL --connect-timeout 30 https://bitbucket.org/arkadi/asterisk-g72x/get/${ASTERISK_G72X_VER}.tar.gz | tar xz --strip 1 -C asterisk-g72x && \ cd asterisk-g72x && \ ./autogen.sh && \ ./configure --prefix=/usr --with-bcg729 --enable-penryn && \ make && \ checkinstall --install=yes --default --pakdir=/usr/src/packages --pkgname=asterisk-g72x-rrt --pkgversion=0.${ASTERISK_G72X_VER} && \ ldconfig FROM ubuntu:focal AS rrd-freepbx ENV DEBIAN_FRONTEND=noninteractive ARG ASTERISK_VER=18.2.0 ARG BCG729_VER=1.1.1 ARG ASTERISK_G72X_VER=master ARG FREEPBX_VER=15.0 ENV APP_PORT_HTTP 80 ENV APP_PORT_HTTPS 443 ENV APP_PORT_PJSIP 5160 ENV APP_PORT_SIP 5060 ENV APP_PORT_IAX 4569 ENV APP_PORT_RTP_START 10000 ENV APP_PORT_RTP_END 10200 ENV APP_PORT_MYSQL 3306 ENV APP_UID=1000 ENV APP_GID=1000 ENV APP_USR="asterisk" ENV APP_GRP="asterisk" COPY --from=build-asterisk /usr/src/packages /usr/src/packages RUN apt-get update && \ apt-get install --no-install-recommends --yes gpg gpg-agent dirmngr && \ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C && \ echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main" >> /etc/apt/sources.list.d/ondrej-php.list && \ echo "deb http://ppa.launchpad.net/ondrej/apache2/ubuntu focal main" >> /etc/apt/sources.list.d/ondrej-apache2.list && \ apt-get update && \ apt-get upgrade --yes && \ dpkg -i /usr/src/packages/*.deb && \ apt-get install --no-install-recommends --yes \ apache2 \ binutils \ certbot \ codec2 \ cron \ curl \ fail2ban \ ffmpeg \ file \ freetds-bin \ freetds-common \ iptables \ jq \ lame \ libaudiofile1 \ libc-client2007e \ libcap2 \ libcfg7 \ libcpg4 \ libdbd-mysql \ libdbi-perl\ libeditline0 \ libevent-2.1-7 \ libfftw3-3 \ libfftw3-bin \ libgmime-3.0-0 \ libical3 \ libicu66 \ libiksemel3 \ libjansson4 \ libjpeg-turbo8 \ libltdl7 \ libncurses5 \ libneon27 \ libnewt0.52 \ libopus0 \ libosptk4 \ libportaudio2 \ libproxy1v5 \ libresample1 \ libsensors5 \ libsndfile1 \ libsnmp35 \ libsnmp-base \ libspandsp2 \ libspeexdsp1 \ libsrtp2-1 \ libtiff5 \ libtiff-tools \ libunbound8 \ liburiparser1 \ libvpb1 \ libxml2 \ lm-sensors \ logrotate \ lsof \ mariadb-client \ mpg123 \ netcat \ net-tools \ nodejs \ npm \ odbc-mariadb \ openssl \ php7.3 \ php7.3-mysql \ php7.3-curl \ php7.3-gd \ php7.3-json \ php7.3-mbstring \ php7.3-xml \ postfix \ rsync \ sox \ speex \ sqlite3 \ strace \ sudo \ supervisor \ unixodbc \ unzip \ uuid \ wget \ whois \ zip RUN groupadd -g ${APP_GID} ${APP_GRP} && \ useradd -u ${APP_UID} -c "Asterisk User" -g ${APP_GRP} -s /sbin/nologin ${APP_USR} && \ usermod -aG sudo,www-data ${APP_USR} && \ mkdir -p \ /etc/pki/pbx \ /home/asterisk \ /var/lib/asterisk/moh \ /var/lib/asterisk/sounds \ /var/spool/asterisk \ /var/run/fail2ban && \ chown -R ${APP_USR}:${APP_GRP} \ /etc/asterisk \ /home/asterisk \ /var/lib/asterisk \ /var/spool/asterisk && \ openssl req -subj '/CN=pbx/O=RRT/C=RU' -new -newkey rsa:2048 -sha256 -days 36500 -nodes -x509 -keyout /etc/pki/pbx/rrtpbx.key -out /etc/pki/pbx/rrtpbx.crt RUN cd /usr/src && \ mkdir freepbx && \ curl -fSL --connect-timeout 30 http://mirror.freepbx.org/modules/packages/freepbx/freepbx-${FREEPBX_VER}-latest.tgz | tar xz --strip 1 -C freepbx && \ cd freepbx && \ curl -fSL --connect-timeout 30 http://mirror1.freepbx.org/modules-${FREEPBX_VER}.xml -o modules-${FREEPBX_VER}.xml && \ mkdir -p amp_conf/htdocs/admin/modules/_cache && \ for MODULE in \ announcement \ arimanager \ asteriskinfo \ backup \ calendar \ callforward \ callwaiting \ cel \ certman \ cidlookup \ contactmanager \ daynight \ donotdisturb \ filestore \ findmefollow \ iaxsettings \ ivr \ manager \ miscapps \ miscdests \ parking \ phonebook \ presencestate \ printextensions \ queues \ soundlang \ timeconditions \ userman \ ucp \ bulkhandler \ speeddial \ weakpasswords \ pm2 \ ; do \ mkdir -p amp_conf/htdocs/admin/modules/$MODULE && \ MODULE_VER=$(php -r "echo json_encode(simplexml_load_file('modules-${FREEPBX_VER}.xml'));" | jq -r ".module[] | select(.rawname == \"${MODULE}\") | {version}".version) && \ curl -sfSL --connect-timeout 30 http://mirror.freepbx.org/modules/packages/$MODULE/$MODULE-${MODULE_VER}.tgz | tar xz --strip 1 -C amp_conf/htdocs/admin/modules/$MODULE/ && \ curl -sfSL --connect-timeout 30 http://mirror.freepbx.org/modules/packages/$MODULE/$MODULE-${MODULE_VER}.tgz.gpg -o amp_conf/htdocs/admin/modules/_cache/$MODULE-${MODULE_VER}.tgz.gpg \ ; done && \ su - ${APP_USR} -s /bin/bash -c "gpg --refresh-keys --keyserver hkp://keyserver.ubuntu.com:80" && \ su - ${APP_USR} -s /bin/bash -c "gpg --import /usr/src/freepbx/amp_conf/htdocs/admin/libraries/BMO/1588A7366BD35B34.key" && \ su - ${APP_USR} -s /bin/bash -c "gpg --import /usr/src/freepbx/amp_conf/htdocs/admin/libraries/BMO/3DDB2122FE6D84F7.key" && \ su - ${APP_USR} -s /bin/bash -c "gpg --import /usr/src/freepbx/amp_conf/htdocs/admin/libraries/BMO/86CE877469D2EAD9.key" && \ su - ${APP_USR} -s /bin/bash -c "gpg --import /usr/src/freepbx/amp_conf/htdocs/admin/libraries/BMO/9F9169F4B33B4659.key" EXPOSE ${APP_PORT_HTTP}/tcp \ ${APP_PORT_HTTPS}/tcp \ ${APP_PORT_PJSIP}/tcp \ ${APP_PORT_PJSIP}/udp \ ${APP_PORT_IAX}/tcp \ ${APP_PORT_IAX}/udp \ ${APP_PORT_SIP}/tcp \ ${APP_PORT_SIP}/udp \ ${APP_PORT_RTP_START}-${APP_PORT_RTP_END}/udp \ ${APP_PORT_MYSQL}/tcp ADD filesystem / ENTRYPOINT ["/entrypoint.sh"] CMD ["supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]