Deployment
Production hosting for CallMineAI. Assumes you've completed Installation and Configuration.
Build for production
composer install --no-dev --optimize-autoloader
npm install && npm run build
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
Recommended production .env:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://your-domain.com
QUEUE_CONNECTION=redis
CACHE_STORE=redis
SESSION_DRIVER=redis
HTTPS is mandatory
Twilio (and SIP/WhatsApp) webhooks require a publicly reachable HTTPS URL. Set APP_URL to your HTTPS domain so the callback URLs resolve correctly.
Queue worker (Supervisor)
The dialer and background jobs run on the queue. Keep at least one worker alive with Supervisor:
[program:callmineai-worker]
command=php /path/to/callmineai/artisan queue:work --tries=1 --timeout=120
directory=/path/to/callmineai
numprocs=2
autostart=true
autorestart=true
stopwaitsecs=3600
user=www-data
redirect_stderr=true
stdout_logfile=/path/to/callmineai/storage/logs/worker.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start callmineai-worker:*
Scheduler (cron)
One cron entry runs the Laravel scheduler, which triggers calling:dispatch every minute:
* * * * * cd /path/to/callmineai && php artisan schedule:run >> /dev/null 2>&1
Why both are required
calling:dispatch (scheduler) claims due calls and dispatches jobs; the queue worker executes those jobs (placing calls, processing results, analysis). Without either, campaigns queue calls but nothing dials. See Campaigns & Calls.
Web server
Point your web root at public/. Nginx example:
server {
listen 443 ssl;
server_name your-domain.com;
root /path/to/callmineai/public;
index index.php;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
Go-live checklist
- [ ]
APP_ENV=production,APP_DEBUG=false - [ ]
php artisan config:cache route:cache view:cache - [ ] HTTPS enabled;
APP_URLset to the HTTPS domain - [ ] Queue worker running (Supervisor) and scheduler cron active
- [ ] Twilio status/recording callback URLs publicly reachable
- [ ] Changed the default seed passwords
- [ ]
QUEUE_CONNECTION=redisandCACHE_STORE=redis(recommended) - [ ] ElevenLabs key added + voices synced; OpenAI key set
- [ ] Payment gateways configured (if selling subscriptions)
- [ ] A backup strategy for the database and
storage/
After deploying updates
php artisan migrate --force
npm run build
php artisan config:cache route:cache view:cache
sudo supervisorctl restart callmineai-worker:* # reload the workers