Support #667
Updated by Daniel Curtis about 9 years ago
This is a guide for setting up FreeSWITCH with Nginx, PostgreSQL, and FusionPBX on FreeBSD 9. h2. Prepare the Environment * Make sure the system is up to date: <pre> pkg update && pkg upgrade && portsnap fetch extract </pre> * Install a few dependencies: <pre> pkg install portmaster screen sox cmake autoconf automake lua51 curl git gmake jpeg ldns libedit binutils freetype2 libtool openssl pcre pkgconf flex speex sqlite3 wget subversion postgresql94-client sofia-sip x264 libvpx opus ffmpeg pkg2ng </pre> h2. Install FreeSWITCH * Make a source directory: <pre> mkdir /usr/local/src </pre> *NOTE*: I could not build FreeSWITCH from ports, so this guide will compile from GitHub. * Make a source directory and switch to it: <pre> mkdir /usr/local/src && cd /usr/local/src </pre> * Clone the latest version of freeswitch: <pre> cd /usr/local/src git clone -b v1.6 https://freeswitch.org/stash/scm/fs/freeswitch.git </pre> * Disable mod_fsv: <pre> cd freeswitch sed -i '' -e 's/applications\/mod_fsv/#applications\/mod_fsv/' modules.conf </pre> * Build and install freeswitch: <pre> ./bootstrap.sh -j ./configure --enable-core-pgsql-support gmake gmake install cd-sounds-install cd-moh-install </pre> #* While running gmake, I encountered an error. To work around this I disabled mod_fsv: <pre> sed -i '' -e 's/applications\/mod_fsv/#applications\/mod_fsv/' modules.conf </pre> h3. Freeswitch rc script * Create the rc script: <pre> vi /usr/local/etc/rc.d/freeswitch </pre> #* And add the following <pre> #!/bin/sh # # PROVIDE: freeswitch # REQUIRE: LOGIN cleanvar # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable freeswitch: # freeswitch_enable: Set it to "YES" to enable freeswitch. # Default is "NO". # freeswitch_flags: Flags passed to freeswitch-script on startup. # Default is "". # . /etc/rc.subr name="freeswitch" name="www" rcvar=${name}_enable load_rc_config $name : ${freeswitch_enable="NO"} : ${freeswitch_pidfile="/usr/local/freeswitch/run/freeswitch.pid"} start_cmd=${name}_start stop_cmd=${name}_stop pidfile=${freeswitch_pidfile} freeswitch_start() { /usr/local/freeswitch/bin/freeswitch ${freeswitch_flags} echo -n "Starting FreeSWITCH: " } freeswitch_stop() { /usr/local/freeswitch/bin/freeswitch -stop } run_rc_command "$1" </pre> * Make the script executable: <pre> chmod +x /usr/local/etc/rc.d/freeswitch </pre> * Change the freeswitch config file ownership to the www user: <pre> chown -R www:www /usr/local/etc/freeswitch </pre> * Start and enable freeswitch to start at boot: <pre> echo 'freeswitch_enable="YES"' >> /etc/rc.conf echo 'freeswitch_flags="-nc"' >> /etc/rc.conf service freeswitch start </pre> #* *NOTE*: If your Freeswitch server has a IP address and not behind a NAT router, add the @-nonat@ parameter to the freeswitch_flags. This will disable NAT traversal feature of FreeSWITCH. h2. Install FusionPBX * Install fusionpbx: <pre> portmaster www/fusionpbx </pre> #* *NOTE*: Make sure to enable *[X]PDOPGSQL* while configuring fusionpbx. fuzionpbx. * Change the freeswitch config file ownership to the www user: <pre> chown -R www:www /usr/local/etc/freeswitch </pre> h2. Install Nginx * Install Nginx <pre> portmaster www/nginx </pre> * Start and enable nginx at boot: <pre> echo 'nginx_enable="YES"' >> /etc/rc.conf service nginx start </pre> * Create a configuration directory to make managing individual server blocks easier <pre> mkdir /usr/local/etc/nginx/conf.d </pre> * Edit the main nginx config file: <pre> vi /usr/local/etc/nginx/nginx.conf </pre> #* And strip down the config file and add the include statement at the end to make it easier to handle various server blocks: <pre> #user nobody; worker_processes 1; error_log /var/log/nginx-error.log; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # Load config files from the /etc/nginx/conf.d directory include /usr/local/etc/nginx/conf.d/*.conf; } </pre> * Now create a config for pbx.example.com: <pre> vi /usr/local/etc/nginc/conf.d/pbx.example.com.conf </pre> #* And add the following: <pre> server{ listen 80; server_name pbx.example.com; access_log /var/log/nginx-access.log; error_log /var/log/nginx-error.log; client_max_body_size 10M; client_body_buffer_size 128k; root /usr/local/www/fusionpbx; location / { root /usr/local/www/fusionpbx; index index.php; } location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # Disable viewing .htaccess & .htpassword & .db location ~ .htaccess { deny all; } location ~ .htpassword { deny all; } location ~^.+.(db)$ { deny all; } } </pre> h3. Configure PHP * Configure the default PHP settings <pre> cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini </pre> * Edit /usr/local/etc/php-fpm.conf: <pre> vi /usr/local/etc/php-fpm.conf </pre> #* Make the following changes: <pre> listen = /var/run/php-fpm.sock listen.owner = www listen.group = www listen.mode = 0660 0666 </pre> * Start and enable PHP-FPM at boot: <pre> echo 'php_fpm_enable="YES"' >> /etc/rc.conf service php-fpm start </pre> h2. Setup Database *NOTE*: This guide has an external postgresql server and does not cover setting up the server. * Create the database and user: <pre> su postgres createuser -s -e fusionpbxuser FusionPBX createdb -O fusionpbxuser fusionpbxdb FusionPBX FusionPBX psql -d fusionpbxdb FusionPBX -U fusionpbxuser FusionPBX ALTER USER fusionpbxuser FusionPBX with PASSWORD 'SuperSecretPassword'; </pre> * Then open http://pbx.example.com in a web browser and finish the installation; make sure to select the *postgresql* database adapter. h2. Resources * http://wiki.fusionpbx.com/index.php?title=FreeBSD_Install * https://freeswitch.org/confluence/display/FREESWITCH/FreeBSD * https://code.google.com/p/libyuv/wiki/GettingStarted