Platform-Specific Installation
Installation guides for Mini CRM on various hosting platforms.
Ubuntu Server (Bare Metal / VPS)
Prerequisites
sudo apt update && sudo apt upgrade -y1. Install PHP 8.3 with Extensions
sudo apt install -y php8.3 php8.3-fpm php8.3-mysql php8.3-mbstring \
php8.3-xml php8.3-curl php8.3-bcmath php8.3-json php8.3-zip \
php8.3-gd php8.3-intl php8.3-opcache2. Install Composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer3. Install Node.js & npm (v20+)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs4. Install MySQL 8.0
sudo apt install -y mysql-server
sudo mysql_secure_installationFollow prompts to set root password and remove test databases.
5. Install Redis (Optional)
sudo apt install -y redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server6. Install nginx
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx7. Install Supervisor (for queue worker)
sudo apt install -y supervisor8. Clone and Configure Mini CRM
# Create app directory
sudo mkdir -p /var/www/mini-crm
cd /var/www/mini-crm
# Clone repository
sudo git clone https://github.com/XgeniousLLC/geniousCRM.git .
# Set permissions
sudo chown -R $USER:$USER /var/www/mini-crm
# Install dependencies
composer install --no-dev --optimize-autoloader
npm ci && npm run build9. Setup Environment
cp .env.example .env
php artisan key:generateUpdate .env with your database credentials and domain.
10. Create Database
mysql -u root -p << EOF
CREATE DATABASE mini_crm CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'crm_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON mini_crm.* TO 'crm_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF11. Run Migrations
php artisan migrate --force
php artisan db:seed
php artisan storage:link12. Configure nginx
Create /etc/nginx/sites-available/mini-crm:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
root /var/www/mini-crm/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}Enable site:
sudo ln -s /etc/nginx/sites-available/mini-crm /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx13. Setup SSL (Let's Encrypt)
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com -d www.your-domain.com14. Configure Supervisor for Queue Worker
Create /etc/supervisor/conf.d/mini-crm.conf:
[program:mini-crm-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/mini-crm/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/mini-crm/storage/logs/worker.log
user=www-data
[program:mini-crm-scheduler]
command=php /var/www/mini-crm/artisan schedule:run
process_name=%(program_name)s
autostart=true
autorestart=true
startsecs=0
redirect_stderr=true
stdout_logfile=/var/www/mini-crm/storage/logs/scheduler.log
user=www-dataEnable and start:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start mini-crm-worker
sudo supervisorctl start mini-crm-scheduler15. Final Permissions
sudo chown -R www-data:www-data /var/www/mini-crm
chmod -R 755 /var/www/mini-crm/storage /var/www/mini-crm/bootstrap/cache16. Optimize for Production
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cachecPanel Installation
Prerequisites
- cPanel account with root or WHM access
- PHP 8.3 installed (via WHM > Manage PHP Installations)
1. Access Terminal
Login to WHM → Terminal (or SSH into your server)
2. Install PHP Extensions (via WHM)
- Navigate to WHM > Manage PHP Installations
- Select PHP 8.3
- Click Configure PHP extensions
- Ensure installed:
curl,gd,intl,json,mbstring,mysqli,openssl,xml,zip,bcmath - Click Save
3. Install Composer
cd /home/username/public_html
curl -sS https://getcomposer.org/installer | php
mv composer.phar composer4. Create MySQL Database (via cPanel)
- Login to cPanel
- Go to MySQL® Databases
- Create new database:
username_mini_crm - Create user:
username_crm_userwith strong password - Add user to database with all privileges
5. Clone Repository
cd /home/username/public_html
git clone https://github.com/XgeniousLLC/geniousCRM.git .Or if git not available, download and extract ZIP file in cPanel File Manager.
6. Install Dependencies
cd /home/username/public_html
php composer install --no-dev --optimize-autoloader
npm ci && npm run build7. Configure Environment
cp .env.example .env
php artisan key:generateEdit .env and update:
DB_HOST=localhost
DB_DATABASE=username_mini_crm
DB_USERNAME=username_crm_user
DB_PASSWORD=your_password
APP_URL=https://your-domain.com8. Run Migrations or Import Existing Database
Option A: Fresh Installation
php artisan migrate --force
php artisan db:seed
php artisan storage:linkOption B: Import Existing Database File
If you have an existing database dump (.sql file):
Upload
.sqlfile via cPanel File Manager to/home/username/public_html/Import via MySQL command (via cPanel Terminal or SSH):
# Using mysql command
mysql -h localhost -u username_crm_user -p username_mini_crm < /home/username/public_html/database.sql
# Or using cPanel phpmyadmin
# Login to phpMyAdmin > select database > Import tab > Choose file > Execute- If database is older version, run pending migrations:
php artisan migrate --force
php artisan storage:link- Skip
db:seed(your existing data is already in database)
Verify Import:
php artisan tinker
# In tinker shell:
>>> DB::select('SELECT COUNT(*) as count FROM users;')
>>> exit9. Set File Permissions
chmod -R 755 /home/username/public_html/storage
chmod -R 755 /home/username/public_html/bootstrap/cache10. Create Public HTML Entry Point
If Mini CRM is in subdirectory, create /home/username/public_html/index.php:
<?php
require __DIR__.'/mini-crm/public/index.php';Or point domain directly to mini-crm/public folder in cPanel Addon Domains.
11. Configure Cron Jobs
- Login to cPanel
- Go to Cron Jobs
- Add cron:
php /home/username/public_html/artisan schedule:run - Run every minute (
* * * * *)
12. Setup Queue Worker
Create long-running queue via cPanel Cron:
php /home/username/public_html/artisan queue:work --sleep=3 --tries=3 &Or use SSH for persistent worker in screen/tmux:
screen -d -m -S mini-crm-queue bash -c "cd /home/username/public_html && php artisan queue:work"13. Setup SSL (AutoSSL)
- Go to cPanel > SSL/TLS Status
- Your domain should auto-renew via AutoSSL
- If manual: SSL/TLS Manager > Manage SSL sites
14. Optimize
php artisan config:cache
php artisan route:cache
php artisan view:cachePlesk Installation
Prerequisites
- Plesk 18.0+ installed
- PHP 8.3 enabled on your subscription
- SSH access or Plesk Terminal
1. Enable PHP 8.3
- Login to Plesk Panel
- Go to Subscriptions
- Select your domain
- Click PHP Settings
- Select PHP 8.3 and ensure
curl,gd,intl,json,mbstring,mysqli,openssl,xml,zip,bcmathare enabled - Save
2. Access Terminal
Plesk Panel > Tools & Settings > Terminal or SSH into your server.
3. Install Composer
cd /var/www/vhosts/your-domain.com/httpdocs
curl -sS https://getcomposer.org/installer | php
mv composer.phar composer4. Create Database (via Plesk)
- Plesk Panel > Databases
- Click Add Database
- Set name:
mini_crmand user credentials - Save
5. Clone Repository
cd /var/www/vhosts/your-domain.com/httpdocs
git clone https://github.com/XgeniousLLC/geniousCRM.git .If no git, download ZIP and extract via Plesk File Manager.
6. Install Dependencies
cd /var/www/vhosts/your-domain.com/httpdocs
./composer install --no-dev --optimize-autoloader
npm ci && npm run build7. Configure Environment
cp .env.example .env
php artisan key:generateEdit .env:
DB_HOST=localhost
DB_DATABASE=mini_crm
DB_USERNAME=mini_crm_user
DB_PASSWORD=your_password
APP_URL=https://your-domain.com8. Run Migrations or Import Existing Database
Option A: Fresh Installation
php artisan migrate --force
php artisan db:seed
php artisan storage:linkOption B: Import Existing Database File
If you have existing database dump (.sql file):
Upload
.sqlfile via Plesk File Manager to/httpdocs/Import via MySQL command (via Plesk Terminal or SSH):
# Using mysql command
mysql -h localhost -u mini_crm_user -p mini_crm < /var/www/vhosts/your-domain.com/httpdocs/database.sql
# Or using Plesk phpMyAdmin
# Databases > mini_crm > phpMyAdmin > Import tab > Choose file > Execute- If database is older version, run pending migrations:
php artisan migrate --force
php artisan storage:link- Skip
db:seed(your existing data is already in database)
Verify Import:
php artisan tinker
>>> DB::select('SELECT COUNT(*) as count FROM users;')
>>> exit9. Fix Permissions
chmod -R 755 /var/www/vhosts/your-domain.com/httpdocs/storage
chmod -R 755 /var/www/vhosts/your-domain.com/httpdocs/bootstrap/cache10. Adjust Document Root (if needed)
- Plesk Panel > Domains > your-domain.com > Hosting Settings
- Change Document Root to
/httpdocs/public(if Mini CRM is in root) - Save
11. Setup Scheduled Tasks (Cron)
- Plesk Panel > Scheduled Tasks
- Add task:
- Command:
php /var/www/vhosts/your-domain.com/httpdocs/artisan schedule:run - Schedule: Every minute (
* * * * *)
- Command:
12. Queue Worker
Run persistent queue via SSH:
cd /var/www/vhosts/your-domain.com/httpdocs
screen -d -m -S mini-crm-queue bash -c "php artisan queue:work"Or configure via Plesk Scheduled Task with longer timeout.
13. SSL Certificate
Plesk auto-renews Let's Encrypt certificates:
- Domains > your-domain.com > SSL/TLS Certificates
- Certificate should auto-renew every 90 days
14. Optimize
php artisan config:cache
php artisan route:cache
php artisan view:cacheCloudPanel Installation
Prerequisites
- CloudPanel account active
- SSH access enabled
- Ubuntu 20.04+ or Debian 11+ server (CloudPanel standard)
1. Access SSH Terminal
Login to CloudPanel → Servers > SSH Terminal or use external SSH client.
2. Add Application
- CloudPanel > Applications > Create Application
- Set domain, PHP version (8.3), enable SSL
- CloudPanel auto-installs Nginx, PHP-FPM, MySQL, Redis
3. Clone Repository
cd /home/cloudpanel-user/htdocs/your-domain.com
git clone https://github.com/XgeniousLLC/geniousCRM.git .Or download ZIP and extract via CloudPanel File Manager.
4. Install Dependencies
cd /home/cloudpanel-user/htdocs/your-domain.com
composer install --no-dev --optimize-autoloader
npm ci && npm run build5. Setup Environment
cp .env.example .env
php artisan key:generateEdit .env:
DB_HOST=127.0.0.1
DB_DATABASE=cloudpanel_app
DB_USERNAME=cloudpanel_app
DB_PASSWORD=your_password
APP_URL=https://your-domain.com6. Create Database (via CloudPanel)
- CloudPanel > Databases > MySQL
- Create new database with credentials
- Note username/password
7. Run Migrations or Import Existing Database
Option A: Fresh Installation
php artisan migrate --force
php artisan db:seed
php artisan storage:linkOption B: Import Existing Database File
If you have existing database dump (.sql file):
Upload
.sqlfile via CloudPanel File Manager to/htdocs/your-domain.com/Import via MySQL command (SSH):
# Using mysql command
mysql -h 127.0.0.1 -u cloudpanel_app -p cloudpanel_app < /home/cloudpanel-user/htdocs/your-domain.com/database.sql
# Or using CloudPanel phpMyAdmin (if available)
# Databases > cloudpanel_app > phpMyAdmin > Import tab > Choose file > Execute- If database is older version, run pending migrations:
php artisan migrate --force
php artisan storage:link- Skip
db:seed(your existing data is already in database)
Verify Import:
php artisan tinker
>>> DB::select('SELECT COUNT(*) as count FROM users;')
>>> exit8. Fix Permissions
CloudPanel manages most permissions, but ensure:
chmod -R 755 /home/cloudpanel-user/htdocs/your-domain.com/storage
chmod -R 755 /home/cloudpanel-user/htdocs/your-domain.com/bootstrap/cache9. Configure Webroot
- CloudPanel > Applications > your-domain.com > Settings
- Set Document Root to
/publicfolder if needed - Save
10. Add Cron Job
- CloudPanel > Crons
- Add cron:
- Command:
php /home/cloudpanel-user/htdocs/your-domain.com/artisan schedule:run - Schedule: Every minute
- Command:
- Save
11. Run Queue Worker
Via SSH:
cd /home/cloudpanel-user/htdocs/your-domain.com
php artisan queue:work --sleep=3 --tries=3CloudPanel recommends keeping SSH persistent or using background process manager.
12. SSL Certificate
CloudPanel auto-manages Let's Encrypt:
- Applications > your-domain.com > SSL/TLS
- Certificate auto-renews (no action needed)
13. Optimize
php artisan config:cache
php artisan route:cache
php artisan view:cacheTroubleshooting by Platform
Ubuntu / VPS
- PHP-FPM socket not found: Check
/run/php/php8.3-fpm.sockpath in nginx config - Permission denied on storage: Run
sudo chown -R www-data:www-data /var/www/mini-crm - Queue worker not running: Check supervisor status with
sudo supervisorctl status
cPanel
- Composer not found: Use full path
/home/username/public_html/composeror install globally - MySQL connection refused: Verify DB user/password in cPanel MySQL section
- Cron not executing: Check WHM > Process Manager > cron is running
Plesk
- Document root issues: Ensure Plesk path is
/var/www/vhosts/domain.com/httpdocs/public - PHP version mismatch: Verify PHP Settings has 8.3 selected, not 7.x
- Database access denied: Check Plesk Databases user permissions
CloudPanel
- Storage permission denied: CloudPanel uses non-root user; ensure paths owned by
cloudpanel-user - Queue worker hanging: Use
timeoutwrapper or systemd service for auto-restart - Nginx config conflicts: CloudPanel manages nginx; avoid manual edits to
/etc/nginx
Email Configuration by Platform
Update MAIL_* in .env for your email provider:
Gmail (App Password)
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your@gmail.com
MAIL_PASSWORD=your_app_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your@gmail.comSendGrid
MAIL_MAILER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=587
MAIL_USERNAME=apikey
MAIL_PASSWORD=your_sendgrid_api_key
MAIL_ENCRYPTION=tlsAWS SES
MAIL_MAILER=aws
AWS_ACCESS_KEY_ID=your_key
AWS_SECRET_ACCESS_KEY=your_secret
AWS_DEFAULT_REGION=us-east-1
MAIL_FROM_ADDRESS=verified@domain.comNext Steps
- Verify installation: Visit
https://your-domain.com - Log in with default credentials:
admin@minicrm.test/password - Change password immediately from Profile page
- Configure app settings under Settings tab
- Import your contacts via CSV Import feature