This guide covers the layout and day-two configuration of the CloudSOE FreePBX 17 image on both AWS and Azure. It assumes you’ve finished one of the getting-started guides (AWS, Azure).

File locations

PathPurpose
/var/www/html/adminFreePBX web UI
/etc/asterisk/Asterisk configuration (mostly generated by FreePBX — see below)
/etc/freepbx.confFreePBX bootstrap configuration
/var/lib/asterisk/AGI scripts, sounds, moh
/var/spool/asterisk/Voicemail, call recordings, monitor files
/var/log/asterisk/Asterisk and FreePBX logs (full, freepbx.log)

Golden rule: FreePBX generates most files under /etc/asterisk/ — hand-edits to generated files are overwritten on the next Apply Config. Custom dialplan and settings belong in the _custom.conf files (e.g. extensions_custom.conf), which FreePBX leaves alone.

Services

Asterisk runs under FreePBX’s control. Manage the stack with fwconsole, not systemctl:

sudo fwconsole restart        # full PBX restart
sudo fwconsole reload         # apply config changes
sudo fwconsole ma list        # installed modules

The web UI is served by Apache (sudo systemctl status apache2). The one-time freepbx-firstboot service only fills the public IP into the login banner; it exits immediately on later boots thanks to its marker file (/var/lib/freepbx-firstboot.done).

NAT settings — the most important cloud step

Your instance sits behind 1:1 NAT: it only knows its private IP, while phones and trunks see the public one. If this isn’t configured you’ll get registrations that work but calls with no audio.

In the FreePBX UI, open Settings → Asterisk SIP Settings:

  1. Set External Address to your public IP (the login banner shows it).
  2. Add your VPC/VNet subnet under Local Networks (e.g. 10.0.0.0/16).
  3. Submit and Apply Config.

If you later change the instance’s public IP (new Elastic IP on AWS, reassigned public IP on Azure), update this setting.

RTP port range

The media port range defaults to Asterisk’s standard 10000–20000 UDP. View or change it under Settings → Asterisk SIP Settings → RTP Port Ranges (backing file: /etc/asterisk/rtp.conf). Whatever you set here must match your security group / NSG rules exactly.

Extensions and trunks

All routine PBX administration happens in the web UI:

  • Applications → Extensions — create PJSIP extensions for your phones. Use long, random SIP secrets; wardialers guess short ones.
  • Connectivity → Trunks — add your SIP trunk provider.
  • Connectivity → Inbound Routes / Outbound Routes — wire DIDs and dial patterns.

After any change, click Apply Config (or sudo fwconsole reload).

The Asterisk console

For debugging, the full Asterisk CLI is available over SSH:

sudo asterisk -rvvv

Useful commands: pjsip show endpoints, pjsip show registrations, core show channels, pjsip set logger on (SIP packet trace — remember to turn it off).

HTTPS for the admin UI

The UI ships over HTTP on port 80. For production, give the PBX a DNS name and use FreePBX’s Admin → Certificate Management to issue a Let’s Encrypt certificate, then enable HTTPS under Admin → System Admin (or terminate TLS on Apache yourself). Until then, keep port 80 restricted to your admin IPs in the cloud firewall.

Next steps

  • Tips & tricks — the deferred ffmpeg install, backups, updates and troubleshooting